MYBatis Mapper Xml의 속성
마이바티스에서의 쿼리문
Mybatis를 사용할때 xml에서 만드는 태그명은 query문의 시작부분이다.
-Select
- Insert
- Update
- Delete
ex)
<!-- id는 인터페이스의 메서드명 resultType = 반환타입 -->
<select id="getTime" resultType="String">
select now()
</select>
MapperTag
Namespace | 인턴페이스 전체경로 작성 ( 인터페이스 동일한 이름으로 병함해서 처리함 ) |
Select 속성
Id | 메서드를 찾기위한 구분자 ( 인터페이스의 메서드명과 동일 ) |
parameterType | 생략가능// 구문에 전달된 파라미터 타입 ( 패키지경로 포함, 전체 클래스명 ) |
resultType | 결과 반환타입 ( 패키지경로포함, 전체 클래스명 ) |
resultMap | 외부 Map타입을 이용한 반환타입 ( Join할때 사용함) |
Insert, Update, Delete
Id | 메서드를 찾기위한 구분자 ( 인터페이스의 메서드명과 동일 ) |
parameterType | 생략가능// 구문에 전달된 파라미터 타입 ( 패키지경로 포함, 전체 클래스명 ) |
Sql 구문의 값을 전달
기존의 pstmt의 ? 를 #{name}으로 대체한다 |
부등호 같은 문자열로 인식시키는 방법
<![CDATA[
코드
]]>
마이바티스의 두개이상 데이터 맵핑 처리 (중요)
- VO클래스 자동맵핑
- HashMap 자동맵핑 (지양한다)
- @Param이름지정을 사용해서 맵핑
동적쿼리 지원
- if
- chose(when, otherwise)
- foreach
쿼리문을 만들때 여러개의 매개변수를 받는법
SELECT 구문 사용법
- list에 select의 리턴값 여러개 넣기
interface에서 정의
public ArrayList<ScoreVO> getScore();
xml에서
<!-- ;는 작성하지 않는다 -->
<!-- 한행에 대한 처리를 할 데이터 타입 -->
<select id="getScore" resultType="com.simple.command.ScoreVO">
select * from score
</select>
테스트할 코드
//select 태그의 ResultType
@Test
public void testCode03() {
ArrayList<ScoreVO> list = testMapper.getScore();
System.out.println(list.toString());
}
- 매개변수를 가지고 조회(select)하는 경우
1. 인터페이스에 메서드 생성
public ScoreVO getOne(int a);
2. mapper xml에 쿼리문 작성
<!-- 매개변수 - 단일값(interface에서 지정한 매개변수명 그대로 들어감) -->
<select id="getOne" resultType="com.simple.command.ScoreVO">
select * from score where num = #{a}
</select>
3. 클래스에서 메서드 실행
@Test
public void testCode04() {
ScoreVO vo = testMapper.getOne(10);
System.out.println(vo.toString());
}
주의할점 : 매개변수는 그대로 가져온다

결과값

- Select - Map타입의 반환 (MAP을 통한 select는 부득이한 경우에만 사용함)
1. Mapper 인터페이스에 메서드 생성
public Map<String, Object> selectMap(int num);
2. Mapper XML에 구문생성
<select id="selectMap" resultType="map" parameterType="int">
select * from score where num=#{num}
</select>
3. Class에서 호출 + 실행
//select - map타입의 반환
@Test
public void testCode08() {
Map<String, Object> map = testMapper.selectMap(6);
System.out.println(map.toString());
}
결과

- Select - Map을 통한 다중행 조회 (MAP을 통한 select는 부득이한 경우에만 사용함)
1. Mapper 인터페이스에 메서드 생성
public ArrayList<Map<String, Object>> selectTwo(); //다중행Map
2. Mapper XML에 구문생성
<select id="selectTwo" resultType="map">
select * from score
</select>
3. Class에서 호출 + 실행
//select - map을 통한 다중행 조회
@Test
public void testCode09() {
ArrayList<Map<String, Object>> list = testMapper.selectTwo();
System.out.println(list.toString());
}
결과

Insert구문 사용법
- 단일 매개변수 Insert구문
Mapper 인터페이스에 메서드 생성
public int insertOne(String name);
Mapper XML에 구문생성
<!-- parameterType - 매개변수의 타입 (생략가능함) -->
<insert id="insertOne" parameterType="String" >
insert into score(name) values(#{name})
</insert>
Class에서 호출 + 실행
//insert -단일값
@Test
public void testCode05() {
int result = testMapper.insertOne("이순영");
System.out.println("성공실패 : "+ result);
}
결과 =>


- 다중 매개변수 Insert구문(VO)
Mapper 인터페이스에 메서드 생성
-vo를 사용해서 한번에 값을 다 집어넣음
public int insertTwo(ScoreVO vo);
Mapper XML에 구문생성
<insert id="insertTwo" parameterType="com.simple.command.ScoreVO">
insert into score(name, kor, eng)
values(#{name}, #{kor}, #{eng})
</insert>

Class에서 호출 + 실행
//insert-다중값(Setter명)
@Test
public void testCode06() {
ScoreVO vo = new ScoreVO(0, "테스트", "50", "100");
int result = testMapper.insertTwo(vo);
System.out.println("성공실패 : "+ result);
}
결과 =>


- 다중 매개변수 Insert구문(MAP)
Mapper 인터페이스에 메서드 생성 (map를 사용해서 값을 받아서 넣을 예정)
public int insertThree(Map<String, String> map); //다중값
Mapper XML에 구문생성
<insert id="insertThree">
insert into score(name, kor, eng)
values(#{name}, #{kor}, #{eng})
</insert>

Class에서 호출 + 실행
//insert- 다중값(MAP) : key값이 파라미터가 됨
@Test
public void testCode07() {
Map<String, String> map = new HashMap<>();
map.put("name", "홍길자");
map.put("kor", "30");
map.put("eng", "40");
int result = testMapper.insertThree(map);
System.out.println("성공실패 : "+ result);
}
결과 =>

Update구문 사용법
- Update 구문
1. Mapper 인터페이스에 메서드 생성
public boolean updateOne(ScoreVO vo);
2. Mapper XML에 구문생성
<update id="updateOne" parameterType="com.simple.command.ScoreVO">
update score
set name=#{name},
kor=#{kor},
eng=#{eng}
where num=#{num}
</update>
3. Class에서 호출 + 실행
@Test
public void testCode10() {
ScoreVO vo = new ScoreVO(6, "변경", "100", "100");
boolean result = testMapper.updateOne(vo);
System.out.println(result); //성공시 true 실패시 false
}
결과


'Spring' 카테고리의 다른 글
Mybatis 활용 (0) | 2023.02.06 |
---|---|
mybatis-Configuration (Alias설정) (1) | 2023.02.06 |
MyBatis (2) | 2023.02.03 |
스프링 MVC웹서비스 (JDBC) (0) | 2023.02.03 |
mysql 스키마 & 계정 & 테이블 생성방법 (2) | 2023.02.03 |
댓글