👀 [Mybatis]
DB Connection ,
spring DB의 DDL을 빠르게 처리해주는 대표 라이브러리
- mybatis / mybatis-spring / javax.inject 3개 다운
- Controller가 너무 무거워짐을 방지
- Mybatis 사용시 Connection 사용하지 않음
config.xml
JAVA의 DAO(getter,setter) => 얘가 없으면 db연결조차 못함,모든 DAO가 여기 다들어감
mapper.xml
모든 DDL이 여기 다들어감 <select> <delete> <update> .. 등
=> 이 두개에 다 몰아져있어 유지보수 용이 , 이 두개가 Controller의 보조역할을 한다...?
DB
Module ( DAO or VO / Data DDL Module 을 포함 )
DAO or VO : config.xml
Data DDL Module : mapper.xml
<=> Controller <=> View
방식 1. @Bean - properties => @Configuration
방식 2. properties / config.xml,mapper.xml
방식 3. dbconfig.xml / config.xml , mapper.xml
방식 4. JPA / @Column, @Table, @entity
..등
- window - Eclips market
Mybatis 1.2.5 검색 -> more info - lernmore - 사이트경로 복사해서
(진짜 사이트 접속 해서 버전 확인 가능) mybatis 버전확인 아래 git 경로 복사 - Sts 돌아와서 help - install new software 들어가서
경로 복붙 후 둘다 체크 ( Contact all~체크 아웃 필수 )
Next next accept down
다 다운 되면 restart yes - mybatis genrator도 동일한 방식으로 다운
: more info -> url 접속 -> 2021-09 경로 복붙 후 둘다 체크 후 다운 ( Contact all~체크 아웃 필수 ) - Pom.xml 에
Maven에서 mybatis spring 1.3.3 복붙, mybatis 3.4.6 복붙 후 업데이트
=> ❗ java 11번은 3.2점대 사용 x : 3.4 이상 사용해야함
(버전 너무 높으면 x - 자바버전에 따라 잘 맞출것)
maven 프로젝트 업데이트
서버 리스타트 - dbconfig.xml에
<bean id="sqlfact" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dbInfo"></property> 위에 id랑 맞추기
<property name="configLocation" value="classpath:/META-INF/config.xml"></property>
<property name="mapperLocations" value="classpath:/META-INF/mapper.xml"></property>
</bean>
<bean id="template" class="org.mybatis.spring.SqlSessionTemplate" destroy-method="close"> //id맘대루
<constructor-arg name="sqlSessionFactory" ref="sqlfact"></constructor-arg> //위에 아이디랑 맞추기
</bean> //destory-method : 외부 연결 허용
=> 아래 얘는 사용하기 전엔 선언 x (사용하기 전은 주석처리!) ,
=> 주석 풀어도 에러 안나게 하려면 ? namespaces -> mybastis-spring 체크 -> 오른쪽 최신버전 체크 후
=> dbconfig.xml <bean> 전에 (<beans> 태그 열고 바로 아래 안에) <context:annotation-config /> 추가
=> java 버전 3.4 이상 해야 에러 안남!
추가 - resource 폴더에 META-INF 디렉토리 생성
해당 디렉토리에 /META-INF/config.xml , /META-INF/mapper.xml 파일 만들기
(other - mybatis xml mapper 확장자 로 - 하단 이미지 참고) - config.xml에
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD configuration 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd"> => 두꺼운 표시한거 찾아서 수정
<configuration></configuration> // 요게 자동완성 되어야지 잘된거임
하단 이미지 참고 - Javax Inject 1 도 maven repository 에서 pom.xml에 복붙
7 . 여기서 복붙해도 됨
dbconfig.xml에 id="sqlsession" 이 없는 경우 db연결 확인
@Autowired //@Inject 도 가능
//BasicDataSource dbInfo;
SqlSessionFactory sqlfact; //dbconfig.xml에 작성한 bean id
PrintWriter pw = null;
@GetMapping("/testsql.do")
public String testsql() {
try {
SqlSession se = sqlfact.openSession();
System.out.println(se); //connection 사라짐 - se만 있으면 됨..
}catch(Exception e) {
System.out.println("Factory error!");
e.printStackTrace();
}
return null;
}
본격 연결은 다음장에..
👀 [ Spring-boot db연결 방식 ]
package api;
import org.apache.commons.dbcp.BasicDataSource;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class dbcon {
@Bean(destroyMethod = "close")
public BasicDataSource dataSource2() {
BasicDataSource bs = new BasicDataSource();
bs.setDriverClassName("com.mysql.cj.jdbc.Driver");
bs.setUrl("jdbc:mysql://localhost:3306/cms");
bs.setUsername("hana");
bs.setPassword("hana1234");
bs.setInitialSize(2); //최소 연결 갯수 (한 ip당 2개씩)
bs.setMaxActive(10); //하나의 아이디에 동시에 사용할수 있는 최대 연결 갯수 (협업시)
bs.setTestWhileIdle(true); //비활성화된 DB연결 부분을 유효성 검사
bs.setMinEvictableIdleTimeMillis(60000*3); //사실 6000*3 이 좋다
//db연결 유지시간-1000:1초(너무 데이터가 많을 경우 로드가 심하게 걸림..방지)
return bs;
}
@Bean()
public SqlSessionFactoryBean factory() {
SqlSessionFactoryBean sf = new SqlSessionFactoryBean();
BasicDataSource bs = this.dataSource2();
sf.setConfiguration(null);
sf.setMapperLocations(null);
return sf;
}
}
spring의 dbconfig.xml 역할 (바로밑 참고용 참고해보삼 - 방식만 다르고 넣는 값은 다 동일함)
java파일 ( dbcong.java - class , 이름은 맘대루 )
해당 파일 생성시 dbconfig.xml 필요없음
datasource로도 가능
dbconfig의 sessionfactory는 주석해야함..
↓ 참고용 (기존 dbconfig.xml)
<!-- 얘는 그냥 connection -->
<bean id="dbInfo" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
<property name="driverClassName" value="com.mysql.cj.jdbc.Driver"></property>
<property name="url" value="jdbc:mysql://localhost:3306/cms"></property>
<property name="username" value="hana"></property>
<property name="password" value="hana1234"></property>
</bean>
<!-- 여기서부터 mybatis -->
<bean id="sqlfact" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dbInfo"></property>
<property name="configLocation" value="classpath:/META-INF/config.xml"></property>
<property name="mapperLocations" value="classpath:/META-INF/mapper.xml"></property>
</bean>
<bean id="template" class="org.mybatis.spring.SqlSessionTemplate" destroy-method="close">
<constructor-arg name="sqlSessionFactory" ref="sqlfact"></constructor-arg>
</bean>
//이게 spring-boot에서는 class 버전으로 쓰인다구 생각하면 됨..
//SqlSessionFactoryBean,SqlSessionTemplate 도 동일하게 @bean() {} ~ 이렇게 생김
🔽
//@Autowired
//BasicDataSource dbInfo; //요거 대신
@Inject
private BasicDataSource dataSource2; //dbcon.java (@Bean)
@GetMapping("/beantest.do")
public String beantest() {
try {
Connection con = dataSource2.getConnection();
System.out.println(con);
}catch(Exception e) {
e.printStackTrace();
}
return null;
}
: db 연결 테스트 - @Autowired 이제 안써도됨
'CLASS > SPRING,JSTL' 카테고리의 다른 글
#7-3 / mybatis DB연결 - 포인트 (insert, select ,select one,delete) (1) | 2024.07.22 |
---|---|
#7-2 / mybatis(ibatis)를 이용 DAO + config,mapper,xml DB연결 (1) | 2024.07.22 |
🎫 spring note (0) | 2024.07.19 |
#6-9 / PathVariable(- API 서버 제작시 사용) (0) | 2024.07.15 |
#6-8 / Ajax 동기화 및 비동기화 차이점 (0) | 2024.07.15 |