????????Spring通过IOC技术,能集成很多的框架,是Spring的一个优势,让开发人员使用其他框架更加方便。Spring像插线板一样,MyBatis框架是插头,可以容易的组合到一起。
一、MyBatis 与 Spring 如何整合?
使用
MyBatis,需创建?
MyBatis 框架中的某些对象,使用这些对象,就能使用
MyBatis提供的功能
1、Dao接口的代理对象
????????定义一个接口后,需要实现它的代理对象,使用SqlSession.getMapper(StudentDao.class),得到Dao的代理对象 |
2、SqlSessionFactory
????????创建SqlSessionFactory对象,才能使用openSession()得到SqlSession对象 |
3、数据源DataSource
????????创建连接数据库的数据源,使用连接池对象代替mybatis自己的PooledDataSource |
二、MyBatis 与 Spring 整合步骤
1 | 使用MySQL数据库,创建学生表student,进行测试 | 2 | 创建Maven项目:spring-mybatis | 3 | 加入Maven依赖:Spring依赖,MyBatis依赖,MySQL驱动,junit依赖,MyBatis-Spring依赖,Spring事务依赖 | 4 | 创建实体类Student,运用lombok创建get和set | 5 | 创建Dao接口和Mapper文件写SQL语句 | 6 | 写MyBatis的主配置文件:mybatis.xml | 7 | 创建Service接口和它的接口实现类 | 8 | 创建Spring的配置文件 1)声明数据源DataSource,使用的阿里的Druid连接池 2)声明SqlSessionFactoryBean类,在这个类内部创建的是SqlSessionFactory对象 3)声明MapperScannerConfiguration类,在内部创建Dao代理对象。放在Spring容器中 4)声明Service对象,把 3)的Dao赋值给Service属性 |
三、MyBatis 与 Spring 整合实现
1、MyQL建student表
2、创建Maven项目
3、pom文件配置
<dependencies>
<!--lomok依赖-->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.12</version>
<scope>provided</scope>
</dependency>
<!--单一测试依赖-->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
<scope>test</scope>
</dependency>
<!--Spring 依赖-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.2.5.RELEASE</version>
</dependency>
<!--Spring事务依赖-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-tx</artifactId>
<version>5.2.5.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>5.2.5.RELEASE</version>
</dependency>
<!--MyBatis依赖-->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.1</version>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>1.3.1</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.9</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.1.12</version>
</dependency>
</dependencies>
<build>
<resources>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.properties</include>
<include>**/*.xml</include>
</includes>
<filtering>true</filtering>
</resource>
</resources>
<plugins>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.1</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
</plugins>
</build>
4、定义实体类 Student
@Data
public class Student {
private Integer id ;
private String name ;
private Integer age ;
}
5、 定义Dao接口和Mapper文件
1)StudentDao接口?
public interface StudentDao {
// 新增一条数据
int insertStudent(Student student);
// 查询所有数据
List<Student> selectStudents();
}
2)定义映射文件StudentDao.xml
在 Dao 接口的包中创建 MyBatis 的映射文件 Mapper,命名与接口名相同,本例为StudentDao.xml。
Mapper中的 namespace 取值也为 Dao 接口的全限定性名
。
注意:要将Mapper文件的Dao接口放在同一包下
<?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">
<!--注意 namespace 后面 跟自己的包路径-->
<mapper namespace="com.dgs.dao.StudentDao">
<insert id="insertStudent">
insert into student (name,age)
values (#{name},#{age});
</insert>
<select id="selectStudents" resultType="com.dgs.entity.Student">
select name ,age from student
</select>
</mapper>
6、编写MyBatis的主配置文件:mybatis.xml
在 resources根目录下定义 MyBatis 的主配置文件,命名为 mybatis.xml。这里有两点需要注意: (1)主配置文件中不再需要数据源的配置了。因为数据源要交给 Spring 容器来管理了。 (2)这里对 mapper 映射文件的注册,使用<package/>标签,即只需给出mapper 映射文件所在的包即可。因为 mapper 的名称与 Dao 接口名相同,可以使用这种简单注册方式。这种方式的好处是,若有多个映射文件,这里的配置也是不用改变的。当然,也可使用原来的<resource/>标签方式。
<?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="STDOUT_LOGGING"/>
</settings>
<!--别名-->
<typeAliases>
<package name="com.dgs.entity"/>
</typeAliases>
<!-- 指定其他mapper文件的位置-->
<mappers>
<package name="com.dgs.dao"/>
</mappers>
</configuration>
7、定义Service接口和实现类
1)创建StudentService接口:
public interface StudentService {
// 新增一条数据
int insertStudent(Student student);
// 查询所有数据
List<Student> selectStudents();
}
2)创建StudentServiceImpl接口实现类
@Service
public class StudentServiceImpl implements StudentService {
@Resource
private StudentDao studentDao;
// 新增一条数据
@Override
public int insertStudent(Student student) {
return studentDao.insertStudent(student);
}
// 查询所有数据
@Override
public List<Student> selectStudents() {
return studentDao.selectStudents();
}
}
8、创建Spring的配置文件
1)数据源的配置
使用 JDBC 模板,首先需要配置好数据源,数据源直接以 Bean 的形式配置在 Spring 配置文件中。根据数据源的不同,其配置方式不同。 Spring 配置文件:使用Druid连接池
?2)注册SqlSessionFactoryBean
3)定义Mapper扫描配置器MapperScannerConfigurer
?
?4)包扫描service,注入接口
?5)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: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 https://www.springframework.org/schema/context/spring-context.xsd">
<!--声明数据源-->
<bean id="myDataSource" class="com.alibaba.druid.pool.DruidDataSource" init-method="init" destroy-method="close">
<property name="url" value="jdbc:mysql://localhost:3306/dgs_study" />
<property name="username" value="root" />
<property name="password" value="" />
</bean>
<!--声明SqlSessionFactory-->
<bean id="factory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="myDataSource" />
<property name="configLocation" value="classpath:mybatis.xml" />
</bean>
<!--声明MapperScannerConfiguration-->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="sqlSessionFactoryBeanName" value="factory"/>
<property name="basePackage" value="com.dgs.dao"/>
</bean>
<context:component-scan base-package="com.dgs.service" />
</beans>
9、Spring和MyBatis整合测试
public class AppTest {
@Test
public void test() {
String config = "applicationContext.xml";
ApplicationContext ctx = new ClassPathXmlApplicationContext(config);
String[] names = ctx.getBeanDefinitionNames();
for (String name : names) {
System.out.println(name);
}
StudentService bean = (StudentService)ctx.getBean("studentServiceImpl");
int i = bean.insertStudent(new Student());
System.out.println(i);
List<Student> students = bean.selectStudents();
System.out.println(students);
}
}
|