文章目录
- 整合思路
- 一、整合需要的jar包?
- 二、整合步骤
- 问题引入
- 1.创建一个名字为spring_mybatis的maven工程
- 2.在pom中把写入需要的jar包
- 3.我们把前面的资源文件都一一复制到新建的项目中的resource包下。
- 4.把第一天Mybatis学习的代码放入本次项目的com包里面
- 5.开启注解驱动
- 6.配置SqlMapperConfig.xml文件包
- 三、编写测试类命名Demo
- 总结
整合思路
- SqlSessionFactory对象应该放到spring容器中作为单例存在。
- 传统dao开发方式中,应该从spring容器中获得sqlSession对象。
- Mapper代理形式中,应该从spring容器中直接获得sqlSession对象。
- 数据库的连接以及数据库连接池事务管理都交给spring容器来完成。
一、整合需要的jar包?
- spring的jar包
- Mybatis的jar包
- Spring+Mybatis的jar包
- Mysql的数据库驱动jar包
- 数据库连接池的jar包
二、整合步骤
问题引入
如上图所示,我们每次调用一次都会先创建sqlSessi工厂,然后通过工厂取拿配置文件。如果加上spring工厂,就不需要这么做,只需要spring工厂统一管理即可。具体整合过程入下面步骤所示:
1.创建一个名字为spring_mybatis的maven工程
2.在pom中把写入需要的jar包
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.pp</groupId>
<artifactId>spring_mybatis</artifactId>
<version>1.0-SNAPSHOT</version>
<dependencies>
<!--mybatis需要的jar包-->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.1.1</version>
</dependency>
<!--mybatis和spring的整合包-->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>1.2.2</version>
</dependency>
<!--连接池-->
<dependency>
<groupId>commons-dbcp</groupId>
<artifactId>commons-dbcp</artifactId>
<version>1.4</version>
</dependency>
<!--mysql驱动包-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.44</version>
</dependency>
<!--测试的包-->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
</dependency>
<!--spring相关的包-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>4.3.5.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>4.3.5.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aop</artifactId>
<version>4.3.5.RELEASE</version>
</dependency>
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
<version>1.8.9</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>4.3.5.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>4.3.5.RELEASE</version>
</dependency>
</dependencies>
<build>
<resources>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.xml</include>
</includes>
<filtering>true</filtering>
</resource>
<resource>
<directory>src/main/resources</directory>
<includes>
<include>**/*.xml</include>
<include>**/*.properties</include>
</includes>
</resource>
</resources>
</build>
</project>
3.我们把前面的资源文件都一一复制到新建的项目中的resource包下。
- applicationContext.xml文件内容
<?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:p="http://www.springframework.org/schema/p"
xmlns:context="http://www.springframework.org/schema/context"
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/context
http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop.xsd
">
</bean>
- db.properties内容
jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/mybatis?characterEncoding=utf-8
jdbc.username=root
jdbc.password=123
- SqlMapConfig.xml内容
<?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>
4.把第一天Mybatis学习的代码放入本次项目的com包里面
如图,找到mybatisday1代码下的com包,然后复制到我们新建的mybatis_spring项目文件下的src/main/java下面j即可.
注意:这里虽然把东西拿过来了,但不一定用,后期可能还会删除。
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:p="http://www.springframework.org/schema/p"
xmlns:context="http://www.springframework.org/schema/context"
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/context
http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop.xsd
">
<!--注解扫描-->
<context:property-placeholder location="classpath:db.properties"/>
<context:component-scan base-package="com.pp"/>
<!--这里没有使用spring的连接数据库方法,而是使用commons-dbcp包的连接池连接-->
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
<property name="driverClassName" value="${jdbc.driver}" />
<property name="url" value="${jdbc.url}" />
<property name="username" value="${jdbc.username}" />
<property name="password" value="${jdbc.password}" />
</bean>
<!--管理会话工厂-->
<bean id="sessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<!--依赖注入-->
<property name="configLocation" value="classpath:SqlMapConfig.xml"/>
<property name="dataSource" ref="dataSource"/>
</bean>
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="basePackage" value="com.pp.dao"/>
</bean>
</beans>
- 第一个模块 内容是
<context>
里面内容的意思是管理com.pp包下的所有文件,这样的话om.pp包下面的类进行spring注解,都能被这个配置文件所管理。另外 一个是将db.properties文件的内容读取,方便该页面使用。 - 第二个模块 数据库的连接,这里的id值这个
<bean>
名字,class内容是使用类的具体路径,这里使用的是commons-dbcpjar包的数据库连接,destroy-method=close意思是关闭的时候销毁。这个标签的<property>
中的name是连接数据库的各个参数,有driverClassName、url、username、password等,后面的value是通过第一个模块扫描的db.properties文件中取的参数,然后用${参数}传递值到里面。 - 第三个模块 是会话工厂的管理,在mybatis中每次都要创建会话工厂才能使用数据库的数据的读取,在整合后,有mybatis-spring整合包的SqlSessionFactoryBean类管理。这里的
<bean>
id为sessionFactory,class的路径是org.mybatis.spring.SqlSessionFactoryBean。除了创建会话工厂,还需要会话工厂取读取SqlMapConfig.xml的mybatis核心文件内容。所以这里需要依赖注入,在该<bean>
下使用<property>
标签,id为configLocation,value写SqlMapConfig.xml的地址,这里写classpath:SqlMapConfig.xml。同时,这里还需要调用数据库,所以需要将第二个模块的配置也引用过来。所以还需要添加一个property
,id为dataSource,ref填写上面数据库配置时使用的id,这样就可以连接到上面的数据库配置了。 - 第四个模块 用来管理XXXMapper.xml文件的配置,所以这里也是用的mybatis-spring整合包,使用相关的类路径为org.mybatis.spring.mapper.MapperScannerConfigurer。里面的
property
的name写的是basePackage,value写XXXMapper.xml所在的路径,这里是com.pp.dao包下。
6.配置SqlMapperConfig.xml文件包
<?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.pp.pojo"/>
</typeAliases>
<mappers>
<package name="com.pp.dao"/>
</mappers>
</configuration>
- 因为前面数据库连接已经交给了spring管理,所以这里可以把数据库连接的内容全部清楚,但是这里需要一个新的东西,指向实体类所对应的包名。即
<typeAliases>
下面的<package>
中的name写上实体类对应的包名com.pp.pojo。 - 而
<mapper>
里面不需要指向具体的XXXMapper.xml具体文件,只需要给个路径就可以了。这里的<package>
中的name写的是com.pp.dao。
三、编写测试类命名Demo
import java.util.List;
public class Demo {
private ApplicationContext applicationContext;
@Test
@Before
public void setUP(){
applicationContext=new ClassPathXmlApplicationContext("classpath:applicationContext.xml");
}
/* @Test
public void fun(){
UserMapper userMapper = (UserMapper)applicationContext.getBean("userMapper");
User user = userMapper.findUserByid(1);
System.out.println(user);
}*/
- 第一步先加载spring的核心配置文件,所以需要创建一个ApplicationContext对象,然后让该对象读取我们这里的spring核心配置文件applicationContext.xml。setUP()函数的内容就是读取核心配置文件,并且注解了@Test、@Before所以在运行其他测试方法是,这个setUP()方法会优先执行。
- 第二步读取配置文件后,然后利用getBean()方法去UserMapper类,这里需要小写所以为userMapper;这样就通过工厂实例化了一个UserMapper对象,但是这里会返回一个Object对象,所以需要转化成UserMapper类型。
- 第三步:调用该类的下面的方法,最后输出即可。
总结
提示:这里对文章进行总结:
本次主要讲解的是将
- MyBatis学习2之入门案例学习的mybatisday1j进行与spring的整合,整合过程是首先需要把mybatis需要的jar包导入还有spring相关的jar包进行导入,然后就是一个mybatis-spring的整合包,初次之外还需要连接数据库的mysql驱动包以及数据库连接池的包commons-dbcp。
- 在spring的配置文件中,先把数据库连接内容信息文件也就是db.properties文件加载进来,然后就是要加载java文件的包,是该配置文件能够管理项目下的类。
- 对数据库进行连接,为了方便管理数据库连接的操作需要从db.properties中将数据库的信息进行读取出来。
- mybatis操作数据库需要会话工厂,所以spring将会话工厂管理起来,然后去读取mybatis的核心配置文件SqlMapperConfig.xml.
- spring还需要管理XXXMapper.xml配置文件,直接指向该配置文件所在的包路径即可
- SqlMapper.xml文件中,需要
<typeAliases>
指向实体类的包路径,需要<mappers>
指向mapper文件的包路径。