Programming๐Ÿ‘ฉ๐Ÿป‍๐Ÿ’ป/AxBoot

Mybatis์—ฐ๋™

Dodal 2021. 4. 19. 18:05
์ž์„ธํ•œ ๋ฉ”๋‰ด์–ผ์€ ๊ณต์‹ํ™ˆํŽ˜์ด์ง€์— ์žˆ๊ธดํ•จ

api.axboot.com/

 

AXBoot์†Œ๊ฐœ · ax-boot-document

 

api.axboot.com


๊ฐœ๋ฐœ์ž๋„๊ตฌ-ModelExtractor - CompanyM - code์—์„œ interface/XML ๋ถ€๋ฌธ์„ ํ™œ์šฉ.

 

1. CompanyController.java์—์„œ mybatis ์กฐํšŒ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ•ด์•ผํ•จ.

์•ž์„œ querydsl ๊ธฐ๋Šฅ์—์„œ ์กฐํšŒ๋ถ€๋ถ„์„ ๊ฐ€์ ธ์™€์„œ ์•ฝ๊ฐ„์˜ ๋ณ€๊ฒฝ์„ ํ•ด์คŒ.

*์ •์˜๊ฐ€ ์•ˆ๋œ ํ•จ์ˆ˜๋‚˜ ํด๋ž˜์Šค๋Š” alt+Enter ๋‹จ์ถ•ํ‚ค๋กœ ์ƒ์„ฑํ•œ๋‹ค.

control+alter+b = ์ •์˜๋œ ํด๋ž˜์Šค ํŒŒ์ผ๋กœ ์ด๋™(์ธํ…”๋ฆฌ์ œ์ด ๊ธฐ์ค€)

 // value= "/mybatis"๋กœ ๋ณ€๊ฒฝ
    @RequestMapping(value = "/myBatis", method = RequestMethod.GET, produces = APPLICATION_JSON)
    @ApiImplicitParams({
            @ApiImplicitParam(name = "company", value = "ํšŒ์‚ฌ๋ช…", dataType = "String", paramType = "query"),
            @ApiImplicitParam(name = "ceo", value = "๋Œ€ํ‘œ์ž", dataType = "String", paramType = "query"),
            @ApiImplicitParam(name = "bizno", value = "์‚ฌ์—…์ž๋ฒˆํ˜ธ", dataType = "String", paramType = "query")
    })
    
    //๋ฉ”์„œ๋“œ๋ช… ๋ณ€๊ฒฝ
    //mybatis,jap ๊ตฌ๋ถ„ํ•˜๊ธฐ ์œ„ํ•ด ์ฟผ๋ฆฌ๋ฌธ ํ‘œํ˜„์„ ๊ทธ๋Œ€๋กœ ๊ฐ€์ ธ๋‹ค ์“ฐ๋Š”๊ฒŒ ์ข‹๋‹ค.
    public Responses.ListResponse list3(RequestParams<Company> requestParams) {
                                    //getByQueryDsl -> selectBy:๋‹จ์ˆœ ์กฐํšŒ๊ฐ€ ์•„๋‹Œ where์กฐ๊ฑด์„ ๊ฐ€๋ฏธ
                                    // service๋‹จ์— ์ƒ์„ฑ์„ ํ•ด์•ผํ•จ.
        List<Company> list = companyService.selectBy(requestParams); //companyservice๊ฐ€์žˆ๊ธฐ๋•Œ๋ฌธ์— ์ž๋™์œผ๋กœ ์ƒ์„ฑ
        return Responses.ListResponse.of(list);
    }

 

2. companyํŒจํ‚ค์ง€์— CompanyMapper ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ƒ์„ฑ, MyBatisMapper๋ฅผ ์ƒ์†๋ฐ›๋Š”๋‹ค.

์—ฌ๊ธฐ์„œ ์ปจํŠธ๋กค๋Ÿฌ์—์„œ ์ •์˜๋˜์ง€ ์•Š์•˜๋˜ selectBy๊ฐœ์ฒด๋ฅผ ์ƒ์„ฑ.

// mybatismapper ์ƒ์† ์ถ”๊ฐ€
public interface CompanyMapper extends MyBatisMapper {
    List<Company> selectBy(String company);

    // resourceํด๋”์— edu.axboot.domain.company ๊ฒฝ๋กœ๋ฅผ ๋งŒ๋“ค๊ณ 
    // company์— CompanyMapper.xml ์ถ”๊ฐ€.
}

 

3. CompanyService.java์— selectByํ•จ์ˆ˜๋ฅผ ์ •์˜ ํ•ด์คŒ

//selectBy new๋ฉ”์„œ๋“œ ์ƒ์„ฑ
    public List<Company> selectBy(RequestParams<Company> requestParams) {

            // ๋ฐ›์„ ํŒŒ๋ผ๋ฏธํ„ฐ๊ฐ’ ์ถ”๊ฐ€
            String company = requestParams.getString("company", "");
            String ceo = requestParams.getString("ceo", "");
            String bizno = requestParams.getString("bizno", "");

            //copanyMapper์— selectBy๋ฅผ ์ƒ์„ฑ.
            List<Company> companyList = this.companyMapper.selectBy(company); //ํšŒ์‚ฌ๋ช…์œผ๋กœ ๊ฒ€์ƒ‰ํ•ด์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์˜ด

            return companyList;
        }

 

4. ๋งตํผ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ”๋กœ ์ ์šฉ ์‹œํ‚ค๊ธฐ ์œ„ํ•ด resource ๋””๋ ‰ํ† ๋ฆฌ๋ฅผ ๋งŒ๋“ค๊ณ  mapper.xml ํŒŒ์ผ์— ์กฐํšŒ๊ธฐ๋Šฅ ์ฟผ๋ฆฌ๋ฅผ ์†Œ์Šค์ฝ”๋“œ๋ฅผ ๋งŒ๋“ฆ.

(resource-edu-axboot-domain-company-companyMapper.xml)

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">

<mapper namespace="edu.axboot.domain.companyM.CompanyMapper">
<!-- ์ธํ„ฐํŽ˜์ด์Šค ์†์„ฑ ๋ช…์นญ๊ณผ id ๋ช…์นญ์ด ๋ฐ˜๋“œ์‹œ ๋™์ผํ•ด์•ผํ•จ.
resultType์€ ์ž๋™์ ์œผ๋กœ ์ด๋ฆ„์ด ์ƒ์„ฑ๋œ ๊ฒƒ์œผ๋กœ ์ด๋ฆ„ ๋ณ€๊ฒฝ.
Listํƒ€์ž…์ด company/   namespace ๋Š” ๊ฒฝ๋กœ๋ช…๊ณผ ๋˜‘๊ฐ™์ด-->
    <select id="selecyBy" resultType="company" parameterType="String" statementType="PREPARED">
        SELECT
            ID AS id,
            COMPANY_NM AS companyNm,
            CEO AS ceo,
            BIZNO AS bizno,
            TEL AS tel,
            ZIP AS zip,
            ADDRESS AS address,
            ADDRESS_DETAIL AS addressDetail,
            EMAIL AS email,
            REMARK AS remark,
            USE_YN AS useYn
        FROM
         COMPANY_M
    </select>

</mapper>

 

* Namespace๋Š” ์ „ system์—์„œ ์œ ์ผํ•ด์•ผํ•œ๋‹ค.

 

๊ทธ๋Ÿฐ๋ฐ ๋ง‰์ƒ ์กฐํšŒ๋ฅผ ํ•ด๋ณด๋‹ˆ parameterType="String"์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ๋ถˆ๋Ÿฌ์˜ฌ ์ˆ˜ ์—†์—ˆ๋‹ค.

๊ทธ๋ž˜์„œ parameterType์„ company๊ฐ์ฒด๋กœ ๋ณ€๊ฒฝ์„ ํ•˜์˜€๋‹ค.


insert/update/delete ๊ธฐ๋Šฅ ์ถ”๊ฐ€

*๋ฆฌํŒฉํ„ฐ : shift+F6 ํ‚ค ๋™์‹œ์— ๋ณ€์ˆ˜ ์ด๋ฆ„ ๋ฐ”๊พธ๊ธฐ.

 

1. CompanyController.java

    @RequestMapping(value = "/MyBatis", method = {RequestMethod.PUT}, produces = APPLICATION_JSON)
    public ApiResponse save3(@RequestBody List<Company> request) {
        companyService.saveByMyBatis(request);
        return ok();
    }

 

2. CompanyService.java

saveByMyBatis์— insert/update/delete ์กฐ๊ฑด์ถ”๊ฐ€

public void saveByMyBatis(List<Company> request) {
        for (Company company: request) {
            if (company.isCreated()) {
                this.companyMapper.insert(company);
            } else if (company.isModified()) {
                this.companyMapper.update(company);
            } else if (company.isDeleted()) {
                this.companyMapper.delete(company);

            }
        }
    }

 

3. Mapper์— ์ƒ์„ฑ

// mybatismapper ์ƒ์† ์ถ”๊ฐ€
public interface CompanyMapper extends MyBatisMapper {
   // List<Company> selectBy(String company);
    List<Company> selectBy(Company company);

    void insert(Company company);

    void update(Company company);

    void delete(Company company);

    // resourceํด๋”์— edu.axboot.domain.company ๊ฒฝ๋กœ๋ฅผ ๋งŒ๋“ค๊ณ 
    // company์— CompanyMapper.xml ์ถ”๊ฐ€.
}

 

4. CompanyMapper.xml์— ์ฟผ๋ฆฌ๋ฌธ ์ถ”๊ฐ€

<insert id="insert" parameterType="company" statementType="PREPARED">
    INSERT INTO COMPANY_M (
        COMPANY_NM,
        CEO,
        BIZNO,
        TEL,
        ZIP,
        ADDRESS,
        ADDRESS_DETAIL,
        EMAIL,
        REMARK,
        USE_YN
    ) VALUES (
        #{companyNm},
        #{ceo},
        #{bizno},
        #{tel},
        #{zip},
        #{address},
        #{addressDetail},
        #{email},
        #{remark},
        #{useYn}
    )
</insert>
<update id="update" parameterType="company" statementType="PREPARED">
    UPDATE COMPANY_M
    SET
        COMPANY_NM = #{companyNm},
        CEO = #{ceo},
        BIZNO = #{bizno},
        TEL = #{tel},
        ZIP = #{zip},
        ADDRESS = #{address},
        ADDRESS_DETAIL = #{addressDetail},
        EMAIL = #{email},
        REMARK = #{remark},
        USE_YN = #{useYn}
    WHERE
        ID = #{id}
</update>
<delete id="delete" parameterType="company" statementType="PREPARED">
    DELETE FROM
        COMPANY_M
    WHERE
        ID = #{id}
</delete>

 

๋ฐ˜์‘ํ˜•