본문 바로가기

Programming👩🏻‍💻/AxBoot

Mybatis연동

자세한 메뉴얼은 공식홈페이지에 있긴함

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>

 

'Programming👩🏻‍💻 > AxBoot' 카테고리의 다른 글

Banner / Logging / Excel download  (0) 2021.04.30
jsfiddle  (0) 2021.04.23
*중요 디버깅, 단위테스트  (0) 2021.04.22
QueryDSL  (0) 2021.04.19
Mac 맥) Maven 설치 및 환경 변수 설정  (0) 2021.04.19