Mybatis和Spring框架整合
步骤
添加所需的jar包
一、jar包
maven依赖pom.xml
<mybatis.version>3.2.8</mybatis.version>
<spring.version>4.0.2.RELEASE</spring.version>
<!-- c3p0连接池 -->
<dependency>
<groupId>com.mchange</groupId>
<artifactId>c3p0</artifactId>
<version>0.9.5.5</version>
</dependency>
<!-- spring和mybatis整合框架包(如果mybatis版本3.多则整合包不能用2.多,版本不兼容) -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>1.3.1</version>
</dependency>
<!-- spring框架包 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-oxm</artifactId>
<version>${spring.version}</version>
</dependency>
<!-- spring事务 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-tx</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>${spring.version}</version>
</dependency>
<!-- spring-AOP -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aop</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context-support</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-expression</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-orm</artifactId>
<version>${spring.version}</version>
</dependency>
<!-- mybatis框架包 -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>${mybatis.version}</version>
</dependency>
<!--mysql驱动-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.35</version>
</dependency>
<!-- lombok -->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.8</version>
</dependency>
<!-- log4j -->
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.12</version>
</dependency>
二、配置文件
在resource下
1、创建database.properties(jdbc.properties)用于连接数据库
jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://127.0.0.1:端口号/数据库名?useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull&useSSL=false
jdbc.username=数据库用户名
jdbc.password=数据库用户密码
jdbc.maxPoolSize=20 最大连接数(非必须)
2、创建mybatis.xml用于配置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>
<settings>
<!-- 打印日志 STDOUT_LOGGING为输出SQL语句到控制台 -->
<setting name="logImpl" value="STDOUT_LOGGING"/>
</settings>
</configuration>
3、创建整合配置文件spring-mybatis.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: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 http://www.springframework.org/schema/context/spring-context.xsd">
<!-- 读取数据库配置文件jdbc.properties -->
<context:property-placeholder location="classpath:database.properties"/>
<!-- 数据库c3p0连接池 value按properties的key名来 -->
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
<property name="driverClass" value="${jdbc.driver}"/>
<property name="jdbcUrl" value="${jdbc.url}"/>
<property name="user" value="${jdbc.username}"/>
<property name="password" value="${jdbc.password}"/>
<property name="maxPoolSize" value="${jdbc.maxPoolSize}"/>
</bean>
<!-- 配置SqlSessionFactory对象 -->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<!-- 注入数据库连接池 -->
<property name="dataSource" ref="dataSource"/>
<!-- 扫描pojo包 使用别名 -->
<property name="typeAliasesPackage" value="com.XXXXXXXXXXXXXXXXXXX.pojo"/>
<!-- 扫描sql配置文件:mapper需要的xml文件,不要忘记在resource下创建对应mappers文件夹!!! -->
<property name="mapperLocations" value="classpath:mappers/*.xml"/>
<!--读取mybatis主配置文件-->
<property name="configLocation" value="classpath:mybatis.xml"/>
</bean>
<!-- 配置扫描Dao接口包,动态实现Dao接口,注入到spring容器中 -->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<!-- 注入sqlSessionFactory(可写可不写,相当于@Recource注解,有就按名字,名字没有就按数据类型,所以即使不写这个还是能找到) -->
<property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"/>
<!-- 给出需要扫描Dao接口包 -->
<property name="basePackage" value="com.XXXXXXXXXXXXXX.dao"/>
</bean>
<!-- 扫描service包下所有使用注解的类型 -->
<context:component-scan base-package="com.XXXXXXXXXXXX.service"/>
</beans>
tips:XXXXXXXX部分记得改成自己的
至此,配置文件部分完成
三、代码
进行测试
实体类User
@Data
public class User {
private Integer id; //id
private String userCode; //用户编码
private String userName; //用户名称
private String userPassword; //用户密码
}
UserDao接口
/**
* @Author Tuerlechat,
* @Date 2022/11/3
*/
public interface UserDao {
/**
* 根据id查询用户信息
* @param id
* @return
*/
public User findUserById(Integer id);
}
UserDao.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.r.dao.UserDao">
<!--方法名与ID必须一致-->
<!--parameterType 传入参数类型-->
<!--resultType 返回值类型-->
<select id="findUserById" resultType="User">
select * from jntm_user where id = #{id}
</select>
</mapper>
UserService接口
/**
* @Author Tuerlechat,
* @Date 2022/11/3
*/
public interface UserService {
/**
* 根据id查询用户信息
* @param id
* @return
*/
public User findUserById(Integer id);
}
UserServiceImpl实现
/**
* @Author Tuerlechat,
* @Date 2022/11/3
*/
@Service //注解记得写
public class UserServiceImpl implements UserService {
@Autowired
private UserDao userDao;
@Override
public User findUserById(Integer id) {
return userDao.findUserById(id);
}
}
测试类
/**
* @Author Tuerlechat,
* @Date 2022/11/3
*/
public class UserDaoTest extends TestCase {
@Test
public void testFindUserById() {
//读取配置文件
ApplicationContext applicationContext = new ClassPathXmlApplicationContext("spring-mybatis.xml");
//获取Service实现bean
UserService userService = (UserService) applicationContext.getBean("userServiceImpl");
User user = userService.findUserById(17);
System.out.println(user.toString());
}
}
能成功运行就说明整合成功了
整合的本质就相当于把mybatis中的配置都汇合到了spring中