Spring整合Mybatis
一、回顾mybatis的编写程序
步骤:
a、导入相关jar包
junit、mybatis、mysql数据库、spring相关的、aop织入、mybatis-spring<dependencies>
<dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.13.2</version> <scope>test</scope> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>8.0.23</version> </dependency> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.5.6</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>5.3.4</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-jdbc</artifactId> <version>5.3.4</version> </dependency> <dependency> <groupId>org.aspectj</groupId> <artifactId>aspectjweaver</artifactId> <version>1.9.6</version> </dependency> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis-spring</artifactId> <version>2.0.6</version> </dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.18</version>
</dependency>
</dependencies>
b、编写配置文件
编写实体类、编写核心配置文件、编写接口、编写Mapper.xml、测试
c、测试
二、Spring整合mybatis第一种方式:
使用:SqlSessionTemplate
1、编写数据源
2、创建sqlSessionFactory
3、sqlSessionTemplate
4、需要给接口加实现类
5、将自己写的实现类,注入到spring当中
6、测试
创建两个xml文件,
1、Spring-dap.xml:用于配置数据源,创建SqlSessionTemplate
<?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" 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"> <!--datasource:使用spring的数据源替换mybatis 这里使用spring提供的jdbc--> <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/Mybatis?userUnicode=true;characterEncode=Utf-8"/> <property name="username" value="root"/> <property name="password" value="123456"/> </bean> <!--sqlsessionFactory--> <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> <property name="dataSource" ref="dataSource"/> <!--绑定mybatis配置文件--> <property name="configLocation" value="classpath:mapper/mybatis-config.xml"/> :mybatis配置文件可以可不要 <property name="mapperLocations" value="classpath:mapper/UserMapper.xml"/> </bean> <!--SqlSessionTemplate :就是我们使用的sqlSession--> <bean id="sqlSession" class="org.mybatis.spring.SqlSessionTemplate"> <!--只能使用构造器注入sqlSessionFactory,因为它没有set方法--> <constructor-arg index="0" ref="sqlSessionFactory"/> </bean> </beans>
2、applicationContext.xml :把接口的实现类注入到spring当中去
<?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" 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"> <import resource="spring-dao.xml"/> <!----> <bean id="userMapper" class="com.zy.dap.UserMapperImpl"> <property name="sqlSession" ref="sqlSession"/> </bean> </beans>
3、实体类 user
package com.zy.pojo; import lombok.Data; @Data public class User { private int id; private String name; private int age; }
4、接口类
UserMapper
package com.zy.dap; import com.zy.pojo.User; import java.util.List; public interface UserMapper { List<User> selectUser(); }
UserMapper.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.zy.dap.UserMapper"> <select id="selectUser" resultType="com.zy.pojo.User"> select * from user; </select> </mapper>
UserMapperImpl
package com.zy.dap; import com.zy.pojo.User; import org.mybatis.spring.SqlSessionTemplate; import java.util.List; public class UserMapperImpl implements UserMapper{ /*原本,我们都使用sqlSession来操作,现在都是使用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(); } }
5、测试
import com.zy.dap.UserMapper; import com.zy.pojo.User; import org.junit.Test; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; import java.util.List; public class MyTest { @Test public void test() { ApplicationContext context=new ClassPathXmlApplicationContext("mapper/applicationContext.xml"); //注意放置xml文件的路径 UserMapper userMapper = context.getBean("userMapper", UserMapper.class); List<User> users = userMapper.selectUser(); for (User user : users) { System.out.println(user); } } }
三、Spring整合mybatis第二种方式:
使用:SqlSessionDaoSupport
有些配置文件和第一种方式是一样的,只是他们的接口实现的方法不同
1、实体类
package com.zy.pojo; import lombok.Data; @Data public class User { private int id; private String name; private int age; }
2、接口、接口实现类
package com.zy.dap; import com.zy.pojo.User; import java.util.List; public interface UserMapper { List<User> selectUser(); }
package com.zy.dap; import com.zy.pojo.User; import org.mybatis.spring.support.SqlSessionDaoSupport; import java.util.List; public class UserMapper1Impl extends SqlSessionDaoSupport implements UserMapper{ @Override public List<User> selectUser() { return getSqlSession().getMapper(UserMapper.class).selectUser(); } }
3、配置文件:在applicationContext添加
<bean id="userMapper1" class="com.zy.dap.UserMapper1Impl"> <property name="sqlSessionFactory" ref="sqlSessionFactory"/> </bean>
4、测试
public void test() { ApplicationContext context=new ClassPathXmlApplicationContext("mapper/applicationContext.xml"); UserMapper userMapper = context.getBean("userMapper1", UserMapper.class); List<User> users = userMapper.selectUser(); for (User user : users) { System.out.println(user); }
正在学习中,有错误的地方,请多多指教!