spring5 入门(七)spring整合mybatis
导入对应的依赖包,分别是mybatis-spring整合包,spring-jdbc数据库驱动包
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>5.2.3.RELEASE</version>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>2.0.4</version>
</dependency>
原先mybatis的核心配置文件,mybatis-config.xml可以只保留如下部分,seting配置以及typeAliases类型配置
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<settings>
<setting name="logImpl" value="LOG4J"/>
</settings>
<typeAliases>
<package name="com.hys.pojo"/>
</typeAliases>
</configuration>
对应的mapper.xml仍需要存在
<mapper namespace="com.hys.dao.userMapper">
<select id="select" resultType="user" >
select * from user
</select>
<select id="addUser" parameterType="user" >
insert into user (id,name,passward) values (#{id},#{name},#{passward})
</select>
<select id="delUser" parameterType="int" >
delete from user where id=#{id}
</select>
</mapper>
首先需要配置dao层的方法,以及pojo的实体类:
//pojo实体类
@Data
@AllArgsConstructor
@NoArgsConstructor
public class user {
private int id;
private String name;
private String passward;
}
//dao层类,连接mapper.xml执行对应sql代码
public interface userMapper {
public List<user> select();
public void addUser(user user);
public void delUser(int id);
}
将数据库源获取,SqlSessionFactory,SqlSession 的获取转化成spring的bean注册,其中对应类的名字发生了些许改变,工厂和session分别对应SqlSessionFactoryBean,SqlSessionTemplate
对应的bean.xml如下:请注意红色加粗代码!
<bean id="resource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/school?useUnicode=true&characterEncoding=utf8&useSSL=true"/>
<property name="username" value="root"/>
<property name="password" value="123456"/>
</bean>
<bean id="SqlSessionFactoryBean" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="resource"/>
<!--以下两个xml的导入表示与mybatis建立连接-->
<property name="configLocation" value="mybatis-config.xml"/>
<property name="mapperLocations" value="classpath*:com.hys.dao/*Mapper.xml"/>
</bean>
<bean id="SqlSessionTemplate" class="org.mybatis.spring.SqlSessionTemplate">
<constructor-arg name="sqlSessionFactory" ref="SqlSessionFactoryBean"/>
</bean>
相比之前的sqlseesion获取,现在已经注册完毕,只需要先获取spring的上下文,通过bean获取sqlsession即可,剩下其他过程和之前mybatis一致:获取mapper,在执行对应方法
测试代码如下:
@Test
public void select() throws IOException {
ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
SqlSessionTemplate sqlSessionTemplate = context.getBean("SqlSessionTemplate", SqlSessionTemplate.class);
userMapper mapper = sqlSessionTemplate.getMapper(userMapper.class);
List<user> select = mapper.select();
for (user user : select) {
System.out.println(user);
}
}
这时候需要对代码进行非侵入式修改,也就是AOP,需要对接口有一个具体的实现类,这个dao层的类(连接数据库的类),可以提供给业务层service

这时候就会出现一个问题,每个方法都需要上面测试代码一样,获取配置文件,在获取sqlseesion类,在获取mapper吗?
这样代码就会变得冗余,这时候官方提供了一个更为简单的方法!
首先实现类继承SqlSessionDaoSupport这一个父类,同时在注册实现类的时候,
将这个类SqlSessionFactoryBean 注入进去,对应bean.xml如下:
<bean id="userMapperIml" class="com.hys.dao.userMapperIml">
<property name="sqlSessionFactory" ref="SqlSessionFactoryBean" />
</bean>
实现类如下:直接getSqlSession方法就可以获的sqlsession!
public class userMapperIml extends SqlSessionDaoSupport implements userMapper{
@Override
public List<user> select() {
return getSqlSession().getMapper(userMapper.class).select();
}
@Override
public void addUser(user user) {
getSqlSession().getMapper(userMapper.class).addUser(user);
}
@Override
public void delUser(int id) {
getSqlSession().getMapper(userMapper.class).delUser(id);
}
}

浙公网安备 33010602011771号