整合mybatis
步骤!
- 导入相关jar包
- junit
- mybatis
- mysql
- spring
- aop织入
- mybatis-spring
- 编写配置文件
- 测试
官方文档 http://mybatis.org/spring/zh/getting-started.html
1、第一种方法!
-
导入第三方依赖包
<dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.7</version> <scope>test</scope> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>8.0.16</version> </dependency> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.4.2</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>5.2.2.RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-jdbc</artifactId> <version>5.2.2.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.4</version> <scope>provided</scope> </dependency> </dependencies> <!-- 解决maven静态资源的过滤 --> <build> <resources> <resource> <directory>src/main/java/</directory> <includes> <include>**/*.xml</include> </includes> <filtering>true</filtering> </resource> </resources> </build>
-
创建类
@Data public class Cars { private int id; private String name; private String phone; private Date out_date; }
-
创建方法接口
public interface CarsMapper { List<Cars> getInfo(); }
-
操作 CarsMapper.xml
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="com.tian.mapper.CarsMapper"> <select id="getInfo" resultType="cars"> select * from cars </select> </mapper>
-
创建配置文件 spring-dao.xml
<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 http://www.springframework.org/schema/beans/spring-beans.xsd"> </beans>
5.1 引入DataCource数据源!
<!-- DataSource:使用spring的数据源替换mybatis的配置 用spring的jdbc 前提,引入依赖 spring-jdbc --> <bean id="datacource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"> <property name="driverClassName" value="com.mysql.cj.jdbc.Driver"/> <property name="url" value="jdbc:mysql://localhost:3306/mybatis_db?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=Asia/Shanghai"/> <property name="username" value="****"/> <property name="password" value="****"/> </bean>
这一步骤下来就省略了我们mybatis-config.xml中的这些都可以省去
<environments default="development"> <environment id="development"> <transactionManager type="JDBC"/> <dataSource type="POOLED"> <property name="driver" value="com.mysql.cj.jdbc.Driver"/> <property name="url" value="jdbc:mysql://localhost:3306/stu?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=Asia/Shanghai"/> <property name="username" value="****"/> <property name="password" value="****"/> </dataSource> </environment> </environments>
5.2 获取SqlSessionFactory【重要】
<!-- SqlSessionFactory --> <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> <property name="dataSource" ref="datacource"/> <!-- 绑定mybatis配置文件 --> <!-- 这个时候可以完全不要mybatis-config.xml文件 --> <property name="configLocation" value="classpath:mybatis-config.xml"/> <property name="mapperLocations" value="classpath:com/tian/mapper/**/*.xml"/> </bean>
这一步骤下来就省略了我们mybatis-config.xml中的这些都可以省去
<mappers> <mapper class="com.tian.mybatis.dao.CarsMapper"/> </mappers>
5.3 创建接口实现类
public class CarsMapperImpl implements CarsMapper { private SqlSessionTemplate sqlSessionTemplate; public void setSqlSessionTemplate(SqlSessionTemplate sqlSessionTemplate) { this.sqlSessionTemplate = sqlSessionTemplate; } public List<Cars> getInfo() { return sqlSessionTemplate.getMapper(CarsMapper.class).getInfo(); } }
5.4 注入sqlSession,【重要】
<!-- SqlSessionTemplate就是sqlSession --> <bean id="sqlSession" class="org.mybatis.spring.SqlSessionTemplate"> <!-- 只能使用构造器注入,因为源码没有set方法 --> <constructor-arg index="0" ref="sqlSessionFactory"/> </bean>
5.5 spring-dao.xml 文件全部内容
<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 http://www.springframework.org/schema/beans/spring-beans.xsd"> <!-- DataSource:使用spring的数据源替换mybatis的配置 用spring的jdbc 前提,引入依赖 spring-jdbc --> <bean id="datacource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"> <property name="driverClassName" value="com.mysql.cj.jdbc.Driver"/> <property name="url" value="jdbc:mysql://localhost:3306/mybatis_db?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=Asia/Shanghai"/> <property name="username" value="root"/> <property name="password" value="tianyu22"/> </bean> <!-- SqlSessionFactory --> <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> <property name="dataSource" ref="datacource"/> <!-- 绑定mybatis配置文件 --> <!-- 这个时候可以完全不要mybatis-config.xml文件 --> <property name="configLocation" value="classpath:mybatis-config.xml"/> <property name="mapperLocations" value="classpath:com/tian/mapper/**/*.xml"/> </bean> <!-- SqlSessionTemplate就是sqlSession --> <bean id="sqlSession" class="org.mybatis.spring.SqlSessionTemplate"> <!-- 只能使用构造器注入,因为源码没有set方法 --> <constructor-arg index="0" ref="sqlSessionFactory"/> </bean> </beans>
6 创建applicationContext.xml 总文件 ,导入spring-dao.xml文件
<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 http://www.springframework.org/schema/beans/spring-beans.xsd"> <import resource="spring-dao.xml"/> <bean id="userImpl" class="com.tian.mapper.CarsMapperImpl"> <property name="sqlSessionTemplate" ref="sqlSession"/> </bean> </beans>
7 测试!
public class MyTest { @Test public void getInfo() throws IOException { ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml"); CarsMapper userImpl = context.getBean("userImpl", CarsMapper.class); System.out.println(userImpl.getInfo()); } }
8 结果!
[Cars(id=1, name=玛莎拉肚, phone=13611111111, out_date=Fri Apr 02 19:54:40 CST 2021)]
我们可以在代码中发现,没有任何一点mybatis的代码,而原来的mybatis配置文件就只剩下了别名管理和设置(日志系统)!
<?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.tian.pojo"/>
</typeAliases>
<!-- 设置 -->
<!-- <settings>
<setting name="logImpl" value="LOG4J"/>
</settings>-->
</configuration>
2、第二种方法
只需要把第一种的步骤5.3和6改一下即可!
5.3 不用我们来获取sqlSession,由集成的类拿
public class CarsMapper2Impl extends SqlSessionDaoSupport implements CarsMapper {
public List<Cars> getInfo() {
return getSqlSession().getMapper(CarsMapper.class).getInfo();
}
}
6.第二种进一步封装!
<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
http://www.springframework.org/schema/beans/spring-beans.xsd">
<import resource="spring-dao.xml"/>
<bean id="user2Impl" class="com.tian.mapper.CarsMapper2Impl">
<property name="sqlSessionFactory" ref="sqlSessionFactory"/>
</bean>
</beans>