ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Spring MVC - MyBatis Java 설정
    Spring/Spring MVC 2022. 1. 4. 01:08
    728x90
    반응형

    MyBatis

    • Java 언어를 이용하여 데이터 베이스를 연동하는 기술을 JDBC라 하는데 이 JDBC를 보다 쉽게
      이용할 수 있도록 설계된 라이브러리이다.
    • Spring Framework에서 이용할 수 있도록 라이브러리를 제공한다.

     

    더보기

    <dependency>
       <groupId>com.oracle.database.jdbc</groupId>
       <artifactId>ojdbc11</artifactId>
       <version>21.3.0.0</version>
    </dependency>

     - 오라클 JDBC 드라이버


    <dependency>
       <groupId>org.apache.commons</groupId>
       <artifactId>commons-dbcp2</artifactId>
       <version>2.9.0</version>

    </dependency>

     - 커넥션 풀 라이브러리

     - JDBC 이용해 생성한 Connection을 효율적으로 활용하기 위해 Connection 객체를 관리하는 것을

       DBCP의 개념으로 본다.

     

    <dependency>
       <groupId>org.mybatis</groupId>
       <artifactId>mybatis</artifactId>
       <version>3.5.8</version>
    </dependency>

     - MyBatis라이브러리


    <dependency>
       <groupId>org.mybatis</groupId>
       <artifactId>mybatis-spring</artifactId>
       <version>2.0.6</version>
    </dependency>

     - Spring과 MyBatis를 연결시켜주는 라이브러리

     

     


     

    db.properties 생성
    db.classname = oracle.jdbc.OracleDriver
    db.url = jdbc:oracle:thin:@localhost:1521/xepdb1
    db.username = 아이디
    db.password = 비밀번호

     

     

    BasicDataSource Bean 정의

     BasicDataSource는 접속 정보를 관리하는 객체이다. (ServletAppContext.java 에 정의해준다.)

     

    ServletAppContext.java    

    	// BasicDataSource에 쓰일 
    	// db.properties 파일에 저장한 데이터를 가져옴
    	@Value("${db.classname}")
    	private String db_classname;
    	
    	@Value("${db.url}")
    	private String db_url;
    	
    	@Value("${db.username}")
    	private String db_username;
    	
    	@Value("${db.password}")
    	private String db_password;
        
        // ..... //
        
        // 데이터베이스 접속 정보 관리
    	@Bean
    	public BasicDataSource dataSource() {
    		BasicDataSource source = new BasicDataSource();
    		source.setDriverClassName(db_classname);
    		source.setUrl(db_url);
    		source.setUsername(db_username);
    		source.setPassword(db_password);
    		
    		return source;
    	}

     

    SqlSessionFactory Bean 정의

     SqlSessionFactory는 접속, 쿼리 관리 등을 하는 객체이다. (ServletAppContext.java 에 정의해준다.)

     

     ServletAppContext.java  

    	// 쿼리문과 접속 관리하는 객체
    	@Bean
    	public SqlSessionFactory factory(BasicDataSource source) throws Exception{
    		SqlSessionFactoryBean factoryBean = new SqlSessionFactoryBean();
    		factoryBean.setDataSource(source);
    		SqlSessionFactory factory = factoryBean.getObject();
    		return factory;
    	}

     

    Mapper Bean 정의

     Mapper는 쿼리문 실행을 하는 객체이다. (ServletAppContext.java 에 정의해준다.)

     

     ServletAppContext.java  

    	// 쿼리문 실행을 위한 객체
    	@Bean
    	public MapperFactoryBean<MapperInterface> test_mapper(SqlSessionFactory factory) throws Exception{
    		MapperFactoryBean<MapperInterface> factoryBean = new MapperFactoryBean<MapperInterface>(MapperInterface.class);
    		factoryBean.setSqlSessionFactory(factory);
    		return factoryBean;
    	}

     

    Mapper 역할을 하는 Interface 정의

     위 MapperFactoryBean에 쓰일 MapperInterface를 정의한다. database 패키지를 만들어 관리해주자

     

    MapperInterface.java                   (kr.co.database) 

    public interface MapperInterface {
    
    	@Insert("insert into spring_mvc_table (data1, dat2, data3) values (#{data1}, #{data2}, #{data3}")
    	void insert_data(DataBean dataBean);
    	@Select("select data1, data2, data3 from spring_mvc_table")
    	List<DataBean> select_data();
    }

     insert_data를 호출되면 해당 쿼리문을 데이터베이스에 전달해주고, #{data1}, #{data2}, #{data3}는
    해당 DataBean property에 값들이 세팅된다.

     

     

    DB에 데이터를 저장하고 가져올 Bean 정의

     property는 테이블의 컬럼명과 같아야 하는 점을 주의해라

    public class DataBean {
    
    	private String data1;
    	private String data2;
    	private String data3;
    	
    	public String getData1() {
    		return data1;
    	}
    	public void setData1(String data1) {
    		this.data1 = data1;
    	}
    	public String getData2() {
    		return data2;
    	}
    	public void setData2(String data2) {
    		this.data2 = data2;
    	}
    	public String getData3() {
    		return data3;
    	}
    	public void setData3(String data3) {
    		this.data3 = data3;
    	}
    	
    	
    }

     

     

    Controller에서 Mapper 주입받아 사용
    @Controller
    public class testController {
    
    	@Autowired
    	MapperInterface mapper1;
    	
    	@GetMapping("/input_data")
    	public String input_data() {
    		
    		return "input_data";
    	}
    	
    	@PostMapping("/input_pro")
    	public String input_pro(DataBean dataBean) {
    		mapper1.insert_data(dataBean);
    		return "input_pro";
    	}
    	@GetMapping("/read_data")
    	public String read_data(Model model) {
    		
    		List<DataBean> list = mapper1.select_data();
    		model.addAttribute("list", list);
    		
    		return "read_data";
    	}	
    	
    }
    @Autowired
    MapperInterface mapper1;
     - Mapper 주입

    mapper1.insert_data(dataBean);
     - mapper1에 insert_data 메서드 호출

    List<DataBean> list = mapper1.select_data();
     - mapper1에 select_data 메서드 호출

     

     

    데이터 베이스에서 가져온 데이터들을 JSP에 출력
    	<c:forEach var='obj' items='${list }'>
    		${obj.data1 }, ${obj.data2 }, ${obj.data3 }<br/>
    	
    	</c:forEach>

     

    728x90
    반응형

    댓글

Designed by Tistory.