Spring整合MyBatis1 回忆Mybatis2 MyBatis-Spring学习3 整合实现一4 整合实现二
Spring整合MyBatis搭建一个MyBatis程序
- 导入相关的依赖
junit
junit junit 4.12
mybatis
org.mybatis mybatis 3.5.2
mysql-connector
mysql mysql-connector-java 5.1.47
spring相关的
org.springframework spring-webmvc 5.1.10.RELEASE org.springframework spring-jdbc 5.1.10.RELEASE
aspectJ AOP 织入器
org.aspectj aspectjweaver 1.9.4
mybatis-spring整合包 【重点】
org.mybatis mybatis-spring 2.0.2
lombok
org.projectlombok lombok 1.18.12
配置Maven静态资源过滤问题!
src/main/java ***.xml true src/main/resources ***.xml true
编写配置文件
代码实现
编写pojo实体类
@Data
@AllArgsConstructor
@NoArgsConstructor
public class User {
private int id;
private String name;
private String pwd;
}
编写UserMapper接口
public interface UserMapper {
public List selectUser();
}
编写数据库连接配置
db.properties
driver=com.mysql.jdbc.Driver url=jdbc:mysql://localhost:3306/mybatis?useSSL=false&useUnicode=true&characterEncoding=UTF-8 username=root password=xxc113206
实现mybatis的配置文件
接口对应的Mapper映射文件
工具类
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 users = mapper.selectUser();
for (User user : users) {
System.out.println(user);
}
}
}
2 MyBatis-Spring学习
官方文档:
http://mybatis.org/spring/zh/index.html
3 整合实现一- 引入Spring配置文件applicationContext.xml
- 配置数据源替换mybaits的数据源
配置完之后我们就可以不用mybatis-config.xml中配置的了。
- 配置SqlSessionFactory,关联MyBatis
说明:mapperLocations就是我们mybatis-config.xml中的映射器(mappers),说明我们之前在mybatis-config.xml中的配置现在可以配到applicationContext.xml了。甚至mybatis-config.xml不用也可以。我一般会将起别名和settings(设置)保留到mybatis-config.xml中。
- 注册sqlSessionTemplate,关联sqlSessionFactory;(sqlSessionTemplate就是我们mybatis中说的sqlSession)
构造器注入参考:https://blog.csdn.net/weixin_45842494/article/details/122772913
- 增加Dao接口的实现类;私有化sqlSessionTemplate
public class UserMapperImpl implements UserMapper {
//sqlSession不用我们自己创建了,Spring来管理
private SqlSessionTemplate sqlSession;
public void setSqlSession(SqlSessionTemplate sqlSession) {
this.sqlSession = sqlSession;
}
public List selectUser() {
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
return mapper.selectUser();
}
}
- 注册bean实现
- 测试
public class MyTest {
@Test
public void test1(){
ApplicationContext context = new
ClassPathXmlApplicationContext("applicationContext.xml");
UserMapper mapper = (UserMapper) context.getBean("userMapper");
List user = mapper.selectUser();
System.out.println(user);
}
}
说明:最主要的就是将SqlSessionTemplate称为私有化属性,在操作中没有感觉到mybatis的存在一样。
同样的,为了体现整合的效果,我们将applicationContext.xml提取出来,使用import标签,用一个总得配置文件进行整合。
这样一来,spring-dao将作为固定不用在改变,我们需要注入的时候只需要修改applicationContext.xml即可
此时我们的mybatis-config.xml的内容为:
4 整合实现二mybatis-config.xml被spring完美整合。
mybatis-spring1.2.3版以上的才有这个
官方文档截图:
dao继承Support类 , 直接利用 getSqlSession() 获得 , 然后直接注入SqlSessionFactory . 比起方式1 , 不需要管理SqlSessionTemplate , 而且对事务的支持更加友好 . 可跟踪源码查看。
测试
- 新建一个UserMapperImpl2.java
public class UserMapperImpl2 extends SqlSessionDaoSupport implements UserMapper{
@Override
public List selectUser() {
return getSqlSession().getMapper(UserMapper.class).selectUser();
}
}
继承了SqlSessionDaoSupport同时实现了UserMapper。因为已经有了sqlSession,所以sqlSessionTemplate都没有必要要了。
- 注入到Spring中
这里直接用了sqlSessionFactory,没必要sqlSessionTemplate了
- 测试
public class MyTest {
@Test
public void test1(){
ApplicationContext context = new
ClassPathXmlApplicationContext("applicationContext.xml");
UserMapper mapper = (UserMapper) context.getBean("userMapper2");
List users = mapper.selectUser();
for (User user : users) {
System.out.println(user);
}
}
}



