小白福音,Mybatis整合spring教程分享

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,如下:

<?xml version="1.0" encoding="UTF-8" ?>

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配置文件,如下:

<?xml version="1.0" encoding="UTF-8" ?> select * from user where id = #{id} select * from user where username like '%${value}%' select last_insert_id() insert into user (username,birthday,sex,address) values (#{username},#{birthday},#{sex},#{address})

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配置文件,如下:

<?xml version="1.0" encoding="UTF-8" ?> select * from user where id = #{id} select * from user where username like '%${value}%' select last_insert_id() insert into user (username,birthday,sex,address) values (#{username},#{birthday},#{sex},#{address})

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)免费获取。

发布了38 篇原创文章 · 获赞 2 · 访问量 960

猜你喜欢

转载自blog.csdn.net/WANXT1024/article/details/103683869