<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.2</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.47</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>5.1.10.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>5.1.10.RELEASE</version>
</dependency>
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
<version>1.9.4</version>
</dependency>
<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.18</version>
</dependency>
DROP TABLE IF EXISTS `user`;
CREATE TABLE `user` (
`id` bigint(20) NOT NULL COMMENT ‘主键ID‘,
`name` varchar(30) DEFAULT NULL COMMENT ‘姓名‘,
`age` int(11) DEFAULT NULL COMMENT ‘年龄‘,
`email` varchar(50) DEFAULT NULL COMMENT ‘邮箱‘,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
insert into `user`(`id`,`name`,`age`,`email`) values
(1,‘Jone‘,18,‘test1@baomidou.com‘),
(2,‘Jack‘,20,‘test2@baomidou.com‘),
(3,‘Tom‘,28,‘test3@baomidou.com‘),
(4,‘Sandy‘,21,‘test4@baomidou.com‘),
(5,‘Billie‘,24,‘test5@baomidou.com‘),
@Data
public class User {
private Long id;
private String name;
private int age;
private String email;
}
public interface UserMapper {
public List<User> selectAllUser();
}
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.mlyr.dao.UserMapper">
<select id="selectAllUser" resultType="user">
select * from user
</select>
</mapper>
public class UserMapperImpl implements UserMapper{
//等价于MyBatis中的SqlSession,它在底层实现了它
private SqlSessionTemplate sqlSession;
//利用spring容器set方法注入SqlSessionTemplate
public void setSqlSession(SqlSessionTemplate sqlSession) {
this.sqlSession = sqlSession;
}
@Override
public List<User> selectAllUser() {
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
return mapper.selectAllUser();
}
}
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd">
<!--配置数据源:数据源有非常多,可以使用第三方的,也可使使用Spring的-->
<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/test?useSSL=true&useUnicode=true&characterEncoding=utf8"/>
<property name="username" value="root"/>
<property name="password" value="root"/>
</bean>
<!--配置SqlSessionFactory-->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource"/>
<!--关联Mybatis配置文件-->
<property name="configLocation" value="classpath:mybatis-config.xml"/>
<!--这会从类路径下加载所有在com/mlyr/dao/包和它的子包中的 MyBatis 映射器 XML 配置文件-->
<property name="mapperLocations" value="classpath:com/mlyr/dao/*.xml"/>
</bean>
<!--注册sqlSessionTemplate , 关联sqlSessionFactory-->
<bean id="sqlSession" class="org.mybatis.spring.SqlSessionTemplate">
<!--利用构造器注入-->
<constructor-arg index="0" ref="sqlSessionFactory"/>
</bean>
<!--生成Bean,注入sqlSession-->
<bean id="userMapper" class="com.mlyr.dao.UserMapperImpl">
<property name="sqlSession" ref="sqlSession"/>
</bean>
</beans>
当然还能有mybatis的全局配置文件,他其中的所有配置,spring都能整合
<?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>
<typeAliases>
<package name="com.mlyr.pojo"/>
</typeAliases>
</configuration>
@Test
public void test1(){
ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
UserMapper userMapper = (UserMapper) context.getBean("userMapper");
List<User> list = userMapper.selectAllUser();
for (User user : list) {
System.out.println(user);
}
}
第一种方式是Spring容器通过SqlSessionFactoryBean获取到sqlSessionFactory工厂,再通过工厂获取到SqlSessionTemplate(其实与MyBatis中的SqlSession大致相同),在将SqlSessionTemplate注入进Mapper接口的实现类中,就可以了。这种方式的缺点就是还要手动编写实现类
在第一种方式上进行修改
第一种方式中的第三步,修改接口实现类
public class UserMapperImpl extends SqlSessionDaoSupport implements UserMapper{
//SqlSessionDaoSupport里面就有sqlSessionTemplate
@Override
public List<User> selectAllUser() {
UserMapper mapper = getSqlSession().getMapper(UserMapper.class);
return mapper.selectAllUser();
}
}
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd">
<!--配置数据源:数据源有非常多,可以使用第三方的,也可使使用Spring的-->
<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/test?useSSL=true&useUnicode=true&characterEncoding=utf8"/>
<property name="username" value="root"/>
<property name="password" value="root"/>
</bean>
<!--配置SqlSessionFactory-->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource"/>
<!--关联Mybatis配置文件-->
<property name="configLocation" value="classpath:mybatis-config.xml"/>
<!--这会从类路径下加载所有在com/mlyr/dao/包和它的子包中的 MyBatis 映射器 XML 配置文件-->
<property name="mapperLocations" value="classpath:com/mlyr/dao/*.xml"/>
</bean>
<!--spring管理接口实现类即可-->
<bean id="userMapper" class="com.mlyr.dao.UserMapperImpl">
<property name="sqlSessionFactory" ref="sqlSessionFactory"/>
</bean>
第三种方式就牛逼了,和上面的相同,只需要改变两个地方即可!
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd">
<!--配置数据源:数据源有非常多,可以使用第三方的,也可使使用Spring的-->
<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/test?useSSL=true&useUnicode=true&characterEncoding=utf8"/>
<property name="username" value="root"/>
<property name="password" value="root"/>
</bean>
<!--配置SqlSessionFactory-->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource"/>
<!--关联Mybatis配置文件-->
<property name="configLocation" value="classpath:mybatis-config.xml"/>
</bean>
<!--直接生成Mapper对象-->
<bean id="userMapper" class="org.mybatis.spring.mapper.MapperFactoryBean">
<!--指定要映射的mapper接口的全限定名-->
<property name="mapperInterface" value="com.mlyr.dao.UserMapper"/>
<!--注入sqlSession工厂-->
<property name="sqlSessionFactory" ref="sqlSessionFactory"/>
</bean>
</beans>
第四种更牛逼,第二种的话,只能生成一个mapper对象,这个能批量生成!
<!--批量生成mapper对象-->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<!--注入sqlSession工厂-->
<property name="sqlSessionFactory" ref="sqlSessionFactory"/>
<!--扫描mapper接口所在的包-->
<property name="basePackage" value="com.mlyr.dao"/>
</bean>
使用mybatis进行数据处理的四种方式
①SqlSessionTemplate②SqlSessionDaoSupport③MapperFactoryBean④MapperScannerConfigurer
①SqlSessionTemplate:这个需要写配置文件,在实现类中注入sqlsession,再使用sqlsession,是细颗粒控制(非接口开发)
②SqlSessionDaoSupport(存在与比较老的jar包中):这个只需要在实现类中继承特殊类(例如HibernateDaoSupport)
就可以使用sqlsession(非接口方式开发)
③MapperFactoryBean:这个要写配置文件,把对应的所有接口在配置文件中引用即可,无需写实现类,需要手动注入(动态代理开发)
④MapperScannerConfigurer:这个要写配置文件,只要给出接口所在的包即可,会自动把包中的接口引入,
无需写实现类,使用注解扫描的方式@Autowired(动态代理)
在SpringMVC中,你可以不必为每一个DAO都去写相应的实现,而交给SpringMVC替你创建。
为了代替手工使用 SqlSessionDaoSupport 或 SqlSessionTemplate 编写数据访问对象 (DAO)的代码,MyBatis-Spring 提供了一个动态代理的实现:MapperFactoryBean。这个类可以让你直接注入数据映射器接口到你的 service 层 bean 中。当使用映射器时,你仅仅如调 用你的 DAO 一样调用它们就可以了,但是你不需要编写任何 DAO 实现的代码,因为 MyBatis-Spring 将会为你创建代理。
原文:https://www.cnblogs.com/MLYR/p/14433765.html