MyBatis로 통합 스프링 (흰색 용)

@ [TOC]의 MyBatis 스프링 실제로 통합 워크 SSM SM 통합되어 통합.

1. 우리 안에 가두는

통합 아이디어는 실제로 핵심 봄의 MyBatis로 통합이다

도 1에서, 스프링 SqlSessionFactory는 컨테이너는 객체에 있어야 하나, 본 실시 예로서 , 스프링 기본 단일 실시. 2, 전통적인 개발 DAO는, 주제는 봄 SQLSESSION 컨테이너에서 얻을 수 있습니다. (3)는 매퍼 프록시 형태는 프록시 객체 매퍼 스프링 용기로부터 직접 수득한다. 4, 데이터베이스 연결 및 트랜잭션 관리 데이터베이스 연결 풀은 완전한 봄 컨테이너에 있습니다.

2. 항아리 패키지를 통합 할 필요성

1 스프링 항아리 패키지 (2)의 MyBatis 단지 패키지 (3), 스프링 + 패키지 통합의 MyBatis. 4, MySQL의 데이터베이스 드라이버 항아리 패키지. 5, 데이터베이스 연결 풀 항아리 패키지.

항아리 패키지, 나는 당신의 모든 그렇지 않으면 나는 매우 당황 QAQ 오전, 최고 희망

3. 통합 단계

3.1. 프로젝트 만들기

다음 그림에서 자바 프로젝트를 만듭니다 :

그림 삽입 설명 여기

3.2. 가져 오기 항아리 패키지

아래와 같이 항아리 패키지, 상기 요구를 도입 :

그림 삽입 설명 여기

3.3. 프로파일 가입

프로파일 2. 프로필 sqlmapConfig.xml가) 연결 풀 데이터베이스 연결 및 b) 스프링 용기 (D)에 배치 된 트랜잭션 관리 (임시로 배치되지 않을 수있다) c) SqlSessionFactory는 객체) mapeer 프록시 객체 구현되거나 다오 1.mybatisSpring 클래스 스프링 용기로 구성.

아래 그림과 같이, 자원에 가입 폴더 설정 구성 파일의 복사본을 만듭니다

그림 삽입 설명 여기

3.3.1. 구성 SqlMapConfig.xml

다음과 같이 구성 파일, SqlMapConfig.xml입니다 :

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
	<!-- 设置别名 -->
	<typeAliases>
		<!-- 2. 指定扫描包,会把包内所有的类都设置别名,别名的名称就是类名,大小写不敏感 -->
		<package name="com.gx.mybatis.pojo" />
	</typeAliases>

</configuration>

复制代码
3.3.2.applicationContext.xml

봄의 MyBatis 스프링 속하는 SqlSessionFactoryBean이 항아리 패키지, MyBatis로 다른 아키텍처, 항아리 패키지를 통합 할 필요가있다.

아래에 도시 된 바와 같이 스프링의 MyBatis-1.2.2.jar는 프로젝트 소스 코드 추가

그림 삽입 설명 여기
그림 삽입 설명 여기

아래 그림과 같이 효과, 아이콘이 성공적으로로드 소스를 나타 내기 위해 변경 :

그림 삽입 설명 여기
아래와 같이 통합 SqlSessionFactoryBean MyBatis로 위치를 요구한다 :
그림 삽입 설명 여기

applicationContext.xml는 다음과 같은 배열

다오의 원래 개발 이후, 그래서

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:context="http://www.springframework.org/schema/context" xmlns:p="http://www.springframework.org/schema/p"
	xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
	http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd
	http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.0.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.0.xsd
	http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-4.0.xsd">

   <!-- 加载配置文件 -->
   <context:property-placeholder location="classpath:db.properties" />

	<!-- 数据库连接池 -->
	<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"
		destroy-method="close">
		<property name="driverClassName" value="${jdbc.driver}" />
		<property name="url" value="${jdbc.url}" />
		<property name="username" value="${jdbc.username}" />
		<property name="password" value="${jdbc.password}" />
		<property name="maxActive" value="10" />
		<property name="maxIdle" value="5" />
	</bean>

	<!-- 配置SqlSessionFactory -->
	<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
		<!-- 配置mybatis核心配置文件 -->
		<property name="configLocation" value="classpath:SqlMapConfig.xml" />
		<!-- 配置数据源 -->
		<property name="dataSource" ref="dataSource" />
	</bean>
</beans>
复制代码
3.3.3. 구성 db.properties
jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/mybatis?characterEncoding=utf-8
jdbc.username=root
jdbc.password=root

复制代码
3.3.4. 구성 log4j.properties
# Global logging configuration
log4j.rootLogger=DEBUG, stdout
# Console output...
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%5p [%t] - %m%n
复制代码
3.3.5 효과 :

다음 프로파일의 최종 결과를 첨가한다 :

그림 삽입 설명 여기
지금까지 확인을 환경을 구축! ! ! !

4. 다오의 두 가지 구현 개발

1, 2 원래 개발 DAO 모드, 개발의 형태로 제의 사용은 매퍼 실시 패키지 구성 매퍼 에이전트 스캔 a) 직접 Mapper 프록시 구성 B)를

요구 사항 : 1. 사용자 ID에 따라 사용자 이름 사용자 쿼리를 기반으로 퍼지 쿼리를 구현 2. 3. 추가를 달성하기 위해

4.1. 만들기 POJO

public class User {
	private int id;
	private String username;// 用户姓名
	private String sex;// 性别
	private Date birthday;// 生日
	private String address;// 地址

get/set。。。
}

复制代码

4.2. 다오 전통적인 개발 모드 (모드 1)

원래 개발 인터페이스 +의 DAO 구현 클래스는 완료합니다. DAO 구현 클래스에 필요한 필요 상속 SqlsessionDaoSupport 클래스를

4.2.1. Mapper.xml 달성

다음과 같이 구성 파일을 작성 user.xml을 :

<?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="test">
	<!-- 根据用户id查询 -->
	<select id="queryUserById" parameterType="int" resultType="user">
		select * from user where id = #{id}
	</select>

	<!-- 根据用户名模糊查询用户 -->
	<select id="queryUserByUsername" parameterType="string"
		resultType="user">
		select * from user where username like '%${value}%'
	</select>

	<!-- 添加用户 -->
	<insert id="saveUser" parameterType="user">
		<selectKey keyProperty="id" keyColumn="id" order="AFTER"
			resultType="int">
			select last_insert_id()
		</selectKey>
		insert into user
		(username,birthday,sex,address)
		values
		(#{username},#{birthday},#{sex},#{address})
	</insert>

</mapper>
复制代码
4.2.2. Mapper.xml로드

SqlMapConfig 다음 그림에서 구성 :

그림 삽입 설명 여기

4.2.3. 인터페이스는 UserDao를 달성하기 위해
public interface UserDao {
	/**
	 * 根据id查询用户
	 * 
	 * @param id
	 * @return
	 */
	User queryUserById(int id);

	/**
	 * 根据用户名模糊查询用户列表
	 * 
	 * @param username
	 * @return
	 */
	List<User> queryUserByUsername(String username);

	/**
	 * 保存
	 * 
	 * @param user
	 */
	void saveUser(User user);

}
复制代码
4.2.4. 쓰기 UserDaoImpl 인터페이스와 상속 SqlSessionDaoSupport를 구현

쓰기 DAO 구현 클래스, 구현 클래스는 SqlSessionDaoSupport 상속해야합니다 SqlSessionDaoSupport가 제공 getSqlSession () 얻을 수있는 방법을 SQLSESSION

public class UserDaoImpl extends SqlSessionDaoSupport implements UserDao {
	@Override
	public User queryUserById(int id) {
		// 获取SqlSession
		SqlSession sqlSession = super.getSqlSession();

		// 使用SqlSession执行操作
		User user = sqlSession.selectOne("queryUserById", id);

		// 不要关闭sqlSession

		return user;
	}

	@Override
	public List<User> queryUserByUsername(String username) {
		// 获取SqlSession
		SqlSession sqlSession = super.getSqlSession();

		// 使用SqlSession执行操作
		List<User> list = sqlSession.selectList("queryUserByUsername", username);

		// 不要关闭sqlSession

		return list;
	}

	@Override
	public void saveUser(User user) {
		// 获取SqlSession
		SqlSession sqlSession = super.getSqlSession();

		// 使用SqlSession执行操作
		sqlSession.insert("saveUser", user);

		// 不用提交,事务由spring进行管理
		// 不要关闭sqlSession
	}
}

复制代码
4.2.4.1. SqlSessionDaoSupport의 소스

구현 클래스는 SqlSessionDaoSupport 상속해야합니다 SqlSessionDaoSupport가 제공 getSqlSession () 얻을 수있는 방법을 SQLSESSION

그림 삽입 설명 여기

4.2.5. 구성 DAO

구현 클래스 DAO 스프링 용기에 배치

<!-- Dao原始Dao -->
	<bean id="userDao" class="com.gx.mybatis.dao.UserDaoImpl">
		<property name="sqlSessionFactory" ref="sqlSessionFactoryBean"/>
	</bean>
复制代码
4.2.6. 테스트 만들기

시험 방법을 작성, 당신은 직접 테스트의 JUnit 사용 사례를 만들 수 있습니다. 도로서 생성.

그림 삽입 설명 여기
그림 삽입 설명 여기
그림 삽입 설명 여기

다음 시험 방법의 제조이다 :

public class UserDaoTest {
	private ApplicationContext context;

	@Before
	public void setUp() throws Exception {
		this.context = new ClassPathXmlApplicationContext("classpath:applicationContext.xml");
	}

	@Test
	public void testQueryUserById() {
		// 获取userDao
		UserDao userDao = this.context.getBean(UserDao.class);

		User user = userDao.queryUserById(1);
		System.out.println(user);
	}

	@Test
	public void testQueryUserByUsername() {
		// 获取userDao
		UserDao userDao = this.context.getBean(UserDao.class);

		List<User> list = userDao.queryUserByUsername("张");
		for (User user : list) {
			System.out.println(user);
		}
	}

	@Test
	public void testSaveUser() {
		// 获取userDao
		UserDao userDao = this.context.getBean(UserDao.class);

		User user = new User();
		user.setUsername("夏侯惇坑");
		user.setSex("1");
		user.setBirthday(new Date());
		user.setAddress("三国");
		userDao.saveUser(user);
		System.out.println(user);
	}
}

复制代码

5.Mapper 프록시 형태 개발 DAO (두번째 방법)

5.1. 구현 Mapper.xml

다음과 같이 구성 파일을 작성 UserMapper.xml :

<?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="cn.itcast.mybatis.mapper.UserMapper">
	<!-- 根据用户id查询 -->
	<select id="queryUserById" parameterType="int" resultType="user">
		select * from user where id = #{id}
	</select>

	<!-- 根据用户名模糊查询用户 -->
	<select id="queryUserByUsername" parameterType="string"
		resultType="user">
		select * from user where username like '%${value}%'
	</select>

	<!-- 添加用户 -->
	<insert id="saveUser" parameterType="user">
		<selectKey keyProperty="id" keyColumn="id" order="AFTER"
			resultType="int">
			select last_insert_id()
		</selectKey>
		insert into user
		(username,birthday,sex,address) values
		(#{username},#{birthday},#{sex},#{address})
	</insert>
</mapper>
复制代码
5.2. UserMapper 인터페이스 구현
public interface UserMapper {
	/**
	 * 根据用户id查询
	 * 
	 * @param id
	 * @return
	 */
	User queryUserById(int id);

	/**
	 * 根据用户名模糊查询用户
	 * 
	 * @param username
	 * @return
	 */
	List<User> queryUserByUsername(String username);

	/**
	 * 添加用户
	 * 
	 * @param user
	 */
	void saveUser(User user);
}

复制代码
5.3 방법 1 : 구성 프록시 매퍼

추가 applicationContext.xml에서 구성 MapperFactoryBean은 MyBatis로 스프링 통합 패키지를 속

<!-- Mapper代理的方式开发方式一,配置Mapper代理对象 -->
<bean id="userMapper" class="org.mybatis.spring.mapper.MapperFactoryBean">
	<!-- 配置Mapper接口 -->
	<property name="mapperInterface" value="com.gx.mybatis.mapper.UserMapper" />
	<!-- 配置sqlSessionFactory -->
	<property name="sqlSessionFactory" ref="sqlSessionFactory" />
</bean>

复制代码
5.4. 테스트 만들기
public class UserMapperTest {
	private ApplicationContext context;

	@Before
	public void setUp() throws Exception {
		this.context = new ClassPathXmlApplicationContext("classpath:applicationContext.xml");
	}

	@Test
	public void testQueryUserById() {
		// 获取Mapper
		UserMapper userMapper = this.context.getBean(UserMapper.class);

		User user = userMapper.queryUserById(1);
		System.out.println(user);
	}

	@Test
	public void testQueryUserByUsername() {
		// 获取Mapper
		UserMapper userMapper = this.context.getBean(UserMapper.class);

		List<User> list = userMapper.queryUserByUsername("张");

		for (User user : list) {
			System.out.println(user);
		}
	}
	@Test
	public void testSaveUser() {
		// 获取Mapper
		UserMapper userMapper = this.context.getBean(UserMapper.class);

		User user = new User();
		user.setUsername("安琪拉稀");
		user.setSex("1");
		user.setBirthday(new Date());
		user.setAddress("中国");

		userMapper.saveUser(user);
		System.out.println(user);
	}
}
复制代码
5.5 두 번째 방법 : 스캔 구성 패킷 형태 매퍼 (일반적인 개발)
<!-- Mapper代理的方式开发方式二,扫描包方式配置代理 -->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
	<!-- 配置Mapper接口 -->
	<property name="basePackage" value="com.gx.mybatis.mapper" />
</bean>
复制代码

각 ID 매퍼 프록시 객체는 클래스 이름, 첫 글자를 소문자

요약 맵의 6, 개발 다오 구현

그림 삽입 설명 여기

추천

출처juejin.im/post/5de5af7a5188255ee5387067