写在前面,参考两个官网文档:
一. 回顾 MyBatis
- 首先,我们先回顾以下 Mybatis:
使用 Mybatis 实现数据库的增删改查、Map和模糊查询 - 其次,我们通过 Spring 整合 Mybatis,使代码更加简便
1)通过 SqlSessionTemplate 整合
2)通过 SqlSessionDaoSupport 整合 (两种方式,实际上大同小异))
二. Spring 整合 Mybatis 方式一
- 通过 Maven 导入 jar 包(poml.xml)
<dependencies>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.47</version>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.2</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>5.1.9.RELEASE</version>
</dependency>
<!-- spring操作数据库的话,还需要一个spring-jdbc -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>5.1.9.RELEASE</version>
</dependency>
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
<version>1.9.4</version>
</dependency>
<!-- mybatis-spring-->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>2.0.2</version>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.12</version>
</dependency>
</dependencies>
<build>
<resources>
<resource>
<directory>src/main/resources</directory>
<includes>
<include>**/*.properties</include>
<include>**/*.xml</include>
</includes>
<filtering>true</filtering>
</resource>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.properties</include>
<include>**/*.xml</include>
</includes>
<filtering>true</filtering>
</resource>
</resources>
</build>
- 定义 数据库 User 实体类
通过导入 lombok 包,注解 @Data 能够自动生成 set()、get() 函数
数据表 User 有三个字段 id、name、pwd
import lombok.Data;
@Data
public class User {
private int id;
private String name;
private String pwd;
}
- 定义 UserMapper 接口类
查询表中所有数据
public interface UserMapper {
// 查询表中所有数据
public List<User> selectUser();
}
- 定义 UserMapperImpl 接口实现类(与之前的不同)
public class UserMapperImpl implements UserMapper{
// 所有操作现在都使用 SqlSessionTemplate
private SqlSessionTemplate sqlSession;
public void setSqlSession(SqlSessionTemplate sqlSession) {
this.sqlSession = sqlSession;
}
@Override
public List<User> selectUser() {
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
return mapper.selectUser();
}
}
- 定义 UserMapper.xml 配置文件
实现接口类 UserMapper 方法
<!-- 接口类 -->
<mapper namespace="com.mapper.UserMapper">
<select id="selectUser" resultType="user">
select * from mybatis.user;
</select>
</mapper>
- 定义 mybatis-config.xml 配置文件
在之前 Mybatis 项目中,可以在 mybatis-config.xml 中配置连接数据库。现在可以把配置连接数据库的操作交给 Spring 管理,具体看 spring-dao.xml.
<!--configuration核心配置文件-->
<configuration>
<typeAliases>
<package name="com.pojo"/>
</typeAliases>
<!-- 连接数据库 -->
<!-- <environments default="development">-->
<!-- <environment id="development">-->
<!-- <transactionManager type="JDBC"/>-->
<!-- <dataSource type="POOLED">-->
<!-- <property name="driver" value="com.mysql.jdbc.Driver"/>-->
<!-- <property name="url" value="jdbc:mysql://localhost:3306/mybatis"/>-->
<!-- <property name="username" value="root"/>-->
<!-- <property name="password" value="Kc635908933"/>-->
<!-- </dataSource>-->
<!-- </environment>-->
<!-- </environments>-->
<!-- <mappers>-->
<!-- <mapper resource="UserMapper.xml"/>-->
<!-- </mappers>-->
</configuration>
- 定义 spring-dao.xml 配置文件 [重 要!]
<!--DataSource-->
<!-- 使用 spring 连接数据库,替换 Mybatis 的配置 -->
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/mybatis?useSSL=false"/>
<property name="username" value="root"/>
<property name="password" value="Kc635908933"/>
</bean>
<!-- 使用 SqlSessionFactoryBean 来创建 SqlSessionFactory -->
<!-- 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="classpath:UserMapper.xml"/>
</bean>
<!-- SqlSession -->
<bean id="sqlSession" class="org.mybatis.spring.SqlSessionTemplate">
<!-- 只能使用构造器注入 sqlSessionFactory,因为它没有 set 方法 -->
<constructor-arg index="0" ref="sqlSessionFactory"/>
</bean>
- applicationContext.xml 配置文件
说明:import 操作将 spring-dao.xml 中的内容导入到 applicationContext.xml 配置文件中。
<import resource="classpath:spring-dao.xml"/>
<bean id="userMapper" class="com.mapper.UserMapperImpl">
<property name="sqlSession" ref="sqlSession"/>
</bean>
- 测试类 MyTest
@Test
public void Test2(){
ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
UserMapper userMapper = context.getBean("userMapper",UserMapper.class);
for(User user : userMapper.selectUser()){
System.out.println(user);
}
}
查询结果如下:
三. Spring 整合 Mybatis 方式二 [进一步整合]
整合方式二 与 方式一 大同小异。
此处仅展示改动那个部分。
- 定义 UserMapperImpl2 接口实现类
public class UserMapperImpl2 extends SqlSessionDaoSupport implements UserMapper {
@Override
public List<User> selectUser() {
SqlSession sqlSession = getSqlSession();
UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
return userMapper.selectUser();
// 进一步整合
// return getSqlSession().getMapper(UserMapper.class).selectUser();
}
}
- applicationContext.xml 配置文件
<import resource="classpath:spring-dao.xml"/>
<bean id="userMapper2" class="com.mapper.UserMapperImpl2">
<property name="sqlSessionFactory" ref="sqlSessionFactory"/>
</bean>
- 测试类 MyTest
// 第三种,进一步整合
@Test
public void Test3(){
ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
UserMapper userMapper = context.getBean("userMapper2",UserMapper.class);
for(User user : userMapper.selectUser()){
System.out.println(user);
}
}
四. 可能出现的错误
javax.net.ssl.SSLException: closing inbound before receiving peer‘s close_notify 的解决办法