官方文档:http://mybatis.org/spring/zh/factorybean.html
数据库:
一 项目配置pom
- 导入依赖
<!--1.mybatis/2.mysql/3.spring-webmvc/4.spring-jdbc/5.aop织入/6.junit/7.mybatis-spring-->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.7</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.27</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>5.3.12</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>5.3.12</version>
</dependency>
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
<version>1.9.7</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.13.2</version>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>2.0.6</version>
</dependency>
- 打包配置
<build>
<resources>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.xml</include>
</includes>
</resource>
<resource>
<directory>src/main/resources</directory>
<includes>
<include>**/*</include>
</includes>
</resource>
</resources>
</build>
二 .初始化工作
2.1 实体类pojo
User.java
public class User {
private int id;
private String name;
private String pass;
//略get/set
}
2.2 配置接口
1)UserMapper.java
//接口
public interface UserMapper {
public List<User> selectAll();
}
2)UserMapper.xml
<!--配置文件-->
<?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.zheng.mapper.UserMapper">
<select id="selectAll" resultType="user">select * from user</select>
</mapper>
3)UserMapperImpl.java
//接口实现类
public class UserMapperImpl implements UserMapper{
private SqlSessionTemplate sqlSession;
public void setSqlSession(SqlSessionTemplate sqlSession) {
this.sqlSession = sqlSession;
}
public List<User> selectAll() {
return sqlSession.getMapper(UserMapper.class).selectAll();
}
}
2.3 配置文件
1)mybatis-config
<?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 核心配置文件-->
<configuration>
<typeAliases>
<package name="com.zheng.pojo"/>
</typeAliases>
<mappers>
<package name="com.zheng.mapper"/>
</mappers>
</configuration>
2)spring-dao
包括了创建sqlsession,和通过aop配置事务
<?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:aop="http://www.springframework.org/schema/aop"
xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx.xsd">
<!--使用spring管理数据源 DataSource-->
<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/batisdb?useUnicode=true&characterEncoding=utf8&useSSL=false"/>
<property name="username" value="root"/>
<property name="password" value="123"/>
</bean>
<!--SqlSessionFactory 导入数据源,关联mybatis配置文件-->
<bean id="SqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="datasource"/>
<!--绑定Mybatis配置文件-->
<property name="configLocation" value="classpath:mybatis-config.xml"/>
</bean>
<!--sqlSession-->
<bean id="sqlSession" class="org.mybatis.spring.SqlSessionTemplate">
<!--<constructor-arg index="0" ref="SqlSessionFactory"/>-->
<constructor-arg name="sqlSessionFactory" ref="SqlSessionFactory"/>
</bean>
<!--事务配置-->
<bean id="transaction" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<constructor-arg ref="datasource"/>
</bean>
<!--结合aop实现事务织入,指定方法或全部-->
<tx:advice id="txAdvice" transaction-manager="transaction">
<tx:attributes>
<tx:method name="*"/>
</tx:attributes>
</tx:advice>
<!--配置事务切入-->
<aop:config>
<aop:pointcut id="txPointCut" expression="execution(* com.zheng.dao.*.*(..))"/>
<aop:advisor advice-ref="txAdvice" pointcut-ref="txPointCut"/>
</aop:config>
</beans>
3)applicationContext
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
https://www.springframework.org/schema/beans/spring-beans.xsd">
<!--导入连接数据库和sqlSession配置文件-->
<import resource="spring-dao.xml"/>
<!--注解开发:自动扫描包及注解驱动-->
<!--<context:component-scan base-package="com.zheng.pojo"/>-->
<!--<context:annotation-config/>-->
<bean id="selectAll" class="com.zheng.mapper.UserMapperImpl">
<property name="sqlSession" ref="sqlSession"/>
</bean>
</beans>
三.测试
public class MyTest {
@Test
public void test01(){
ApplicationContext contxt = new ClassPathXmlApplicationContext("applicationContext.xml");
UserMapper selectAll = contxt.getBean("selectAll", UserMapper.class);
for (User user : selectAll.selectAll()) {
System.out.println(user);
}
}
}
四.方法Two
在原来的 spring-dao 配置中可不配置 sqlSession,转而使用继承 SqlSessionDaoSupport 的方法
1)新建一个UserMapperImpl2.java
public class UserMapperImpl2 extends SqlSessionDaoSupport implements UserMapper{
public List<User> selectAll() {
//使用getSqlSession()方法直接获取SqlSession
return getSqlSession().getMapper(UserMapper.class).selectAll();
}
}
2)配置它的 bean ,并注入SqlSessionFactory
<bean id="selectAll2" class="com.zheng.mapper.UserMapperImpl2">
<property name="sqlSessionFactory" ref="SqlSessionFactory"/>
</bean>