Spring 학습 매 뉴 얼 (13) - Spring 통합 my batis
my batis 소개
MyBatis 는 맞 춤 형 SQL, 저장 프로 세 스, 고급 맵 을 지원 하 는 우수한 지구 층 프레임 워 크 입 니 다.MyBatis 는 거의 모든 JDBC 코드 와 수 동 으로 파 라 메 터 를 설정 하고 결과 집합 을 가 져 오 는 것 을 피 했다.MyBatis 는 설정 과 네 이 티 브 맵 에 대해 간단 한 XML 이나 주 해 를 사용 하여 인터페이스 와 자바 의 POJOs (Plain Old Java Objects, 일반 자바 대상) 를 데이터베이스 에 기록 할 수 있 습 니 다.2. 0 버 전 이전에 이 프레임 워 크 는 ibatis 라 고 불 렸 고, 3. 0 버 전 은 my batis 로 이름 을 바 꾸 었 다.Spring 공식 적 으로 ibatis 2 만 통합 되 었 기 때문에 my bati 커 뮤 니 티 는 Spring 에서 my batis 를 지원 하기 위해 my batis - spring 서브 프로젝트 를 만들어 my baits 를 빈 틈 없 이 Spring 에 통합 시 켰 다.
2. 관련 jar 패키지 의존 도입
Spring 프로젝트 통합 my batis 프레임 워 크 는 my batis 와 my batis - spring jar 패키지 에 의존 해 야 하기 때문에 이 의존 도 를 먼저 추가 해 야 합 니 다.build. gradle 파일 의존 항목 수정 은 다음 과 같 습 니 다.
dependencies {
testCompile group: 'junit', name: 'junit', version: '4.11'
compile 'mysql:mysql-connector-java:6.0.6'
compile 'org.mybatis:mybatis:3.4.2'
compile 'org.mybatis:mybatis-spring:1.3.1'
compile 'org.springframework:spring-jdbc:4.3.6.RELEASE'
compile 'org.springframework:spring-context:4.3.6.RELEASE'
}
여기 my batis 버 전 번 호 는 3.4.2 이 고 my batis - spring 버 전 번 호 는 1.3.1 입 니 다.IDEA 는 프로젝트 를 자동 으로 컴 파일 하여 jiar 패키지 에 의존 합 니 다. 물론 프로젝트 루트 디 렉 터 리 에서 다음 명령 을 실행 할 수 있 습 니 다. (gradle 을 path 디 렉 터 리 에 추가 하 였 습 니 다)
gradle build
3. spring 통합 my batis 실전
Jar 가방 에 대한 의존 도 를 추 가 했 습 니 다. 이 절 에 서 는 Spring 에서 my batis 를 통합 하 는 방법 을 보 여 드 리 겠 습 니 다.코드 인 스 턴 스 를 시작 하기 전에, 우 리 는 먼저 데이터베이스 score 를 새로 만 듭 니 다.manager (데이터베이스 이름 은 임의로 명명 할 수 있 지만 dataSource 의 URL 설정 루트 데이터베이스 이름 이 일치 해 야 합 니 다), 새 데이터 시트 student, 표 구 조 는 다음 과 같 습 니 다.
열명
유형
id
int
name
varchar(20)
gender
char(1)
age
int
동시에 우 리 는 Student 분야 모델 을 다음 과 같이 만 듭 니 다.
public class Student {
private int id;
private String name;
private String gender;
private int age;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getGender() {
return gender;
}
public void setGender(String gender) {
this.gender = gender;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public String toString(){
return "["+id+","+name+","+gender+","+age+"]";
}
}
3.1 SQL 조회 맵 파일 만 들 기
insert student
(id,name,gender,age)
values(
#{id},
#{name},
#{gender},
#{age})
delete from student where id = #{studentId}
update student set gender = #{gender} where id = #{id}
저 희 는
?
탭 을 사용 하여 맵 파일 을 만 들 고 mapper
속성 으로 이 mapper 의 네 임 스페이스 를 지정 합 니 다. 여기 서 네 임 스페이스 를 com. liangwei. learnspring. dao. Student Mapper 로 설정 합 니 다. 이 설정 은 뒤에서 설명 합 니 다.저 희 는 namespace
탭 을 사용 하여 결과 집합 을 되 돌려 주 는 맵 관 계 를 정 의 했 습 니 다. 그 중에서 resultMap
과 id
내부 탭 은 모두 대상 과 데이터 베이스 의 특정한 열 을 되 돌려 주 는 맵 관 계 를 나타 내 는 것 입 니 다. result
데이터 베 이 스 를 대체 하 는 표 메 인 키 를 말 하여 my batis 운행 효율 을 향상 시 킵 니 다.id
속성 은 영역 대상 의 속성 이름 을 정의 하고 property
속성 은 데이터 시트 의 열 이름 을 지정 합 니 다.정의 column
, my batis 는 자동 으로 결과 집합 과 영역 대상 간 의 상호 전환 을 완성 합 니 다.저 희 는 각각 resultMap
, insert
, delete
, select
을 사용 하여 변경 문 구 를 추가 삭제 하고 update
이 문 구 를 유일 하 게 표시 하 는 데 사 용 됩 니 다. id
이 문 구 를 받 아들 일 수 있 는 매개 변 수 를 가리 키 고 parameterType
속성 은 앞에서 사용 resultMap
태그 가 설정 한 id 값 으로 설정 하면 my batis 는 자동 으로 조회 결 과 를 매 핑 합 니 다.3.2 정의 DataSource
3.3 정의 SqlSessionFactory Bean
MyBatis - Spring 에서 저 희 는 SqlSession Factory Bean 을 사용 하여 Session 공장 을 만 듭 니 다. 설정 정 보 는 다음 과 같 습 니 다.
resultMap
속성 은 앞에서 설 정 된 DataSource 입 니 다. dataSource
속성 은 우리 가 설정 한 SQL 맵 파일 을 가리 키 고 있 습 니 다. 여 기 는 classpath 경로 에서 mapper 폴 더 의 모든 Mapper 이름 으로 끝 나 는 XML 파일 로 설정 되 어 있 습 니 다.3.4 SqlSessionTemplate 사용
SqlSession Template 류 는 MyBatis - Spring 의 핵심 입 니 다.이 종 류 는 MyBatis 를 관리 하 는 SqlSession 입 니 다. MyBatis 의 SQL 방법 을 호출 하여 번역 이 이상 합 니 다.SqlSessionTemplate 는 스 레 드 가 안전 하여 여러 DAO 가 공유 하여 사용 할 수 있 습 니 다.SqlSessionTemplate 는 SqlSession 인 터 페 이 스 를 실 현 했 습 니 다. 우 리 는 이것 을 사용 하여 sqlSession 을 정의 합 니 다. 설정 방식 은 다음 과 같 습 니 다.
그 중에서 구조 기 매개 변 수 는 설 정 된 것
mapperLocations
으로 전 달 됩 니 다.StudentDAO 를 정의 합 니 다. 인터페이스 정 의 는 다음 과 같 습 니 다.
public interface StudentDAO {
Student getStudentById(int studentId);
int getStudentNums();
void insertStudent(Student student);
void deleteStudent(int studentId);
void updateStudent(Student student);
}
인터페이스 방법 은 자체 해석 이 라 고 명명 되 었 으 며, 여 기 는 모든 방법의 의 미 를 더 이상 설명 하지 않 습 니 다.StudentDAO 방식 은 다음 과 같 습 니 다.
public class StudentDAOImpl implements StudentDAO{
private SqlSession sqlSession;
public Student getStudentById(int studentId) {
return sqlSession.selectOne("getStudentById",studentId);
}
public int getStudentNums() {
return sqlSession.selectOne("getStudentNums");
}
public void insertStudent(Student student) {
sqlSession.insert("insertStudent",student);
}
public void deleteStudent(int studentId) {
sqlSession.delete("deleteStudent",studentId);
}
public void updateStudent(Student student) {
sqlSession.update("updateStudent",student);
}
public void setSqlSession(SqlSession sqlSession) {
this.sqlSession = sqlSession;
}
}
SqlSession 형식 을 가 진 개인 속성 을 실현 합 니 다. set 방법 으로 주입 합 니 다. XML 설정 방식 은 다음 과 같 습 니 다.
이상 저 희 는 SqlSessionTemplate 를 사용 하여 Spring 에서 my batis 를 통합 하 는 작업 을 완 성 했 습 니 다. 저 희 는 각 분야 대상 의 조작 에 DAO 인 터 페 이 스 를 정의 하고 실현 합 니 다. 저 희 는 모든 DAO 실현 에 sqlSession 을 주입 해 야 합 니 다.
3.5 SqlSessionDao Support 사용 (간단하게)
우 리 는 SqlSessionTemplate 를 사용 하여 SQL 에 대한 작업 을 크게 간소화 하 였 으 나, 우 리 는 여전히 모든 실현 클래스 에 setter 주입 방법 을 추가 해 야 한다. 물론 우 리 는 기본 클래스 를 정의 한 다음 에 모든 DAO 가 이 기본 클래스 를 계승 하도록 한 다음 에 Spring 이 제공 하 는 자동 주 입 량 을 간소화 할 수 있다.이 절 에서 우 리 는 SqlSessionDao Support 류 를 사용 하 는 것 을 배 웠 습 니 다. 이것 은 SqlSessionTemplate 의 기본 클래스 를 봉인 하 는 것 과 같 습 니 다. 우 리 는
sqlSessionFactory
를 사용 하여 하나의 getSqlSession()
를 얻 기만 하면 됩 니 다. 나머지 작업 은 SqlSessionTemplate 의 호출 과 같 습 니 다.StudentDAOSupport 인터페이스 정의:
public interface StudentDAOSupport {
Student getStudentById(int studentId);
int getStudentNums();
void insertStudent(Student student);
void deleteStudent(int studentId);
void updateStudent(Student student);
StudentDAOSupport 인터페이스 구현:
public class StudentDAOSupportImpl extends SqlSessionDaoSupport implements StudentDAOSupport {
public Student getStudentById(int studentId) {
return getSqlSession().selectOne("getStudentById",studentId);
}
public int getStudentNums() {
return getSqlSession().selectOne("getStudentNums");
}
public void insertStudent(Student student) {
getSqlSession().insert("insertStudent",student);
}
public void deleteStudent(int studentId) {
getSqlSession().delete("deleteStudent",studentId);
}
public void updateStudent(Student student) {
getSqlSession().update("updateStudent",student);
}
}
XML 설정 은 student Dao Support 에 id 를 제공 하 는 bean:
SqlSessionDao Support 는 sqlSessionFactory 나 sqlSessionTemplate 속성 을 설정 해 야 합 니 다.이상 에서 저 희 는 명시 적 인 방식 으로
SqlSessionTemplate
속성 을 설정 합 니 다. sqlSessionFactory
은 SqlSessionDaoSupport
인 스 턴 스 를 만 듭 니 다. 물론 저 희 는 Spring 의 자동 주입 을 사용 하여 설정 코드 를 절약 할 수 있 습 니 다.둘 다 설정 되면 SqlSession Factory 는 무시 된다.3.6 주입 매 핑 기 (좀 더 간단하게)
sqlSessionFactory
와 SqlSessionTemplate
는 데이터 조작 에 관 한 코드 량 을 현저히 줄 였 고 my batis 는 맵 방식 을 제공 하여 코드 량 을 더욱 줄 이 는 데 지원 을 제공 했다.my batis 는 프 록 시 클래스 를 사용 하여 구체 적 인 인터페이스 구현 코드 를 간소화 합 니 다.정의 맵 인터페이스:
public interface StudentMapper {
Student getStudentById(int studentId);
int getStudentNums();
void insertStudent(Student student);
void deleteStudent(int studentId);
void updateStudent(Student student);
}
맵 기 설정, my batis 맵 기 주입 완료:
우 리 는
SqlSessionTemplate
이름 이 SqlSessionDaoSupport
인 bean 을 사용 합 니 다.이 bean 에 org.mybatis.spring.mapper.MapperFactoryBean
와 studentMapper
속성 을 제공 해 야 합 니 다.mapperInterface
우 리 는 이미 여러 번 사 용 했 는데 여 기 는 군말 에 불과 하 다.sqlSessionFactory
우리 에 게 정 의 된 맵 인터페이스 (일반적으로 Mapper 로 끝 나 는 이름) 는 위의 예 에서 우리 가 정의 한 sqlSessionFactory
인터페이스 입 니 다.이렇게 하면 my batis 는 자동 으로 이 맵 기 인터페이스 에 프 록 시 를 만 들 고 관련 SQL 파일 정의 mapperInterface
를 정의 할 때 불 러 올 SQL 맵 파일 위 치 를 명 확 히 정 합 니 다).이렇게 두 단계 만 있 으 면 우 리 는 매 핑 기 접속 작업 을 완성 했다.⚠️앞에서 정의 한 SQL 맵 파일 에 대한 인상 이 있다 면 StudentMapper
태그 아래 에 sqlSessionFactory
속성 이 있 는 것 을 기억 해 야 합 니 다. 우 리 는 mapper
으로 설정 되 었 습 니 다. 그 당시 에 이렇게 설정 한 이 유 는 맵 방식 (현재 namespace
과 com.liangwei.learnspring.dao.StudentMapper
방식 이 이 namespace 속성 을 강제 적 으로 제한 하지 않 았 기 때 문 입 니 다.namespace 속성 설정 이 맵 인터페이스 와 완전히 한 정 된 이름 이 다 르 면 찾 는 방법 등 유형의 오 류 를 보고 합 니 다.더 쉬 워.
여러 개의 맵 기 를 설정 해 야 할 때 상기 방식 으로 설정 하 는 데 도 많은 시간 이 걸 립 니 다. my batis 는 우리 에 게 더욱 편리 한 방식 을 제공 합 니 다. MapperScanner Configure 설정 을 사용 합 니 다.클래스 경로 에서 맵 을 찾 아 MapperFactory Bean 으로 만 듭 니 다.설정 방법:
이렇게 하면 dao 패키지 이름 의 모든 맵 클래스 를 MapperFactory Bean 으로 만 듭 니 다.물론 현실 프로젝트 실천 에서 우 리 는 보통 가방 이름 을 mapper 로 명명 합 니 다. 예 를 들 어 우 리 는
SqlSessionTemplate
로 바 꿀 수 있 습 니 다. 그러면 유지 코드 를 읽 고 이해 하 는 데 편리 합 니 다.여러 개의 패키지 경 로 를 설정 해 야 할 때, 우 리 는 분점 이나 쉼표 로 분할 할 수 있다.3.7 코드 테스트
이상 우 리 는 서로 다른 세 가지 방식 으로 Spring 과 my batis 를 통합 시 켰 습 니 다. 우 리 는
SqlSessionDaoSupport
, com.liangwei.learnspring.dao.mapper
, studentDao
라 는 세 개의 bean 을 정 의 했 습 니 다. 우 리 는 그것들 을 얻 고 직접 사용 하 는 방법 을 정의 할 수 있 습 니 다. 테스트 코드 는 다음 과 같 습 니 다.public class Application {
public static void main(String[] args){
ApplicationContext applicationContext = new ClassPathXmlApplicationContext("dao.xml");
/* bean */
StudentDAO studentDAO = applicationContext.getBean("studentDao", StudentDAO.class);
/* */
System.out.println(studentDAO.getStudentNums());
/* ID 1 */
System.out.println(studentDAO.getStudentById(1));
Student student = new Student();
student.setId(3);
student.setName("Jane");
student.setGender("F");
student.setAge(20);
/* */
studentDAO.insertStudent(student);
/* ,ID=3 */
System.out.println(studentDAO.getStudentById(3));
student.setGender("M");
/* , M */
studentDAO.updateStudent(student);
System.out.println(studentDAO.getStudentById(3));
/* studentID 3 */
studentDAO.deleteStudent(3);
/* SqlSessionDaoSupport */
StudentDAOSupport studentDAOSupport = applicationContext.getBean("studentDaoSupport", StudentDAOSupport.class);
System.out.println(studentDAOSupport.getStudentNums());
System.out.println(studentDAOSupport.getStudentById(1));
student.setGender("F");
studentDAOSupport.insertStudent(student);
System.out.println(studentDAOSupport.getStudentById(3));
student.setGender("M");
studentDAOSupport.updateStudent(student);
System.out.println(studentDAOSupport.getStudentById(3));
studentDAOSupport.deleteStudent(3);
/* StudentMapper */
StudentMapper studentMapper = applicationContext.getBean("studentMapper", StudentMapper.class);
System.out.println(studentMapper.getStudentNums());
System.out.println(studentMapper.getStudentById(1));
student.setGender("F");
studentMapper.insertStudent(student);
System.out.println(studentMapper.getStudentById(3));
student.setGender("M");
studentMapper.updateStudent(student);
System.out.println(studentMapper.getStudentById(3));
studentMapper.deleteStudent(3);
}
}
예 를 들 어 우 리 는 모든 방식 의 인터페이스 방법 에 대해 호출 을 했 는데 코드 가 비교적 간단 하고 주석 과 결합 하면 이해 하기 쉬 우 므 로 여기 서 우 리 는 더 이상 설명 하지 않 을 것 이다.상기 코드 를 실행 하면 저 희 는 콘 솔 에서 다음 과 같은 정 보 를 출력 할 수 있 습 니 다.
2 //
[1,Jone,F,20] // studentId 1
[3,Jane,F,20] // studentId 3
[3,Jane,M,20]// studentId 3 : M
2
[1,Jone,F,20]
[3,Jane,F,20]
[3,Jane,M,20]
2
[1,Jone,F,20]
[3,Jane,F,20]
[3,Jane,M,20]
출력 정 보 를 이해 하기 위해 우 리 는 출력 정보 에 주석 을 달 았 고 테스트 코드 와 주석 을 결합 하면 출력 결 과 를 더욱 편리 하 게 이해 할 수 있다.
코드 다운로드
총화
본 고 는 Spring 구조 에서 my batis 의 도입 과 통합 을 완 성 했 고 우 리 는
studentDaoSupport
프로젝트 를 통 해 세 가지 서로 다른 방식 studentMapper
, mybatis-spring
과 SqlSessionTemplate
을 사용 하여 통합 작업 을 완성 했다.상기 한 단계 의 조작 을 통 해 우 리 는 my batis 의 간편 성, 조작 성 을 느 꼈 다. 이것 은 SQL 구문 과 프로젝트 코드 인터페이스 의 의존 도 를 나 누 어 번 거 로 운 데이터 베이스 모델 코드 조작 을 줄 이 고 프로그램 개발 자의 업무 효율 을 크게 향상 시 켰 다.Spring 프레임 워 크 에서 my batis 를 통합 한 후에 남 은 주요 작업 은 DAO 나 Mapper 인 터 페 이 스 를 정의 하 는 것 입 니 다. 맵 의 XML 파일 을 작성 하 는 것 입 니 다. my batis 홈 페이지 에서 비교적 상세 한 문 서 를 보 여 주 었 습 니 다. 홈 페이지 에서 문 서 를 보고 공부 할 수 있 습 니 다. 여기 서도 XML 파일 에 관 한 편리 한 문법 글 을 쓸 생각 이 없습니다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.