MyBatis 학습 튜 토리 얼 의 개발 Dao 방법 튜 토리 얼

11953 단어 mybatisdao 개발
간단 한 소개
Mybatis 를 이용 하여 Dao 를 개발 하 는데 보통 두 가지 방법 이 있 는데 그것 이 바로 원시 Dao 개발 방법 과 Mapper 인터페이스 개발 방법 이다.다음은 더 이상 말 하지 않 겠 습 니 다.상세 한 소 개 를 살 펴 보 겠 습 니 다.
주요 개념 소개:
MyBatis 에서 Dao 개발 을 진행 할 때 몇 가지 중요 한 유형 이 있 는데 그것 은 SqlSession Factory Builder,SqlSession Factory,SqlSession 이다.
SqlSession 에 서 는 조회,삽입,업데이트,삭제 등 데이터 베 이 스 를 봉인 합 니 다.SqlSession Factory 를 통 해 SqlSession 을 만 들 고,SqlSession Factory 는 SqlSession Factory Builder 를 통 해 만 듭 니 다.
1、SqlSessionFactoryBuilder
SqlSession Factory Builder 는 SqlSession Facoty 를 만 드 는 데 사 용 됩 니 다.SqlSession Facoty 는 만 들 면 SqlSession Factory Builder 가 필요 없습니다.SqlSession 은 SqlSession Factory 를 통 해 생산 되 기 때문에 SqlSession Factory Builder 를 도구 류 로 사용 할 수 있 습 니 다.가장 좋 은 사용 범 위 는 방법 범위 즉 방법 체 내 부분 변수 입 니 다.
2、SqlSessionFactory
SqlSession Factory 는 인터페이스 입 니 다.인터페이스 에서 openSession 의 서로 다른 재 부팅 방법 을 정 의 했 습 니 다.SqlSession Factory 의 가장 좋 은 사용 범 위 는 전체 응용 프로그램 이 실행 되 는 동안 입 니 다.만 든 후에 중복 사용 할 수 있 습 니 다.보통 단일 모드 로 SqlSession Factory 를 관리 합 니 다.
3、SqlSession
SqlSession 은 사용 자 를 위 한 인터페이스 입 니 다.sqlSession 에서 데이터베이스 작업 을 정 의 했 습 니 다.기본 값 은 DefaultSqlSession 구현 클래스 를 사용 합 니 다.
SqlSession 에 서 는 데이터 베 이 스 를 조작 하 는 방법 을 많이 제공 합 니 다.예 를 들 어 selectOne(단일 대상 으로 돌아 가기),selectList(단일 또는 여러 대상 으로 돌아 가기),SqlSession 은 스 레 드 가 안전 하지 않 습 니 다.SqlSession 실현 류 에 서 는 인터페이스 에 있 는 방법(데이터 베 이 스 를 조작 하 는 방법)을 제외 하고 데이터 도 메 인 속성 도 있 습 니 다.SqlSession 의 가장 좋 은 응용 장 소 는 방법 체 내 에 있 습 니 다.부분 변수 로 정의 하여 사용 합 니 다.SqlSession 인 스 턴 스 의 인용 을 정적 필드 나 인 스 턴 스 필드 에 두 면 안 됩 니 다.
SqlSession 열기;사용 이 끝나 면 닫 아야 합 니 다.보통 이 닫 기 동작 을 finally 블록 에 넣 어서 매번 닫 을 수 있 도록 합 니 다.
다음 과 같다.

SqlSession session = sqlSessionFactory.openSession();
try {
  // do work
} finally {
  session.close();
}
원시 Dao 개발 방식
원본 Dao 개발 방법 은 프로그래머 가 Dao 인터페이스 와 Dao 구현 클래스 를 작성 해 야 합 니 다.
아니면 예전 에 언급 한 간단 한 첨삭 을 예 로 들 어 원시 Dao 개발 방식 을 간단하게 소개 하 는 것 입 니까?
1.맵 파일

<?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="user">
 <!--   id       -->
 <select id="findUserById" parameterType="int" resultType="user">
  select * from user where id = #{id}
 </select>
 <!--   username         -->
 <select id="findUserByName" parameterType="java.lang.String" resultType="com.luchao.mybatis.first.po.User">
  select * from user where username like '%${value}%'
 </select>
 <!--        -->
 <insert id="insertUser" parameterType="com.luchao.mybatis.first.po.User">
  <selectKey keyProperty="id" order="AFTER" resultType="java.lang.Integer">
   select LAST_INSERT_ID()
  </selectKey>
  insert into user(username,birthday,sex,address) value (#{username},#{birthday},#{sex},#{address});
 </insert>
 <!--   id       -->
 <delete id="deleteUser" parameterType="int">
  delete from user where id=#{id}
 </delete>
 <!--        -->
 <update id="updateUser" parameterType="com.luchao.mybatis.first.po.User">
  update user set username=#{username},birthday=#{birthday},sex=#{sex},address=#{address}
  where id=#{id}
 </update>
</mapper>
2.Dao 인터페이스

public interface UserDao {
 //  ID      
 public User findUserById(int id) throws Exception;
 //      
 public void insertUser(User user) throws Exception;
 //      
 public void deleteUser(int id) throws Exception;
}
3.Dao 인터페이스 구현 클래스

public class UserDaoImpl implements UserDao{
 
 //    dao      SqlSessionFactory
 //           
 private SqlSessionFactory sqlSessionFactory;
 
 public UserDaoImpl(SqlSessionFactory sqlSessionFactory) {
  super();
  this.sqlSessionFactory = sqlSessionFactory;
 }
 @Override
 public void deleteUser(int id) throws Exception {
  SqlSession sqlSession = sqlSessionFactory.openSession();
  //      
  sqlSession.insert("user.deleteUser", id);
  //     
  sqlSession.commit();
  //     
  sqlSession.close();
 }
 @Override
 public User findUserById(int id) throws Exception {
  SqlSession sqlSession = sqlSessionFactory.openSession();//  sqlSession
  User user = sqlSession.selectOne("user.findUserById", id);
  sqlSession.close();//    
  return user;
 }
 @Override
 public void insertUser(User user) throws Exception {
  SqlSession sqlSession = sqlSessionFactory.openSession();
  //      
  sqlSession.insert("user.insertUser", user);
  //     
  sqlSession.commit();
  //     
  sqlSession.close();
 }
}
4.테스트 코드:

public class MyBatis_dao_test {
 private SqlSessionFactory sqlSessionFactory;
 @Before
 public void init() throws IOException{
  //  sqlSessionFactory
  //MyBatis    
  String resource = "SqlMapConfig.xml";
  //       
  InputStream inputStream = Resources.getResourceAsStream(resource);
  //      ,  MyBatis     
  sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
 }
 @Test
 public void testFindUserById() throws Exception{
  //  UserDao  
  UserDao userDao = new UserDaoImpl(sqlSessionFactory);
  //  UserDao   ,  ID  user
  User user = userDao.findUserById(10);
  //      
  System.out.println(user);
 }
}
5.원시 Dao 방법 요약:
(1),dao 인터페이스 구현 클래스 방법 에는 대량의 템 플 릿 방법 이 존재 합 니 다.예 를 들 어 SqlSession Factory 를 통 해 SqlSession 을 만 들 고 SqlSession 의 데이터 베 이 스 를 호출 하 는 방법 입 니 다.
(2)sqlSession 을 호출 하 는 데이터베이스 작업 방법 은 statement 의 id 를 지정 해 야 합 니 다.하 드 인 코딩 이 존재 합 니 다.
(3)sqlsession 방법 을 호출 할 때 들 어 오 는 변 수 는 sqlsession 방법 이 범 형 을 사용 하기 때문에 변수 유형 이 잘못 들 어 와 도 컴 파일 단계 에서 잘못 보고 하지 않 고 프로그래머 개발 에 불리 합 니 다.
Mapper 동적 에이전트 방식
1.실현 원리
Mapper 인터페이스 개발 방법 은 프로그래머 가 Mapper 인터페이스(Dao 인터페이스 에 해당)를 작성 해 야 합 니 다.Mybatis 프레임 워 크 는 인터페이스 정의 에 따라 인 터 페 이 스 를 만 드 는 동적 프 록 시 대상 입 니 다.프 록 시 대상 의 방법 체 는 위의 Dao 인터페이스 와 같은 방법 입 니 다.이렇게 하면 동적 대 리 를 통 해 템 플 릿 방법 을 밀봉 하고 구체 적 인 실현 만 실현 하면 된다.
Mapper 인터페이스 개발 은 다음 과 같은 규범 을 따라 야 한다.
     (1)Mapper.xml 파일 의 namespace 는 mapper 인터페이스의 클래스 경로 와 같 습 니 다.
     (2)Mapper 인터페이스 방법 명 은 Mapper.xml 에서 정의 하 는 모든 statement 의 id 와 같 습 니 다.
     (3)Mapper 인터페이스 방법의 입력 매개 변수 유형 은 mapper.xml 에서 정의 하 는 모든 sql 의 parameterType 형식 과 같 습 니 다.
     (4)Mapper 인터페이스 방법의 출력 매개 변수 유형 은 mapper.xml 에서 정의 하 는 모든 sql 의 resultType 형식 과 같 습 니 다.
2.Mapper.xml(맵 파일)
맵 파일 은 원본 Dao 에서 개발 한 맵 파일 과 비슷 하 며,namespace 를 mapper 인터페이스 전체 경로 로 지정 해 야 합 니 다.

<?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="com.luchao.mybatis.first.mapper.UserMapper">
 <!--   id       -->
 <select id="findUserById" parameterType="int" resultType="user">
  select * from user where id = #{id}
 </select>
 <!--   username         -->
 <select id="findUserByName" parameterType="java.lang.String" resultType="com.luchao.mybatis.first.po.User">
  select * from user where username like '%${value}%'
 </select>
 <!--        -->
 <insert id="insertUser" parameterType="com.luchao.mybatis.first.po.User">
  <selectKey keyProperty="id" order="AFTER" resultType="java.lang.Integer">
   select LAST_INSERT_ID()
  </selectKey>
  insert into user(username,birthday,sex,address) value (#{username},#{birthday},#{sex},#{address});
 </insert>
 <!--   id       -->
 <delete id="deleteUser" parameterType="int">
  delete from user where id=#{id}
 </delete>
 <!--        -->
 <update id="updateUser" parameterType="com.luchao.mybatis.first.po.User">
  update user set username=#{username},birthday=#{birthday},sex=#{sex},address=#{address}
  where id=#{id}
 </update>
</mapper>
3.Mapper.java(인터페이스 파일)

public interface UserMapper {
 //  ID      
 public User findUserById(int id) throws Exception;
 //      
 public void insertUser(User user) throws Exception;
 //      
 public void deleteUser(int id) throws Exception;
 //      
 public void updateUser(User user) throws Exception;
 //         
 public List<User> findUserByName(String user) throws Exception;
}
인터페이스 정 의 는 다음 과 같은 특징 이 있 습 니 다.
(1)Mapper 인터페이스 방법 명 은 Mapper.xml 에서 정의 하 는 statement 의 id 와 같 습 니 다.
(2)Mapper 인터페이스 방법의 입력 매개 변수 유형 은 mapper.xml 에서 정의 하 는 statement 의 parameterType 과 같 습 니 다.
(3)Mapper 인터페이스 방법의 출력 매개 변수 유형 은 mapper.xml 에서 정의 하 는 statement 의 resultType 형식 과 같 습 니 다.
4.UserMapper.xml 파일 불 러 오기
SqlMapConfig.xml 파일 에 UserMapper.xml 를 불 러 옵 니 다.다음 과 같 습 니 다.

 <mappers>
  <mapper resource="mapper/UserMapper.xml"/>
 </mappers>
5.테스트 코드:

public class MyBatis_mapper_test {
 private SqlSessionFactory sqlSessionFactory;
 @Before
 public void init() throws IOException{
  //  sqlSessionFactory
  //MyBatis    
  String resource = "SqlMapConfig.xml";
  //       
  InputStream inputStream = Resources.getResourceAsStream(resource);
  //      ,  MyBatis     
  sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
 }
 @Test
 public void testFindUserById() throws Exception{
  //  sqlSession  
  SqlSession sqlSession = sqlSessionFactory.openSession();
  //  UserMapper  ,MyBatis    mapper  
  UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
  //  userMapper   
  User user = userMapper.findUserById(10);
  //    
  sqlSession.close();
  //      
  System.out.println(user);
 }
}
5.Mapper 동적 에이전트 요약:
(1),동적 에이전트 대상 호출sqlSession.selectOne()sqlSession.selectList()은 mapper 인터페이스 방법의 반환 값 에 따라 결정 되 며,list 로 돌아 가면 selectList 방법 을 호출 하고,단일 대상 으로 돌아 가면 selectOne 방법 을 호출 합 니 다.
(2)mapper 프 록 시 방법 을 사용 할 때 파 라 메 터 를 입력 하면 pojo 포장 대상 이나 map 대상 을 사용 하여 dao 의 유 니 버 설 성 을 확보 할 수 있 습 니 다.시스템 에서 dao 층 의 코드 는 업무 층 에 의 해 공용 된다.mapper 인터페이스 에 하나의 인자 만 있 더 라 도 포장 유형의 pojo 를 사용 하여 서로 다른 업무 방법의 수 요 를 만족 시 킬 수 있 습 니 다.
메모:지구 층 방법의 매개 변 수 는 포장 유형,map 등 을 사용 할 수 있 습 니 다.service 방법 에 서 는 포장 유형 을 사용 하지 않 는 것 을 권장 합 니 다(업무 층 의 확장 에 불리 합 니 다).
my batis 가 dao 를 개발 하 는 방법 은 두 가지 가 있 습 니 다.원시 Dao 개발 과 Mapper 동적 대리 개발,이 두 가지 장점 이 있 습 니 다.원시 Dao 개발:프로그래머 가 Dao 와 Dao 를 써 서 실현 하려 면 많은 코드 가 필요 하지만 이해 하기 쉽다.Mapper 동적 에이전트:프로그래머 는 Mapper 인터페이스 만 쓰 고 규범 에 따라 설정 하면 MyBatis 는 자동 으로 Dao 와 유사 한 실현 을 실현 하고 템 플 릿 방법 을 줄 일 수 있 습 니 다.my batis 는 mapper 프 록 시 방법 으로 mapper 인 터 페 이 스 를 개발 하 는 것 을 공식 적 으로 추천 합 니 다.프로그래머 는 mapper 인터페이스 실현 류 를 작성 하지 않 고 mapper 프 록 시 방법 을 사용 할 때 파 라 메 터 를 입력 하면 pojo 포장 대상 이나 map 대상 을 사용 하여 dao 의 유 니 버 설 성 을 확보 할 수 있 습 니 다.
총결산
이상 은 이 글 의 전체 내용 입 니 다.본 논문 의 내용 이 여러분 의 학습 이나 업무 에 어느 정도 도움 이 되 기 를 바 랍 니 다.궁금 한 점 이 있 으 시 면 댓 글 을 남 겨 주 셔 서 저희 에 대한 지지 에 감 사 드 립 니 다.

좋은 웹페이지 즐겨찾기