Spring整合MyBatis1 回忆Mybatis2 MyBatis-Spring学习3 整合实现一4 整合实现二 Spring整合MyBatis
搭建一个MyBatis程序
导入相关的依赖junit
mybatis
mysql-connector
spring相关的
aspectJ AOP 织入器
mybatis-spring整合包 【重点】
lombok
配置Maven静态资源过滤问题!
编写配置文件
代码实现
1 回忆Mybatis编写pojo实体类
@Data@AllArgsConstructor@NoArgsConstructorpublic class User { private int id; private String name; private String pwd;}
编写UserMapper接口
public interface UserMapper { public List
编写数据库连接配置
db.properties
driver=com.mysql.jdbc.Driverurl=jdbc:mysql://localhost:3306/mybatis?useSSL=false&useUnicode=true&characterEncoding=UTF-8username=rootpassword=xxc113206
实现mybatis的配置文件
<?xml version="1.0" encoding="UTF-8" ?>
接口对应的Mapper映射文件
<?xml version="1.0" encoding="UTF-8" ?>
工具类
public class MyBatisUtils { private static SqlSessionFactory sqlSessionFactory; static { try { // 获取MyBatis第一步:获取sqlSessionFactory对象 String resource = "mybatis-config.xml"; InputStream inputStream = Resources.getResourceAsStream(resource); sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream); } catch (IOException e) { e.printStackTrace(); } } // 既然有了sqlSessionFactory,顾名思义,我们就可以从中获得SqlSession的实例了 // SqlSession 完全包含了面向数据库执行SQL命令所需的所有方法 public static SqlSession getSqlSession(){ return sqlSessionFactory.openSession(true); }}
测试类
public class MyTest { @Test public void test(){ SqlSession sqlSession = MyBatisUtils.getSqlSession(); UserMapper mapper = sqlSession.getMapper(UserMapper.class); List
官方文档:
http://mybatis.org/spring/zh/index.html
3 整合实现一 引入Spring配置文件applicationContext.xml<?xml version="1.0" encoding="UTF-8"?>
配置SqlSessionFactory,关联MyBatis配置完之后我们就可以不用mybatis-config.xml中配置的了。
注册sqlSessionTemplate,关联sqlSessionFactory;(sqlSessionTemplate就是我们mybatis中说的sqlSession)说明:mapperLocations就是我们mybatis-config.xml中的映射器(mappers),说明我们之前在mybatis-config.xml中的配置现在可以配到applicationContext.xml了。甚至mybatis-config.xml不用也可以。我一般会将起别名和settings(设置)保留到mybatis-config.xml中。
增加Dao接口的实现类;私有化sqlSessionTemplate构造器注入参考:https://blog.csdn.net/weixin_45842494/article/details/122772913
public class UserMapperImpl implements UserMapper { //sqlSession不用我们自己创建了,Spring来管理 private SqlSessionTemplate sqlSession; public void setSqlSession(SqlSessionTemplate sqlSession) { this.sqlSession = sqlSession; } public List
public class MyTest { @Test public void test1(){ ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml"); UserMapper mapper = (UserMapper) context.getBean("userMapper"); List
说明:最主要的就是将SqlSessionTemplate称为私有化属性,在操作中没有感觉到mybatis的存在一样。
同样的,为了体现整合的效果,我们将applicationContext.xml提取出来,使用import标签,用一个总得配置文件进行整合。
这样一来,spring-dao将作为固定不用在改变,我们需要注入的时候只需要修改applicationContext.xml即可
此时我们的mybatis-config.xml的内容为:
<?xml version="1.0" encoding="UTF-8" ?>
4 整合实现二mybatis-config.xml被spring完美整合。
mybatis-spring1.2.3版以上的才有这个
官方文档截图:
dao继承Support类 , 直接利用 getSqlSession() 获得 , 然后直接注入SqlSessionFactory 、比起方式1 , 不需要管理SqlSessionTemplate , 而且对事务的支持更加友好 、可跟踪源码查看。
测试
新建一个UserMapperImpl2.javapublic class UserMapperImpl2 extends SqlSessionDaoSupport implements UserMapper{ @Override public List
注入到Spring中继承了SqlSessionDaoSupport同时实现了UserMapper。因为已经有了sqlSession,所以sqlSessionTemplate都没有必要要了。
测试这里直接用了sqlSessionFactory,没必要sqlSessionTemplate了
public class MyTest { @Test public void test1(){ ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml"); UserMapper mapper = (UserMapper) context.getBean("userMapper2"); List