MyBatis 학습 튜 토리 얼 의 개발 Dao 방법 튜 토리 얼
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 의 유 니 버 설 성 을 확보 할 수 있 습 니 다.
총결산
이상 은 이 글 의 전체 내용 입 니 다.본 논문 의 내용 이 여러분 의 학습 이나 업무 에 어느 정도 도움 이 되 기 를 바 랍 니 다.궁금 한 점 이 있 으 시 면 댓 글 을 남 겨 주 셔 서 저희 에 대한 지지 에 감 사 드 립 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
MySQL/마이바티스 | 동적 쿼리 사용A라는 서비스에 해당하는 테이블을 조인하고 조회하는 데 사용됩니다. 나중에 공통화를 위해 B 및 C 서비스도 추가됩니다. A, B, C 서비스는 모두 단일 쿼리에서 작동할 수 있도록 공통화되어야 합니다. 테이블에 각...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.