- 一、回顾MyBatis入门
- 二、Spring集成MyBatis
- 三、整合实现一
- 四、整合实现二
- 五、整合实现三
跳转到目录 也包括一些Spring需要的坐标
junit
junit
4.12
test
org.projectlombok
lombok
1.16.20
provided
org.slf4j
slf4j-log4j12
1.7.25
test
mysql
mysql-connector-java
5.1.40
runtime
com.alibaba
druid
1.1.19
org.mybatis
mybatis
3.5.0
org.springframework
spring-webmvc
5.2.2.RELEASE
org.springframework
spring-jdbc
5.2.2.RELEASE
org.springframework
spring-test
5.2.2.RELEASE
org.aspectj
aspectjweaver
1.8.13
数据库关系表设计
CREATE TABLE `t_user` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`name` varchar(20) DEFAULT NULL,
`age` tinyint(4) DEFAULT NULL,
`born_date` date DEFAULT NULL,
`head_img` varchar(100) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8mb4;
domain实体类
@Data
@AllArgsConstructor
@NoArgsConstructor
public class User {
private Long id;
private String name;
private Integer age;
private Date bornDate;
private String headImg;
}
实现mybatis的配置文件
UserMapper接口编写
public interface UserMapper {
List selectAll();
}
接口对应的Mapper映射文件
SELECT id, name, age, born_date, head_img FROM t_user;
测试类
public class UserMapperTest {
@Test
public void test1() throws Exception{
InputStream in = Resources.getResourceAsStream("mybatis-config.xml");
SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(in);
SqlSession sqlSession = factory.openSession();
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
List userList = mapper.selectAll();
for (User user : userList) {
System.out.println(user);
}
sqlSession.close();
}
}
二、Spring集成MyBatis
跳转到目录 官方文档: mybatis-spring
什么是 MyBatis-Spring?
- MyBatis-Spring 会帮助你将 MyBatis 代码无缝地整合到 Spring 中。
- 在开始使用 MyBatis-Spring 之前,你需要先熟悉 Spring 和 MyBatis 这两个框架和有关它们的术语。
MyBatis-Spring 需要以下版本:
Spring整合MyBatis, 主要目的就是把MyBatis核心配置文件中的内容,交给Spring来处理; 再简单点来说, 将MyBatis的SqlSessionFactory
和Mapper
的创建交给Spring处理;
org.mybatis
mybatis-spring
2.0.0
现在,这个 bean 就可以直接注入到你的 DAO bean 中了。你需要在你的 bean 中添加一个 SqlSession 属性,就像下面这样:
public class UserMapperImpl implements UserMapper{
private SqlSessionTemplate sqlSession;
public void setSqlSession(SqlSessionTemplate sqlSession) {
this.sqlSession = sqlSession;
}
public List selectAll() {
return sqlSession.getMapper(UserMapper.class).selectAll();
}
}
按下面这样,注入 SqlSessionTemplate
:
三、整合实现一
跳转到目录
1、创建Spring配置文件applicationContext.xml
2、配置数据源替换mybaits的数据源
db.properties
#连接数据库的四个基本要素
jdbc.driverClassName=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/ssm
jdbc.username=root
jdbc.password=1111
#druid连接池其他配置,省略
3、配置SqlSessionFactory,关联MyBatis
4、注册sqlSessionTemplate,关联sqlSessionFactory;
5、增加Mapper(Dao)接口的实现类;私有化sqlSessionTemplate
public class UserMapperImpl implements UserMapper{
private SqlSessionTemplate sqlSession;
public void setSqlSession(SqlSessionTemplate sqlSession) {
this.sqlSession = sqlSession;
}
public List selectAll() {
return sqlSession.getMapper(UserMapper.class).selectAll();
}
}
6、注册bean实现
7、测试
@Test
public void test1() throws Exception{
ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
UserMapper userMapper = context.getBean("userMapperImpl", UserMapper.class);
for (User user : userMapper.selectAll()) {
System.out.println(user);
}
}
结果成功输出!现在我们的Mybatis配置文件的状态!发现都可以被Spring整合!
其实我们可以通过Spirng完全将mybatis配置文件去除,这里还是保留一个配置吧!
四、整合实现二跳转到目录 让Dao继承Support类 , 直接利用 getSqlSession()
获得 , 然后直接注入SqlSessionFactory
. 比起方式1 , 不需要管理SqlSessionTemplate , 而且对事务的支持更加友好
官方文档截图:
public class UserMapperImpl extends SqlSessionDaoSupport implements UserMapper {
public List selectAll() {
return getSqlSession().getMapper(UserMapper.class).selectAll();
}
}
2、修改bean的配置
3、测试
@Test
public void test2() throws Exception{
ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
UserMapper userMapper = context.getBean("userMapperImpl", UserMapper.class);
for (User user : userMapper2.selectAll()) {
System.out.println(user);
}
}
五、整合实现三
跳转到目录 前两种的整合实现方式,都创建了Dao接口的实现类,通过实现类来获取mapper对象; 使用整合方式三,我们告诉Spring,让他来帮我们创建mapper的代理对象即可!
1、配置MapperFactoryBean,Spring帮我们创建 Mapper的代理对象
或者采用下面扫描的方式
此时的applicationContext.xml文件; 其他和方式一相同
public class UserMapperTest {
@Autowired
private UserMapper userMapper;
@Test
public void testSelectAll(){
/*
// 非DI注入的方式
ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
UserMapper mapper = context.getBean("userMapper", UserMapper.class);
for (User user : mapper.selectAll()) {
System.out.println(user);
}*/
// DI注入方式
List users = userMapper.selectAll();
for (User user : users) {
System.out.println(user);
}
}
}
此时, 通过DI注入的方式获取到mapper对象,然后进行CRUD即可!
总结 : 整合到spring中以后可以完全不要mybatis的配置文件,除了这些方式可以实现整合之外,我们还可以使用注解来实现