MyBatis与Spring整合
前提准备
导入相关整合的包
Maven环境下的
<?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 https://mvnrepository.com/artifact/commons-dbcp/commons-dbcp">
<modelVersion>4.0.0</modelVersion>
<groupId>ch01demo</groupId>
<artifactId>ch01</artifactId>
<version>1.0-SNAPSHOT</version>
<dependencies>
<!--dependency>
<groupId>Maven</groupId>
<artifactId>[the artifact id of the block to be mounted]</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency-->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.15</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
<version>4.1.2.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>4.1.2.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>4.1.2.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-expression</artifactId>
<version>4.1.2.RELEASE </version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.16</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>mybatis-spring</groupId>
<artifactId>mybaits-spring</artifactId>
<version>1.2.0</version>
</dependency>
<dependency>
<groupId>mybatis.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.1</version>
</dependency>
<dependency>
<groupId>mybatis</groupId>
<artifactId>mybatis-sources</artifactId>
<version>3.2.2</version>
</dependency>
<dependency>
<groupId>spring-jdbc</groupId>
<artifactId>spring-jdbc</artifactId>
<version>4.1.2</version>
</dependency>
<dependency>
<groupId>org.spring-tx</groupId>
<artifactId>spring-tx</artifactId>
<version>4.1.2</version>
</dependency>
<dependency>
<groupId>org.commons.commons-dbcp</groupId>
<artifactId>commons-dbcp</artifactId>
<version>1.4</version>
</dependency>
<dependency>
<groupId>org.commons.commons-pool</groupId>
<artifactId>commons-pool</artifactId>
<version>1.6</version>
</dependency>
<dependency>
<groupId>org.commons.commons-logging</groupId>
<artifactId>commons-logging</artifactId>
<version>1.2</version>
</dependency>
<dependency>
<groupId>org.aopalliance</groupId>
<artifactId>aopalliance</artifactId>
<version>1.0</version>
</dependency>
<dependency>
<groupId>org.aspectjweaver</groupId>
<artifactId>aspectjweaver</artifactId>
<version>1.6.9</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
</dependencies>
</project>
手动下载相关的jar包
编写dao层接口类
1.编写UserMapper接口类
package cn.kgc.dao;
import java.util.List;
/**
* @author Hexialin
* @date 2019/7/7
* @miaoshu dao层接口
*/
public interface UserMapper {
public int getCount();
public int add();
}
2.编写接口所对应的Sql映射文件
<?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="cn.kgc.dao.UserMapper">
<insert id="add" parameterType="user">
insert into `user`(userCode,userName,userPassword,gender)
values (#{userCode},#{userName},#{userPassword},#{gender})
</insert>
<select id="getCount" resultType="int">
select count(1) from city
</select>
</mapper>
Service层
Service层接口
package cn.kgc.service;
import cn.kgc.pojo.User;
public interface UserService {
public int getCount();
public boolean addNewUser(User user);
}
Service层实现类
package cn.kgc.service;
import cn.kgc.dao.UserMapper;
import cn.kgc.pojo.User;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;
@Transactional(propagation = Propagation.REQUIRED)//如果有事务,那么加入事务,没有的话新建一个
@Service("userService")//注解为UserServiceImpl注册一个id为userService bean元素
public class UserServiceImpl implements UserService {
//自动类型适配
@Autowired
//userMapper变量使用的是id为 userMapper的 Bean元素为数据源
@Qualifier("userMapper")
private UserMapper userMapper;
public UserMapper getUserMapper() {
return userMapper;
}
public void setUserMapper(UserMapper userMapper) {
this.userMapper = userMapper;
}
public int getCount() {
return userMapper.getCount();
}
/**
* 添加用户
* @param user
* @return boolean
*/
public boolean addNewUser(User user) {
boolean result = false;
if (userMapper.add()==1){
result = true;
}
return result;
}
}
创建实体类
/**
* User实体类
*/
public class User {
private Integer id; // id
private String userCode; // 用户编码
private String userName; // 用户名称
private String userPassword; // 用户密码
private Integer gender; // 性别
private Date birthday; // 出生日期
private String phone; // 电话
private String address; // 地址
private Integer userRole; // 用户角色ID
private Integer createdBy; // 创建者
private Date creationDate; // 创建时间
private Integer modifyBy; // 更新者
private Date modifyDate; // 更新时间
private String userRoleName; // 用户角色名称
...省略get/set方法
}
注入映射器实现(MapperFactoryBean)
-
采用数据映射器(MapperFactoryBean)的方式完成对数据库操作
-
根据Mapper接口获取Mapper对象,它封装了原有的SqlSession.getMapper()功能的实现
myBatis-config.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> <!--打印日志类型设置--> <settings> <setting name="logImpl" value="LOG4J" /> </settings> <!--类别名,默认已类的名字作别名--> <typeAliases> <package name="cn.kgc.pojo"/> </typeAliases> </configuration> 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:aop="http://www.springframework.org/schema/aop" xmlns:context="http://www.springframework.org/schema/context" xmlns:tx="http://www.springframework.org/schema/tx" 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 http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/cache http://www.springframework.org/schema/cache/spring-cache.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd"> <!--数据源--> <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"> <property name="driverClassName" value="com.mysql.jdbc.Driver"/> <property name="url" value="jdbc:mysql://localhost:3306/world?characterEncoding=utf-8"/> <property name="username" value="root"/> <property name="password" value="root"/> </bean> <!--配置SqlSessionFactoryBean,工厂数据源,负责配置数据源与mapper映射关系--> <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> <!--选择数据源--> <property name="dataSource" ref="dataSource"/> <!--读取 Mybatis-config.xml配置文件--> <property name="configLocation" value="mybatis-config.xml"/> <!--映射 Mapper路径,以集合的形式注入值--> <property name="mapperLocations"> <list> <value>classpath:Mapper/UserMapper.xml</value> </list> </property> </bean> <!--使用MapperScannerConfigurer来实现dao层的自动扫描--> <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"> <!--自动扫描包,有注解使用注解,无注解默认以方法名字注册 Bean--> <property name="basePackage" value="cn.kgc.dao"/> </bean> <!--Service层--> <!--扫描注解定义--> <context:component-scan base-package="cn.kgc.service"/> <!--事务管理器--> <bean id="txManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <!--选择事务--> <property name="dataSource" ref="dataSource"/> </bean> <!--使用注解来增强事务--> <tx:annotation-driven transaction-manager="txManager"/> </beans>
测试类
测试类
import cn.kgc.dao.UserMapper;
import cn.kgc.pojo.User;
import cn.kgc.service.UserService;
import org.apache.log4j.Logger;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import java.util.List;
/**
* @author Hexialin
* @date 2019/7/7
* @描述 测试类
*/
public class test {
private Logger logger = Logger.getLogger(test.class);
/**
* 查看数据库数据总数
*/
@Test
public void getCount(){
ApplicationContext context = new
ClassPathXmlApplicationContext("applicationContext.xml");
UserMapper user = (UserMapper) context.getBean("userMapper");
System.out.println(user.getCount());
}
}