Java--Spring和MyBatis集成
Posted MinggeQingchun
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java--Spring和MyBatis集成相关的知识,希望对你有一定的参考价值。
Spring集成Mybatis主要使用的spring的IOC技术
创建项目步骤:
1、新建普通的maven项目
2、加入maven的依赖
(1)spring依赖
(2)mybatis依赖
(3)mysql驱动
(4)spring的事务依赖
(5)mybatis和spring集成依赖
<dependencies>
<!-- 单元测试依赖 -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
<scope>test</scope>
</dependency>
<!--spring依赖 核心IoC-->
<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>
<!-- spring和mybatis集成依赖 -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>2.0.1</version>
</dependency>
<!-- mysql驱动 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.9</version>
</dependency>
<!-- 阿里数据库连接池Druid -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.2.6</version>
</dependency>
</dependencies>
3、创建实体类(使用mysql数据库建一张User用户表)
4、创建dao接口和mapper文件
UserDao.java
public interface UserDao
/**
* 插入一条user记录
* @param user
* @return
*/
int insertUser(User user);
/**
* 查询所有用户
* @param user
* @return
*/
List<User> selectUsers(User user);
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.mycompany.dao.UserDao">
<insert id="insertUser">
insert into user values(#userId,#userName,#email,#age)
</insert>
<select id="selectUsers" resultType="User">
select user_id,user_name,email,age
from user
order by user_id desc
</select>
</mapper>
5、创建mybatis主配置文件 mybatis-config.xml
(1)主配置文件中不再需要数据源的配置了;数据源要交给 Spring 容器管理
(2) mapper 映射文件的注册,使用<package/>标签,即只需给出 mapper 映射文件所在的包即可
<?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:控制mybatis全局行为 -->
<settings>
<!-- 设置mybatis输出日志 -->
<setting name="logImpl" value="STDOUT_LOGGING"/>
</settings>
<!-- 定义别名 -->
<typeAliases>
<!-- 第一种方式
指定一个类型为一个自定义别名
type:自定义类型的全限定名称
alias:别名
-->
<!-- <typeAlias type="com.mycompany.domain.User" alias="user" />-->
<!-- 第二种方式
<package>
name:包名,这个包中所有的类,类名就是别名(不区分大小写)
-->
<package name="com.mycompany.domain" />
</typeAliases>
<!--
数据源DataSource 放在spring配置文件中
-->
<!--<environments default="development">
<environment id="online">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/onlinedb"/>
<property name="username" value="root"/>
<property name="password" value="admin123456"/>
</dataSource>
</environment>
</environments>-->
<!-- sql mapper(SQL映射文件)的位置 -->
<mappers>
<!-- 第一种方式:指定多个mapper文件
一个mapper标签指定一个文件位置
从类路径开始(target/classes)
-->
<!-- <mapper resource="com/mycompany/dao/UserDao.xml" />-->
<!-- 第二种方式:使用包名
name:xml(mapper)文件所在的包名,这个包中所有xml文件一次都能加载给mybatis
使用package要求:
(1)mapper文件名称需要和接口名称一样(区分大小写)
(2)mapper文件和dao接口需要在同一目录
-->
<package name="com.mycompany.dao" />
</mappers>
</configuration>
6、创建service接口和实现类,属性是dao
public interface UserService
//插入一条user记录
int insertUser(User user);
//查询所有用户
List<User> selectUsers(User user);
public class UserServiceImpl implements UserService
private UserDao userDao;
public void setUserDao(UserDao userDao)
this.userDao = userDao;
@Override
public int insertUser(User user)
int nums = userDao.insertUser(user);
return nums;
@Override
public List<User> selectUsers(User user)
List<User> userList = userDao.selectUsers(user);
return userList;
7、创建spring的配置文件:声明mybatis对象交给spring创建
(1)数据源DataSource
这里使用阿里的Druid数据库连接池
Druid官网:https://github.com/alibaba/druid
DruidDataSource配置:
https://github.com/alibaba/druid/wiki/DruidDataSource%E9%85%8D%E7%BD%AE
其中Druid通用配置示例:
<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource" init-method="init" destroy-method="close">
<property name="url" value="$jdbc_url" />
<property name="username" value="$jdbc_user" />
<property name="password" value="$jdbc_password" />
<property name="filters" value="stat" />
<property name="maxActive" value="20" />
<property name="initialSize" value="1" />
<property name="maxWait" value="6000" />
<property name="minIdle" value="1" />
<property name="timeBetweenEvictionRunsMillis" value="60000" />
<property name="minEvictableIdleTimeMillis" value="300000" />
<property name="testWhileIdle" value="true" />
<property name="testOnBorrow" value="false" />
<property name="testOnReturn" value="false" />
<property name="poolPreparedStatements" value="true" />
<property name="maxOpenPreparedStatements" value="20" />
<property name="asyncInit" value="true" />
</bean>
在上面的配置中,通常你需要配置url、username、password,maxActive这三项。
Druid会自动跟url识别驱动类名,如果连接的数据库非常见数据库,配置属性driverClassName
<!--
spring加载数据库的属性配置文件
-->
<context:property-placeholder location="classpath:jdbc.properties" />
<!--1、声明数据源DataSource,作用:连接数据库
将mybatis主配置文件 configuration 下的environments 标签内容移到了这里
Druid官网:https://github.com/alibaba/druid
DruidDataSource配置:https://github.com/alibaba/druid/wiki/DruidDataSource%E9%85%8D%E7%BD%AE
-->
<bean id="myDataSource" class="com.alibaba.druid.pool.DruidDataSource"
init-method="init" destroy-method="close">
<!-- set注入给DruidDataSource提供数据库连接信息 -->
<!-- 使用属性配置文件中的数据,语法 $key -->
<property name="url" value="$jdbc.url" />
<property name="username" value="$jdbc.user" />
<property name="password" value="$jdbc.password" />
<property name="maxActive" value="$jdbc.maxActive" />
</bean>
(2)SqlSessionFactory
<!--2、声明mybatis中提供的SqlSessionFactoryBean类 -->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean" >
<!-- set注入,将数据库连接池赋给dataSource属性 -->
<property name="dataSource" ref="myDataSource" />
<!-- mybatis主配置文件位置
configLocation 属性是Resource类型读取配置文件
使用value赋值,指定文件路径,使用 classpath: 表示文件位置
-->
<property name="configLocation" value="classpath:mybatis-config.xml" />
</bean>
(3)Dao对象
Mapper 扫描配置器 MapperScannerConfigurer 会自动生成指定的基本包中 mapper 的代理对象。该 Bean 无需设置 id 属性。basePackage 使用分号或逗号设置多个包
<!--3、创建dao对象,使用SqlSession的getMapper(xxDao.class)
MapperScannerConfigurer:内部调用getMapper()方法生成每个dao接口的代理对象
-->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<!-- 指定SqlSession对象的id -->
<property name="sqlSessionFactoryBeanName" value="sqlSessionFactory" />
<!-- 指定包名,dao接口所在的包名
MapperScannerConfigurer会扫描这个包中的所有接口,把每个接口都执行一次getMapper()方法,
得到每个接口的dao对象
创建好的dao对象放入到spring容器中;dao对象的默认名称是 接口名首字母小写!!!
-->
<property name="basePackage" value="com.mycompany.dao" />
</bean>
(4)声明自定义的service
<!--4、声明service -->
<bean id="userService" class="com.mycompany.service.impl.UserServiceImpl">
<!-- 通过MapperScannerConfigurer 扫描包;dao对象的默认名称是 接口名首字母小写!!! -->
<property name="userDao" ref="userDao" />
</bean>
jdbc.properties;数据库属性配置文件
jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/ssm
jdbc.user=root
jdbc.password=123456
jdbc.maxActive=20
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: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">
<!--
spring加载数据库的属性配置文件
-->
<context:property-placeholder location="classpath:jdbc.properties" />
<!--1、声明数据源DataSource,作用:连接数据库
将mybatis主配置文件 configuration 下的environments 标签内容移到了这里
Druid官网:https://github.com/alibaba/druid
DruidDataSource配置:https://github.com/alibaba/druid/wiki/DruidDataSource%E9%85%8D%E7%BD%AE
-->
<bean id="myDataSource" class="com.alibaba.druid.pool.DruidDataSource"
init-method="init" destroy-method="close">
<!-- set注入给DruidDataSource提供数据库连接信息 -->
<!-- 使用属性配置文件中的数据,语法 $key -->
<property name="url" value="$jdbc.url" />
<property name="username" value="$jdbc.user" />
<property name="password" value="$jdbc.password" />
<property name="maxActive" value="$jdbc.maxActive" />
</bean>
<!--2、声明mybatis中提供的SqlSessionFactoryBean类 -->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean" >
<!-- set注入,将数据库连接池赋给dataSource属性 -->
<property name="dataSource" ref="myDataSource" />
<!-- mybatis主配置文件位置
configLocation 属性是Resource类型读取配置文件
使用value赋值,指定文件路径,使用 classpath: 表示文件位置
-->
<property name="configLocation" value="classpath:mybatis-config.xml" />
</bean>
<!--3、创建dao对象,使用SqlSession的getMapper(xxDao.class)
MapperScannerConfigurer:内部调用getMapper()方法生成每个dao接口的代理对象
-->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<!-- 指定SqlSession对象的id -->
<property name="sqlSessionFactoryBeanName" value="sqlSessionFactory" />
<!-- 指定包名,dao接口所在的包名
MapperScannerConfigurer会扫描这个包中的所有接口,把每个接口都执行一次getMapper()方法,
得到每个接口的dao对象
创建好的dao对象放入到spring容器中;dao对象的默认名称是 接口名首字母小写!!!
-->
<property name="basePackage" value="com.mycompany.dao" />
</bean>
<!--4、声明service -->
<bean id="userService" class="com.mycompany.service.impl.UserServiceImpl">
<!-- 通过MapperScannerConfigurer 扫描包;dao对象的默认名称是 接口名首字母小写!!! -->
<property name="userDao" ref="userDao" />
</bean>
</beans>
8、创建测试类
public class TestSpringMybatis
@Test
public void testSpringMybatis()
String config = "applicationContext.xml";
ApplicationContext ac = new ClassPathXmlApplicationContext(config);
//获取容器中所有对象名
String names[] = ac.getBeanDefinitionNames();
for (String name:names)
System.out.println("容器中对象名称:" + name + " " + ac.getBean(name));
@Test
public void testDaoInsertUser()
String config = "applicationContext.xml";
ApplicationContext ac = new ClassPathXmlApplicationContext(config);
//获取容器中的Dao对象
UserDao userDao = (UserDao) ac.getBean("userDao");
User user = new User();
user.setUserName("admin11");
user.setEmail("admin@123.com");
user.setAge(16);
//spring和mybatis整合在一起使用,事务是自动提交的。 无需执行SqlSession.commit();
int nums = userDao.insertUser(user);
System.out.println("nums=" + nums);
@Test
public void testServiceInsertUser()
String config = "applicationContext.xml";
ApplicationContext ac = new ClassPathXmlApplicationContext(config);
//获取容器中的Dao对象
UserService userService = (UserService) ac.getBean("userService");
User user = new User();
user.setUserName("admin22");
user.setEmail("admin21332@123.com");
user.setAge(28);
int nums = userService.insertUser(user);
System.out.println("nums=" + nums);
@Test
public void testSelect()
String config = "applicationContext.xml";
ApplicationContext ac = new ClassPathXmlApplicationContext(config);
//获取容器中的Dao对象
UserService userService = (UserService) ac.getBean("userService");
List<User> userList = userService.selectUsers(null);
for (User user:userList)
System.out.println("user:" + user);
容器中输出对象
以上是关于Java--Spring和MyBatis集成的主要内容,如果未能解决你的问题,请参考以下文章