Mybatis整合Spring

一、整合思路

  • 1 SqlSessionFactory对象应该放到Spring容器中作为单例存在。
  • 2.传统DAO开发模式方法中,应该从Spring容器中获的sqlSession对象
  • 3.Mapper动态代理形式中,应该从Spring容器中直接获得mapper的代理对象
  • 4.数据库的连接以及数据库的事务管理都交给Spring来管理。
二、整合步骤
  • 1.创建一个Java项目,导入Spring和Mybatis所需要的所有jar包
  • 2.创建Mybatis的配置文件SqlMapConfig.xml
  • 3.编写Spring的配置文件applicationContext.xml

3.1 数据库连接和连接池
3.2 将sqlSessionFactory对象,配置到Spring的容器中
3.3 编写Spring的配置文件其他相关配置

  • 4.复制jdbc.propertieslog4j.properties配置文件到这个工程
    在这里插入图片描述

三、整合开发(DAO开发模式)

1.创建POJO文件
package spring.mybatis.pojo;

import java.util.Date;

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

public Integer getId() {
	return id;
}

public void setId(Integer id) {
	this.id = id;
}

public String getUsername() {
	return username;
}

public void setUsername(String username) {
	this.username = username;
}

public String getSex() {
	return sex;
}

public void setSex(String sex) {
	this.sex = sex;
}

public Date getBirthday() {
	return birthday;
}

public void setBirthday(Date birthday) {
	this.birthday = birthday;
}

public String getAddress() {
	return address;
}

public void setAddress(String address) {
	this.address = address;
}

@Override
public String toString() {
	return "User [id=" + id + ", username=" + username + ", sex=" + sex + ", birthday=" + birthday + ", address="
			+ address + "]";
}
}
2.创建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="user">
<select id="getUserById" parameterType="int" resultType="spring.mybatis.pojo.User">
	select*from user where id=#{id}
</select>
   <!-- 查询用户 -->
<select id="getUserByUserName" parameterType="String" resultType="spring.mybatis.pojo.User">
	select*from user where username LIKE '%${value}%'
</select>
   <!-- 增加用户 -->
<insert id="insertUser" parameterType="spring.mybatis.pojo.User" useGeneratedKeys="true" keyProperty="id">
	insert into `user`(`username`,`birthday`,`sex`,`address`)
	values(#{username},#{birthday},#{sex},#{address})
</insert>

<!--更新用户 -->
<update id="updateUser" parameterType="spring.mybatis.pojo.User" >
update `user` set `username`=#{username} where `id`=#{id}
</update>

<!--删除用户 -->
<delete id="deleteUser" parameterType="int">
delete from `user` where `id`=#{id}
</delete>
</mapper>
3.在SqlMapConfig.xml文件中加载User.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>
	<mappers>
		<mapper resource="mybatis/user.xml" />
	</mappers>
</configuration>
4.创建UserDao接口
package spring.mybatis.dao;
import java.util.List;
import spring.mybatis.pojo.User;

//用户持久化接口
public interface UserDao {
//根据用户ID来查询用户信息
User getUserById(Integer id);

//根据用户名查找
List<User> getUserByUserName(String userName);

//	添加用户
void insertUser(User user);
}
5.编写UserDaoImpl实现类,关键要继承SqlSesionDaoSupport和实现UserDao
package spring.mybatis.daoImpl;
import java.util.List;
import org.apache.ibatis.session.SqlSession;
import org.mybatis.spring.support.SqlSessionDaoSupport;
import spring.mybatis.dao.UserDao;
import spring.mybatis.pojo.User;

public class UserDaoImpl extends SqlSessionDaoSupport implements UserDao {
//根据ID查询用户
@Override
public User getUserById(Integer id) {
	SqlSession sqlSession = super.getSqlSession();
	User user = sqlSession.selectOne("user.getUserById", id);
	return user;
	// sqlSession2不需要关闭
}

@Override
public List<User> getUserByUserName(String name) {
	SqlSession sqlSession = super.getSqlSession();
	List<User> list = sqlSession.selectList("user.getUserByUserName", name);
	for (User user : list) {
		System.out.println(user);
	}
	return list;
}

@Override
public void insertUser(User user) {
	SqlSession sqlSession = super.getSqlSession();
	sqlSession.insert("user.insertUser", user);
  //不用再手动提交事务,全部交给Spring来管理
}
}
6.在applicationContext.xml中配置UserDaoImpl实现类
<?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">

  <!-- 加载jdbc配置文件 -->
  <context:property-placeholder location="classpath:jdbc.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">
	<property name="dataSource" ref="dataSource" />
	<!-- 加载mybatis核心配置文件 -->
	<property name="configLocation" value="classpath:SqlMapConfig.xml" />
	<!-- 别名包扫描 -->
	<property name="typeAliasesPackage" value="spring.mybatis.pojo" />
</bean>

<!-- 传统Dao配置 -->
<bean class="spring.mybatis.daoImpl.UserDaoImpl">
	<property name="sqlSessionFactory" ref="sqlSessionFactory" />
</bean>
7.编写测试类
package spring.mybatis.test;

import org.junit.Before;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import spring.mybatis.dao.UserDao;
import spring.mybatis.pojo.User;

public class UserDaoTest {

private ApplicationContext applicationContext;

@Before
public void init() {
	applicationContext = new ClassPathXmlApplicationContext("classpath:applicationContext.xml");
}

@Test
public void testGetUserById() {
	UserDao userDao = applicationContext.getBean(UserDao.class);
	User user = userDao.getUserById(30);
	System.out.println(user);
}
}

四、整合开发(动态代理开发模式)

1.创建UserMapper接口
package spring.mybatis.mapper;
import java.util.List;
import spring.mybatis.pojo.User;

public interface UserMapper {
// 根据用户ID来查询用户信息
User getUserById(Integer id);

// 根据用户名查找
List<User> getUserByUserName(String userName);

// 添加用户
void insertUser(User user);
}
2.在同一目录下创建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">
<!--
动态代理开发规则
1.namespace必须是接口的全路径名
2.接口的方法名必须与sql中id一致
3.接口的入参与parameterType类型一致
4.返回值类型必须与resultType类型一致
 -->
<mapper namespace="spring.mybatis.mapper.UserMapper">

<!-- 查询ID -->
   <!--id是sql语句的唯一标志 parameterType入参的数据类型 resultType是返回的数据类型 -->
<select id="getUserById" parameterType="int" resultType="spring.mybatis.pojo.User">
	select*from user where id=#{id}
</select>
 
  <!-- 查询用户名 -->
<select id="getUserByUserName" parameterType="String" resultType="spring.mybatis.pojo.User">
	select*from user where username LIKE '%${value}%'
</select>

   <!--插入用户的操作  -->
  <insert id="insertUser" parameterType="spring.mybatis.pojo.User" useGeneratedKeys="true" keyProperty="id">
	insert into `user`(`username`,`birthday`,`sex`,`address`)
	values(#{username},#{birthday},#{sex},#{address})
</insert>
</mapper>
3.在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">

  <!-- 加载jdbc配置文件 -->
  <context:property-placeholder location="classpath:jdbc.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">
	<property name="dataSource" ref="dataSource" />
	<!-- 加载mybatis核心配置文件 -->
	<property name="configLocation" value="classpath:SqlMapConfig.xml" />
	<!-- 别名包扫描 --> 
	<property name="typeAliasesPackage" value="spring.mybatis.pojo" />
</bean>

<!-- 动态代理配置方式:第一种方式MapperFactoryBean -->
<bean id="baseMapper" class="org.mybatis.spring.mapper.MapperFactoryBean" abstract="true" lazy-init="true">
     <property name="sqlSessionFactory" ref="sqlSessionFactory" />
   </bean>
	<!-- 配置扫描一个接口 -->
   <bean parent="baseMapper">
     <property name="mapperInterface" value="spring.mybatis.mapper.UserMapper" />
   </bean>

<!-- 动态代理,第二种方式:包扫描(推荐): -->
<!-- basePackage多个包用","分隔 -->
<property name="basePackage" value="spring.mybatis.mapper" />
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
	<property name="basePackage" value="spring.mybatis.mapper" />
</bean>
4.编写测试类
package spring.mybatis.test;
import org.junit.Before;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import spring.mybatis.mapper.UserMapper;
import spring.mybatis.pojo.User;

public class UserMapperTest {
private ApplicationContext applicationContext;

@Before
public void init() {
	applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");
}

@Test
public void testGetUserById() {
	UserMapper userMapper = applicationContext.getBean(UserMapper.class);
	User user = userMapper.getUserById(27);
	System.out.println(user);
}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值