- 컨테이너 처리 ( XXX . xml )
- db 연결 처리
- org.apache.commons.dbcp.BasicDataSource
- destroy - method : 자원 해제 메서드 호출
- driverClassName : jdbc 드라이버 연결
- url : db 연결 처리
- username : 계정명
- password : 비밀번호
- sqlSessionFactory : mybatis 연결 처리
- org.mybatis.spring.SqlSessionFactoryBean
- dataSource : db 연결모듈 매핑
- configLocation : mybatis 설정 파일 처리
- 마이바티 default DAO단 기본 package 선언
- org.mybatis.spring.mapper.MapperScannerConfigurer
- bacePackage : default dao
- 마이바티즈 설정 및 mapper xml
- 특정 folder에 두개 파일을 생성
- src밑에 resource package생성
- mybatis.Spring.xml(마이바티즈 관련 설정)
- xxx Mapper.xml ( 각 모듈별 xml 파일)
- 공통 Repository 패키지 생성 및 interface선언
- 패키지명.인터페이스명.메서드 -> mapper.xml의 id값에 선언
전체적인 파일 구조
- 이제 DBConn 은 필요 없다 say good bye!!
- XXXMapper.xml + Dao + Service 가 서로 합쳐져서 DBConn을 대체...
- 왜 서비스단이 필요한가? : 컨트롤러의 주요역할은 분기작업만 값을 넘겨주는 그런 내용 조건을 넣거나 로직을 고치거나 하는게 아님 그런역할을 해주는 부분이 바로 Service단 처리 내용은 서비스단에서 전부 처리
- 3단 매핑구조
- config.xml - XXXMapper.xml (dao 의 메서드 내용이 선언되어있음)
- service 와 -Autowired- 로 dao가 엮인 상태에서 dao의 메서드들을 service가 실행함
- Ctrl 에서 service의 method 를 호출!
- 이제 Ctrl 와 config.xml 을 container(dispatcher-servelet)에 올린다!
- config.xml 단 : DB연결 부분
- DBConn 에서 setConn을 담당하는 부분
1
2
3
4
5
6
7
<!--DB연결 모듈 -->
<bean id ="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
<property name="driverClassName" value="net.sf.log4jdbc.DriverSpy"></property>
<property name="url" value="jdbc:oracle:thin:@59.10.147.68:1521:orcl"></property>
<property name="username" value="scott"></property>
<property name="password" value="tiger"></property>
</bean>
cs
- config.xml 단 : config파일과 연결부분
- property name = "configLocation"
- 부분에 value = " config.xml파일의 주소" 를 매핑
1
2
3
4
5
<!--mybatis 연동resource\mybatis-config.xml -->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource"/>
<property name="configLocation" value="classpath:resource/mybatis-config.xml"/>
</bean>
cs
- config.xml 단 : 연동 Repository 선언(dao들을 bacepackage 설정)
1
2
3
4
5
<!-- 연동 Repository 단 서언 -->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="basePackage" value="springweb.dao"/>
</bean>
cs
- Dao 단 ( Interface )
- 사용될 메서드들을 선언만 해놓음
1
2
3
4
5
6
7
8
9
10
11
12
13
@Repository
public interface MyEmpDao {
//z02_dao.MyEmpDao.getEmplist
public ArrayList<Emp> getEmplist();
public Emp setSchEmp(int empno);
public void uptEmp(Emp emp);
public void delEmp(Emp emp);
public void insEmp(Emp emp);
}
cs
- service 단
- autowired 로 repository 하위의 dao가 끌려옴
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
@Service
public class EmpService {
@Autowired(required=false)
private MyEmpDao dao;//인터페이스 선언된 아이를 오토와이어
public ArrayList<Emp> getEmplist(){
return dao.getEmplist();}
public Emp setSchEmp(int empno){
return dao.setSchEmp(empno);}
public void delEmp(Emp emp){
dao.delEmp(emp);}
public void uptEmp(Emp emp){
dao.uptEmp(emp);}
public void insEmp(Emp emp){
dao.insEmp(emp);}
}
cs
- XXXMapper.xml
- namespace = 구분자
- resultMap = DBConn에서 ResultSet [ while(rs.next())] 의 역할
- type = config.xml의 typeAliases 에 선언한 vo type을 선언
- 쿼리문 작성
- id = " dao파일의 path + dao파일의 해당 method " 로 선언 또는!
1
2
3
4
5
6
7
8
9
10
<mapper namespace="EmpMapper">
<!-- resultMap선언 -->
<resultMap type="emp" id="empRst"/>
<select id="springweb.dao.MyEmpDao.getEmplist" resultMap="empRst">
select * from emp_s
</select>
</mapper>
cs
- 아래와 같은 방식으로
- namespace 를 dao의 주소로 선언한뒤
- 쿼리문의 id에 해당 method만 선언해도 같은 내용
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<mapper namespace="springboard.repository.BoardDao">
<!-- resultMap선언
getBoard1 boardlist
-->
<resultMap type="board" id="boardRst"/>
<select id="boardlist" resultMap="boardRst">
select * from board
order by no desc
</select>
</mapper>
cs
- ctrl 단
- EmpService service 를 오토와이어로 끌어옴
- 이후 메서드를 직접선언하는게 아니라 service객체를 통해 처리
1
2
3
4
5
6
7
8
9
10
11
12
13
14
@Controller
@RequestMapping("MyEmp.do")
public class A03_MyEmp {
@Autowired(required=false)
private EmpService service;
@RequestMapping(params="method=list")
public String emplist(Model d){
d.addAttribute("list",service.getEmplist());
return "a12_09/m01_MybatisEmp";
}
cs
- Annotation으로 Mapper에 선언 없이 사용하기
1
2
3
4
5
//ibaits 환경에서 mapper 호출 없이 @@@Mapper.xml 에 등록한것과 똑같은 효과
//조건문은 , 로 구분이 필요
//객체도 가능!! ex) emp , board 등등
@Update({"UPDATE BOARDSJH SET readcnt=readcnt+1" , "where no=#{no}"})
public void readCntUpt(int no);
cs
- src밑에 resource package생성
- mybatis.Spring.xml(마이바티즈 관련 설정)
- xxx Mapper.xml ( 각 모듈별 xml 파일)
- 패키지명.인터페이스명.메서드 -> mapper.xml의 id값에 선언
- config.xml 단 : DB연결 부분
- DBConn 에서 setConn을 담당하는 부분
1
2
3
4
5
6
7
|
<!--DB연결 모듈 -->
<bean id ="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
<property name="driverClassName" value="net.sf.log4jdbc.DriverSpy"></property>
<property name="url" value="jdbc:oracle:thin:@59.10.147.68:1521:orcl"></property>
<property name="username" value="scott"></property>
<property name="password" value="tiger"></property>
</bean>
| cs |
- config.xml 단 : config파일과 연결부분
- property name = "configLocation"
- 부분에 value = " config.xml파일의 주소" 를 매핑
1
2
3
4
5
|
<!--mybatis 연동resource\mybatis-config.xml -->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource"/>
<property name="configLocation" value="classpath:resource/mybatis-config.xml"/>
</bean>
| cs |
- config.xml 단 : 연동 Repository 선언(dao들을 bacepackage 설정)
1
2
3
4
5
|
<!-- 연동 Repository 단 서언 -->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="basePackage" value="springweb.dao"/>
</bean>
| cs |
- Dao 단 ( Interface )
- 사용될 메서드들을 선언만 해놓음
1
2
3
4
5
6
7
8
9
10
11
12
13
|
@Repository
public interface MyEmpDao {
//z02_dao.MyEmpDao.getEmplist
public ArrayList<Emp> getEmplist();
public Emp setSchEmp(int empno);
public void uptEmp(Emp emp);
public void delEmp(Emp emp);
public void insEmp(Emp emp);
}
| cs |
- service 단
- autowired 로 repository 하위의 dao가 끌려옴
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
@Service
public class EmpService {
@Autowired(required=false)
private MyEmpDao dao;//인터페이스 선언된 아이를 오토와이어
public ArrayList<Emp> getEmplist(){
return dao.getEmplist();}
public Emp setSchEmp(int empno){
return dao.setSchEmp(empno);}
public void delEmp(Emp emp){
dao.delEmp(emp);}
public void uptEmp(Emp emp){
dao.uptEmp(emp);}
public void insEmp(Emp emp){
dao.insEmp(emp);}
}
| cs |
- XXXMapper.xml
- namespace = 구분자
- resultMap = DBConn에서 ResultSet [ while(rs.next())] 의 역할
- type = config.xml의 typeAliases 에 선언한 vo type을 선언
- 쿼리문 작성
- id = " dao파일의 path + dao파일의 해당 method " 로 선언 또는!
1
2
3
4
5
6
7
8
9
10
|
<mapper namespace="EmpMapper">
<!-- resultMap선언 -->
<resultMap type="emp" id="empRst"/>
<select id="springweb.dao.MyEmpDao.getEmplist" resultMap="empRst">
select * from emp_s
</select>
</mapper>
| cs |
- 아래와 같은 방식으로
- namespace 를 dao의 주소로 선언한뒤
- 쿼리문의 id에 해당 method만 선언해도 같은 내용
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
<mapper namespace="springboard.repository.BoardDao">
<!-- resultMap선언
getBoard1 boardlist
-->
<resultMap type="board" id="boardRst"/>
<select id="boardlist" resultMap="boardRst">
select * from board
order by no desc
</select>
</mapper>
| cs |
- ctrl 단
- EmpService service 를 오토와이어로 끌어옴
- 이후 메서드를 직접선언하는게 아니라 service객체를 통해 처리
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
@Controller
@RequestMapping("MyEmp.do")
public class A03_MyEmp {
@Autowired(required=false)
private EmpService service;
@RequestMapping(params="method=list")
public String emplist(Model d){
d.addAttribute("list",service.getEmplist());
return "a12_09/m01_MybatisEmp";
}
| cs |
- Annotation으로 Mapper에 선언 없이 사용하기
1
2
3
4
5
|
//ibaits 환경에서 mapper 호출 없이 @@@Mapper.xml 에 등록한것과 똑같은 효과
//조건문은 , 로 구분이 필요
//객체도 가능!! ex) emp , board 등등
@Update({"UPDATE BOARDSJH SET readcnt=readcnt+1" , "where no=#{no}"})
public void readCntUpt(int no);
| cs |
댓글 없음:
댓글 쓰기