Spring

Mybatis +@

0304호 2023. 2. 6.

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

댓글