Mybatis整合spring其实就是SSM框架中SM的整合集成。
1.整合思路
整合的思路其实就是Mybatis整合spring的核心
1、SqlSessionFactory对象应该放到spring容器中作为单例存在,spring默认是单例的。 2、传统dao的开发方式中,应该从spring容器中获得sqlsession对象。 3、Mapper代理形式中,应该从spring容器中直接获得mapper的代理对象。 4、数据库的连接以及数据库连接池事务管理都交给spring容器来完成。
2.整合需要的jar包
1、spring的jar包 2、Mybatis的jar包 3、Spring+mybatis的整合包。 4、Mysql的数据库驱动jar包。 5、数据库连接池的jar包。
jar包的话,希望在座各位最好都有,不然我就很尴尬QAQ
3.整合的步骤
3.1.创建工程
如下图创建一个java工程:
小白福音,Mybatis整合spring教程分享
3.2.导入jar包
前面提到的jar包需要导入,如下图:
小白福音,Mybatis整合spring教程分享
3.3.加入配置文件
1.mybatisSpring的配置文件 2.的配置文件sqlmapConfig.xml a)数据库连接及连接池 b)事务管理(暂时可以不配置) c)sqlsessionFactory对象,配置到spring容器中 d)mapeer代理对象或者是dao实现类配置到spring容器中。
创建资源文件夹config拷贝加入配置文件,如下图
小白福音,Mybatis整合spring教程分享
3.3.1.配置SqlMapConfig.xml
配置文件是SqlMapConfig.xml,如下:
3.3.2.applicationContext.xml
SqlSessionFactoryBean属于mybatis-spring这个jar包 对于spring来说,mybatis是另外一个架构,需要整合jar包。
在项目中加入mybatis-spring-1.2.2.jar的源码,如下图
小白福音,Mybatis整合spring教程分享
小白福音,Mybatis整合spring教程分享
效果,如下图所示,图标变化,表示源码加载成功:
小白福音,Mybatis整合spring教程分享
整合Mybatis需要的是SqlSessionFactoryBean,位置如下图:
小白福音,Mybatis整合spring教程分享
applicationContext.xml,配置内容如下
由于是原始Dao开发,所以
<?xml version="1.0" encoding="UTF-8"?>3.3.3.配置db.properties
jdbc.driver=com.mysql.jdbc.Driverjdbc.url=jdbc:mysql://localhost:3306/mybatis?characterEncoding=utf-8jdbc.username=rootjdbc.password=root
3.3.4.配置log4j.properties
Global logging configurationlog4j.rootLogger=DEBUG, stdout# Console output…log4j.appender.stdout=org.apache.log4j.ConsoleAppenderlog4j.appender.stdout.layout=org.apache.log4j.PatternLayoutlog4j.appender.stdout.layout.ConversionPattern=%5p [%t] - %m%n
3.3.5.效果:
加入的配置文件最终效果如下:
小白福音,Mybatis整合spring教程分享
至此环境就搭建OK了!!!!
4.Dao的开发的两种实现方式
1、原始dao的开发方式 2、使用Mapper代理形式开发方式 a)直接配置Mapper代理 b)使用扫描包配置Mapper代理
需求: 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.传统dao的开发方式(方式一)
原始的DAO开发接口+实现类来完成。 需要dao实现类需要继承SqlsessionDaoSupport类
4.2.1.实现Mapper.xml
编写User.xml配置文件,如下:
4.2.2.加载Mapper.xml
在SqlMapConfig如下图进行配置:
小白福音,Mybatis整合spring教程分享
4.2.3.实现UserDao接口
public interface UserDao { /** * 根据id查询用户 * * @param id * @return / User queryUserById(int id); /* * 根据用户名模糊查询用户列表 * * @param username * @return / List 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 queryUserByUsername(String username) { // 获取SqlSession SqlSession sqlSession = super.getSqlSession(); // 使用SqlSession执行操作 List 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源码
实现类必须继承SqlSessionDaoSupportSqlSessionDaoSupport提供getSqlSession()方法来获取SqlSession
小白福音,Mybatis整合spring教程分享
4.2.5.配置dao
把dao实现类配置到spring容器中
4.2.6.创建测试
创建测试方法,可以直接创建测试Junit用例。 如下图所示进行创建。
小白福音,Mybatis整合spring教程分享
小白福音,Mybatis整合spring教程分享
小白福音,Mybatis整合spring教程分享
编写测试方法如下:
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 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配置文件,如下:
5.2.实现UserMapper接口
public interface UserMapper { /** * 根据用户id查询 * * @param id * @return / User queryUserById(int id); /* * 根据用户名模糊查询用户 * * @param username * @return / List queryUserByUsername(String username); /* * 添加用户 * * @param user */ void saveUser(User user);}
5.3.方式一:配置mapper代理
在applicationContext.xml添加配置 MapperFactoryBean也是属于mybatis-spring整合包
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 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(开发常用)
每个mapper代理对象的id就是类名,首字母小写
6、Dao的开发的实现方式总结图
如果觉得本文不错,那就点赞转发一下吧,更多详细内容请加群(713054044)免费获取。