11.Spring整合Mybatis
11.1 搭建基础环境(跟着官网走)
第一步:导入相关依赖
<dependencies>
<!--junit单元测试-->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.13</version>
</dependency>
<!--mysql数据库-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.20</version>
</dependency>
<!--mybatis-->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.5</version>
</dependency>
<!--spring整合mybatis-->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>2.0.5</version>
</dependency>
<!--日志-->
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
<!--spring全套-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>5.2.7.RELEASE</version>
</dependency>
<!--spring操作数据库-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>5.2.7.RELEASE</version>
</dependency>
<!--织入(切入点表达式)-->
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
<version>1.9.5</version>
</dependency>
</dependencies>
第二步: 将SqlSessionFactory注入到springIOC容器中
- 由于spring要接管mybatis的SqlSessionFactory类所以需要注入到spring中
- name属性可以指定mybatis相关配置文件的路径
<!--可使用 SqlSessionFactoryBean来创建 SqlSessionFactory-->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource"/>
<!--绑定mybatis配置文件位置-->
<property name="configLocation" value="classpath:mybatis-config.xml"/>
<!--绑定映射配置文件-->
<property name="mapperLocations" value="com/xuan/mapper/UserMapper.xml"/>
<!--起别名-->
<property name="typeAliases" value="com.xuan.pojo.User"/>
</bean>
第三步:SqlSessionFactory又关联到DataSource数据源,所以我们也需要将DataSource注入到spring中
- 这里用的是Spring的数据源
- 与此同时可以删除mybatis主配置文件的数据源
<!--用spring的数据源配置mybatis的配置-->
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="com.mysql.cj.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/mybatis?useSSL=true&useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC"/>
<property name="username" value="root"/>
<property name="password" value="root"/>
</bean>
第四步:有了SqlSessionFactory,我们可以用它创建功能几乎与SqlSession相等的SqlSessionTemplate
- 由于该类没有set注入所以我们需要通过构造方法注入来创建sqlSessionTemplate对象并加入到springIOC容器中
<!--SqlSessionTemplate等价于我们使用的SqlSession-->
<!--由于没有set注入 所以我们使用构造方法注入-->
<bean id="sqlSessionTemplate" class="org.mybatis.spring.SqlSessionTemplate">
<constructor-arg name="sqlSessionFactory" ref="sqlSessionFactory"/>
</bean>
第五步:编写UserMapper的实现类以将UserMapper实现类对象注入SpringIOC获得SqlSessionTemplate来执行方法
- 通过set方法将SqlSessionTemplate注入进来
- 调用SqlSessionTemplate参数执行方法
package com.xuan.mapper;
import com.xuan.pojo.User;
import org.mybatis.spring.SqlSessionTemplate;
import java.util.List;
/**
* xuan
* 2020/7/16
* 1870136088@qq.com
**/
public class UserMapperImpl implements UserMapper{
private SqlSessionTemplate sqlSessionTemplate;
public void setSqlSessionTemplate(SqlSessionTemplate sqlSessionTemplate) {
this.sqlSessionTemplate = sqlSessionTemplate;
}
@Override
public List<User> findAll() throws Exception {
UserMapper mapper = sqlSessionTemplate.getMapper(UserMapper.class);
return mapper.findAll();
}
@Override
public User findById(Integer id) throws Exception {
return null;
}
}
第六步:将UserMapperImpl注入到springIOC容器中
<!--编写实现类将SqlSessionTemplate注入-->
<bean id="userMapperImpl" class="com.xuan.mapper.UserMapperImpl">
<property name="sqlSessionTemplate" ref="sqlSessionTemplate"/>
</bean>
第七步:编写测试
public class UserMapperTest2 {
@Test
public void testFindAll() throws Exception {
ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
UserMapper users = context.getBean( "userMapperImpl",UserMapperImpl.class);
for (User user : users.findAll()) {
System.out.println(user);
}
}
}
-------------------------------测试成功----------------------------------
Spring整合Mybatis方法二
-
关键类:
SqlSessionDaoSupport
-
SqlSessionDaoSupport
是一个抽象的支持类,用来为你提供SqlSession
。调用getSqlSession()
方法你会得到一个SqlSessionTemplate
,之后可以用于执行 SQL 方法
代码实现:
package com.xuan.mapper;
import com.xuan.pojo.User;
import org.apache.ibatis.session.SqlSession;
import org.mybatis.spring.SqlSessionTemplate;
import org.mybatis.spring.support.SqlSessionDaoSupport;
import java.util.List;
public class UserMapperImpl2 extends SqlSessionDaoSupport implements UserMapper{
@Override
public List<User> findAll() throws Exception {
UserMapper mapper = getSqlSession().getMapper(UserMapper.class);
return mapper.findAll();
}
}
关键配置:
<bean id="userMapperImpl2" class="com.xuan.mapper.UserMapperImpl2">
<property name="sqlSessionFactory" ref="sqlSessionFactory"/>
</bean>