Spring, Mybatis

3-2. 0903_ Mybatis개요(계속), SQL RDBMS, DBeaver

55yudi 2021. 9. 3. 14:31

- 개요

MyBatis의 개요

Mapper : mapper-emp.xml

Mapped Statements : <select> 태그문  --> RDBMS와 연결

SQL

    - RDBMS : 관계형 데이터베이스를 생성하고 수정하고 관리할 수 있는 소프트웨어

       * Oracle (sql developer에서 사용)

       * MariaDB (Heidi SQL에서 사용)

    - DBMS

       * MySQL

       * heido

 

https://dbeaver.io/download/

 

Download | DBeaver Community

Download Tested and verified for MS Windows, Linux and Mac OS X. Install: Windows installer – run installer executable. It will automatically upgrade version (if needed). MacOS DMG – just run it and drag-n-drop DBeaver into Applications. Debian package

dbeaver.io

위 링크에서 Community Edition 21.2.0 설치

--> MariaDB, MySQL, Oracle DB 등을 한번에 볼 수 있다.

 

https://mybatis.org/spring/

 

mybatis-spring –

Introduction What is MyBatis-Spring? MyBatis-Spring integrates MyBatis seamlessly with Spring. This library allows MyBatis to participate in Spring transactions, takes care of building MyBatis mappers and SqlSessions and inject them into other beans, trans

mybatis.org

버전을 잘 맞춰서 사용해야 한다.

- 우리가 사용한 Spring Framework 버전은 : 5.0.20. (5.0+ : 5.0보다 더 상위버전일 것)

- 우리가 사용한 mybatis-spring 버전은 : 2.0.6

- 우리가 사용한 MyBatis 버전은 : 3.5.7


Mybatis - 파라미터 바인딩

Map으로 지정하는 방법은 권고하지 않는다.

 

<MapTest.java>

이름을 지정해서 넣고 가져오는 것은 편할 수 있지만

코딩 시 스펠링 오류나 타입 오류를 만드는 실수를 할 수 있어서 놉,,


- hr-schema-mysql.sql 다운로드 (클래스룸에 있음)

hr-schema-mysql.sql
0.03MB

- dbeaver-ce-21.2.0-x86_64-setup.exe 설치 (위쪽에 링크있음)

졸귀탱

DBeaver 실행 - 마우스우클릭 - create - connection

MariaDB를 선택 - 다음

port넘버 확인하고, password 입력

 - password는 admin 으로 시도,,

 

localhost:port넘버로 생성된 것을 확인할 수 있다.

 

더블클릭하면 뭘 다운로드하라고 하는데 다운로드가 완료되면

고래에 초록색 체크박스가 생겨야 잘 연결된 것

 

상단 메뉴바에서 파일 - 다음 이름 지정된 파일 찾기

아까 다운받았던 sql파일을 선택 - 열기

파일이 열린 것을 확인할 수 있다.

 

마우스우클릭 - sql편집기를 클릭하고

열었던 파일의 내용을 전체 선택 - 복사해서

<localhost> script 에 전체 붙여넣기

ctrl+S로 저장 후, 3번째 아이콘을 눌러서 sql스크립트를 실행한다.

실행이 끝난 후 localhost에서 마우스 우클릭 - 새로고침 하면

hr이 생성된 것을 확인할 수 있다.

 

hr에서 마우스우클릭 - 새 스크립트 생성

sql문 입력하고 실행해보면 데이터베이스가 잘 나타난다.


다시 Eclipse로 돌아와서

- MariaDB JAVA Client 디펜던시 코드를 porm.xml에 추가

<!-- https://mvnrepository.com/artifact/org.mariadb.jdbc/mariadb-java-client -->
<dependency>
    <groupId>org.mariadb.jdbc</groupId>
    <artifactId>mariadb-java-client</artifactId>
    <version>2.7.4</version>
</dependency>

- context-spring-annotation.xml에 mariaDB bean코드 추가

(port넘버가 3306인지 4406인지 확인할 것)

<!-- MariaDB JDBC DataSource -->
	<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
		<property name="driverClassName" value="org.mariadb.jdbc.Driver" />
		<property name="url" value="jdbc:mariadb://localhost:3306/hr" />
		<property name="username" value="root" />
		<property name="password" value="admin" />
	</bean>

코드가져온 링크 : https://ming9mon.tistory.com/64

 

Spring MariaDB 연동 (MyBatis 사용)

MyBatics MyBatics란 객체 지향 언어 자바의 관계형 데이터 베이스 프로그래밍을 보다 쉽게 사용할 수 있도록 도와주는 프레임 워크다. MyBatics를 사용함으로써 개발자의 부담을 덜어주고, 생산성 향

ming9mon.tistory.com

 

- 실행시켰더니 오류나서 context-spring-annotation.xml에서 HikariCP 코드 부분 주석처리함

- EmpMainSpring3 에서 실행시키면

오류없이 콘솔창이 뜨긴 하는데 결과값이 맞는건지는 모르겠,,ㅠ

 


과제4 설명

<EmpMain.java>

package myspringmybatis;

import java.util.List;
import java.util.Scanner;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.stereotype.Component;

@Component
public class EmpMain {
	
   public static void main(String[] args) throws Exception {
	   
	   int deptId = 100;
	   ApplicationContext context = 
            new ClassPathXmlApplicationContext("classpath:context-spring-annotation.xml");
	   EmpDAO dao = (EmpDAO) context.getBean("empDAO");
       Scanner scan = new Scanner(System.in);
       System.out.print("검색할 사번을 입력하세요(0은 종료) :");
       int empId = scan.nextInt();
	   
       while(empId != 0) {
    	   //입력한 사번의 직원정보를 출력한다.
    	   EmpVO vo = dao.getEmpById(empId);
    	   System.out.println(vo);
    	   System.out.print("검색할 사번을 입력하세요(0은 종료) :");
    	   empId = scan.nextInt();
       }
       System.out.println("프로그램을 종료합니다.\n");
             
   }
}

<EmpVO.java>

package myspringmybatis;

public class EmpVO { //부서원의 정보목록(Value Object)
	public int employeeId;
	public String lastName;
	public int deptId;
	public int salary;
	public String email;
	
	@Override
	public String toString() {
		return "EmpVO [employeeId = " + employeeId + ", lastName = " + lastName + ",deptId = " + deptId + ",salary = " + salary + ",email = " + email + "]";
	}

}

<EmpDAO.java>

package myspringmybatis;

import java.util.List;

import org.apache.ibatis.session.SqlSession;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

@Component
public class EmpDAO {

	@Autowired
	SqlSession session;

   public List<EmpVO> getEmpListByDeptId(int deptId) throws Exception  {
	   return session.selectList("getEmpListByDeptId",deptId);
   }
   
   public EmpVO getEmpById(int empId) throws Exception {
	   return session.selectOne("getEmpById", empId);
	   //					("") : mapper의 select태그의 id value이다
   }
}

<mapper-emp.xml>에 코드 추가

 <select id="getEmpById" parameterType="int" resultType="myspringmybatis.EmpVO">
             select employee_id employeeId,
                   last_name lastName,
                   department_id departmentId,
                   salary salary,
                   email email
             from employees
             where employee_id = #{empId}          
       </select>

 

- 실행시키고 콘솔창에 사번 입력하면 결과가 잘 뜬다 (와!)


Mybatis 동적 SQL

mybatis dynamic sql update set test - 다음코드를 사용하려고 하는데 그 전에 준비과정 먼저 할 것임

https://mybatis.org/mybatis-3/dynamic-sql.html

<update id="updateAuthorIfNecessary">
  update Author
    <set>
      <if test="username != null">username=#{username},</if>
      <if test="password != null">password=#{password},</if>
      <if test="email != null">email=#{email},</if>
      <if test="bio != null">bio=#{bio}</if>
    </set>
  where id=#{id}
</update>

 

 

- DBeaver 열어서 새 스크립트 생성하고 코드 입력

use hr;

create table product (
	id varchar(50) primary key,
	price int,
	maker varchar(100),
	name varchar(100)
);

select * from product;

*** 각 코드마다 ctrl+enter 를 쳐야함!

use hr; 에서 ctrl+enter로 먼저 실행시키고  create문에서 실행해야 테이블 생성이 됨

select문 실행하면 아래에 만들어진 테이블이 나타난다(물론 데이터 안넣어줘서 아무것도 없음)

 

- ProductMain 클래스 생성

package myspringmybatis;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class ProductMain {

	public static void main(String[] args) throws Exception {
		ApplicationContext context = 
	            new ClassPathXmlApplicationContext("classpath:context-spring-annotation.xml");
		   ProductDAO dao = (ProductDAO) context.getBean("productDAO");
		   ProductVO vo = new ProductVO();
		   vo.id = "2222";
		   vo.price = 1000000;
		   vo.maker = "mycom";
		   vo.name = "mydreamcar";
		   dao.create(vo); //사용자로부터 입력을 받고 create를 호출

	}

}

- ProductDAO 클래스 생성

package myspringmybatis;

import org.apache.ibatis.session.SqlSession;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

@Component
public class ProductDAO {

	@Autowired
	SqlSession session;
	
	//create
	public int create(ProductVO vo) throws Exception {
		return session.insert("create", vo); //메서드 타입 자체가 int라서 insert로 함
	}
}

- ProductVO 클래스 생성하고 sql문에 썼던 코드 참고해서 매개변수들 코드 넣어주기

package myspringmybatis;

public class ProductVO {
	/*
	id varchar(50) primary key,
	price int,
	maker varchar(100),
	name varchar(100)
	*/
	public String id;
	public int price;
	public String maker;
	public String name;
}

- DBeaver에서 insert 문 쓰고 ctrl+enter

- 별도의 mapper.xml을 만들기 : mapper-product.xml --> sql문 붙이기

 

<?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="mapper-product">
	<insert id="create" parameterType="myspringmybatis.ProductVO" >
		insert into product(id, price, maker, name)
		values(#{id}, #{price}, #{maker}, #{name})
	</insert>
</mapper>

 

- ProductMain에서 한번 실행 후 DBeaver에서 select문 실행하면 테이블에 데이터가 들어온 것을 확인할 수 있다.

짱신기

 

- ProductMain을 복붙해서 ProductUpdateMain으로 생성

package myspringmybatis;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class ProductUpdateMain {

	public static void main(String[] args) throws Exception {
		ApplicationContext context = 
	            new ClassPathXmlApplicationContext("classpath:context-spring-annotation.xml");
		   ProductDAO dao = (ProductDAO) context.getBean("productDAO");
		   ProductVO vo = new ProductVO();
		   vo.id = "2222";
		   vo.price = 2000000;
		   //vo.maker = "mycom";
		   //vo.name = "mydreamcar";
		   //int result = dao.update(vo);

	}

}

 

- update문을 적고 실행

 

- eclipse에서 update가 가능하도록 하기,,인데 일단 ProductUpdateMain에서 오류나는 곳 막아두고

  다음 시간에 이어서 하기로 함..! (야호 주말)