Spring和Mybatis整合
9. Spring和Mybatis整合
9.1 创建工程
新建工程,导入所需jar包:
<dependencies><!-- mybatis核心包 --><dependency><groupId>org.mybatis</groupId><artifactId>mybatis</artifactId><version>3.4.1</version></dependency><!-- mysql驱动包 --><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>5.1.29</version></dependency><!-- junit测试包 --><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.12</version></dependency><!--日志包--><dependency><groupId>org.slf4j</groupId><artifactId>slf4j-log4j12</artifactId><version>1.6.1</version></dependency><dependency><groupId>org.slf4j</groupId><artifactId>slf4j-api</artifactId><version>1.6.1</version></dependency><!--spring数据库--><dependency><groupId>org.springframework</groupId><artifactId>spring-jdbc</artifactId><version>4.3.11.RELEASE</version></dependency><!--aop--><dependency><groupId>org.springframework</groupId><artifactId>spring-aspects</artifactId><version>4.3.11.RELEASE</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>4.3.11.RELEASE</version></dependency><!--spring-mybatis整合包--><dependency><groupId>org.mybatis</groupId><artifactId>mybatis-spring</artifactId><version>1.3.1</version></dependency>
<!--spring相关包--><dependency><groupId>org.springframework</groupId><artifactId>spring-webmvc</artifactId><version>4.3.11.RELEASE</version></dependency></dependencies><!--配置资源文件扫描,否则Mapper--><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>
工程完整目录如下:
jdbc.properties文件存放数据库连接信息:
jdbc.driver=com.mysql.jdbc.Driverjdbc.url=jdbc:mysql://localhost:3306/数据库?characterEncoding=utf-8jdbc.username=用户名jdbc.password=密码
log4j日志文件见1.6节
实体类Dept和Employee见1.3
映射文件DeptMapper.xml
<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd"><mapper namespace="com.dao.DeptDAO"><insert id="addDept" parameterType="Dept" keyProperty="id" useGeneratedKeys="true" >insert into DEPT(NAME) values(#{name})</insert></mapper>
接口DeptDAO
package com.dao;
import com.pojo.Dept;
public interface DeptDAO {void addDept(Dept dept);
}
9.2 spring-mybatis整合
在spring与mybatis整合示例中,spring负责管理数据源、加载mybatis配置文件、mybatis的session和事务。
<?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-4.2.xsdhttp://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.2.xsd"><!--spring管理数据源--><context:property-placeholder location="classpath:jdbc.properties" ignore-unresolvable="true"/><bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"><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>
</beans>
mybatis的配置文件中不再写Mapper映射文件的配置:
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE configurationPUBLIC "-//mybatis.org//DTD Config 3.0//EN""http://mybatis.org/dtd/mybatis-3-config.dtd"><configuration><typeAliases><typeAlias type="com.pojo.Dept" alias="Dept"/><typeAlias type="com.pojo.Employee" alias="Employee"/></typeAliases></configuration>
spring中加载mybatis的配置文件
<!--spring管理session工厂--><bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"><property name="dataSource" ref="dataSource"/><property name="mapperLocations" value="classpath:com/dao/mapper/*.xml"/><property name="configLocation" value="classpath:mybatis-config.xml"/></bean>
省略mybatis配置文件的写法:
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"><property name="dataSource" ref="dataSource"/><property name="mapperLocations" value="classpath:dao/*.xml"/><property name="typeAliasesPackage" value="pojo"/><!--<property name="configLocation" value="classpath:mybatis-config.xml"/>--><property name="plugins"><array><bean class="com.github.pagehelper.PageHelper"><property name="properties"><value>dialect=mysqlreasonable=true</value></property></bean></array></property></bean>
9.2.1 dao的基本整合
编写DeptDAO的实现类:
package com.dao.impl;import com.dao.DeptDAO;import com.pojo.Dept;import org.mybatis.spring.support.SqlSessionDaoSupport;public class DeptDAOImpl extends SqlSessionDaoSupport implements DeptDAO{@Overridepublic void addDept(Dept dept) {super.getSqlSession().insert("com.dao.DeptDAO.addDept", dept);}}
DAO继承了spring的SqlSessionDaoSupport,SqlSessionDaoSupport中注入sessionFactory,负责管理session。
声明DeptDAO的bean
<bean id="deptDAO" class="com.dao.impl.DeptDAOImpl"><property name="sqlSessionFactory" ref="sqlSessionFactory"/></bean>
测试代码:
public class SpringTest {ApplicationContext ac = new ClassPathXmlApplicationContext("spring-mybatis.xml");@Testpublic void testDeptDAO() {DeptDAO deptDAO = (DeptDAO) ac.getBean("deptDAO");Dept dept = new Dept();dept.setName("abcdefg");deptDAO.addDept(dept);}
}
9.2.2 面向接口的整合
mybatis的dao可以没有实现类,只写接口,要求对应的Mapper映射文件的namespace是接口的全路径。接口中方法名与sql语句的id一致。
接口EmployeeDAO
package com.dao;
import com.pojo.Employee;
import java.util.List;
/*** 本接口没有实现类*/
public interface EmployeeDAO {List<Employee> getAllDept();
}
映射文件:
映射文件EmployeeMapper.xml
<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd"><!--注意namespace和接口全路径一致-->
<mapper namespace="com.dao.EmployeeDAO"><resultMap id="employeeMap" type="Employee"><id property="id" column="ID"/><result property="name" column="NAME"/><result property="job" column="JOB"/><result property="salary" column="SALARY"/><result property="hireDate" column="HIRE_DATE"/><result property="dept.id" column="DEPT_ID"/><result property="dept.name" column="DEPT_NAME"/></resultMap><!--注意语句的id与接口中的方法名一致--><select id="getAllDept" resultMap="employeeMap">select ID,NAME FROM EMPLOYEE</select></mapper>
spring中配置bean:
<!--面向接口的整合,EmployeeDAO接口没有实现类--><bean id="employeeDAO" class="org.mybatis.spring.mapper.MapperFactoryBean"><property name="mapperInterface" value="com.dao.EmployeeDAO"/><property name="sqlSessionFactory" ref="sqlSessionFactory"/></bean>
测试代码:
@Testpublic void testEmpDAO() {EmployeeDAO dao = (EmployeeDAO) ac.getBean("employeeDAO");List<Employee> list = dao.getAllDept();for (Employee employee : list) {System.out.println(employee.getName());}}
9.2.3 简化配置
Mybatis的接口可以没有实现类,当接口很多的时候,可以统一扫描,不需要每个接口都声明bean:
<!—dao接口包扫描器 --><bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"><property name="basePackage" value="com.dao"/></bean>
注释掉7.2.2中employeeDAO的bean,运行测试代码一样可以成功。
简化:
当DAO的接口和Mapper映射文件在一个文件夹下,且命名一致的时候:
映射文件和接口的命名一样,只是 文件拓展名不同,配置了上面的MapperScannerConfigurer后,可以省略sqlSessionFactory中配置文件的路径:
<!--spring管理session工厂--><bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"><property name="dataSource" ref="dataSource"/><!--如果映射文件和接口在一个包下,并且命名一致,可以不写这句--><!--<property name="mapperLocations" value="classpath:com/dao/mapper/*.xml"/>--><property name="configLocation" value="classpath:mybatis-config.xml"/>
<property name="plugins"><array><bean class="com.github.pagehelper.PageHelper"><property name="properties"><value>dialect=mysqlreasonable=true</value></property></bean></array></property></bean>
Spring和Mybatis整合相关推荐
- java元婴期(26)----java进阶(mybatis(5)---spring和mybatis整合(重点)逆向工程(会用))
spring和mybatis整合 1.整合思路 需要spring通过单例方式管理SqlSessionFactory. spring和mybatis整合生成代理对象,使用SqlSessionFactor ...
- Spring+SpringMVC +MyBatis整合配置文件案例66666
Spring+SpringMVC +MyBatis整合配置文件案例 标签: springspringmvcmybatismvcjava 2017-04-13 19:12 228人阅读 评论(1) 收藏 ...
- spring和mybatis整合:使用xml方式
文章目录 spring和mybatis整合:使用xml方式 1. 创建数据库 2. 创建工程,pom.xml文件如下: 3. 依赖下载地址如下: 4. 配置mybatis的全局配置,在resource ...
- (八)Spring与MyBatis整合
持久层 目录 Mybatis 开发步骤回顾 Mybatis 开发中存在的问题 Spring 与 Mybatis 整合思路 Spring 与 Mybatis 整合的开发步骤 Spring 与 Mybat ...
- Spring boot Mybatis 整合(注解版)
之前写过一篇关于springboot 与 mybatis整合的博文,使用了一段时间spring-data-jpa,发现那种方式真的是太爽了,mybatis的xml的映射配置总觉得有点麻烦.接口定义和映 ...
- Spring boot Mybatis 整合(完整版)
Spring boot Mybatis 整合(完整版) 更多干货 SpringBoot系列目录 正题 本项目使用的环境: 开发工具:Intellij IDEA 2017.1.3 springboot: ...
- 【Spring 持久层】Spring 与 Mybatis 整合
持久层 持久层整合总述 Mybatis 开发步骤回顾 Mybatis 开发中存在的问题 Spring 与 Mybatis 整合思路 Spring 与 Mybatis 整合的开发步骤 Spring 与 ...
- SpringMvc、Spring和Mybatis整合(SSM框架整合)
SpringMvc.Spring和Mybatis整合 就是我们通常的SSM整合. 先创建一个web的Maven项目. 1.SpringMvc环境搭建 1.1 导入SpringMvc所需要的依赖 在项目 ...
- Spring、Mybatis整合Service优化思路,DAO层、Service层最终编码以及log4j日志的使用
5. Spring.Mybatis整合Service层事务控制优化思路分析 # spring中处理事务的两种方式1. 编程式事务处理定义:通过在业务层中注入事务管理器对象,然后通过编码的方式进行事务控 ...
最新文章
- numpy meshgrid用法
- 《深入理解Spark:核心思想与源码分析》——第1章环境准备
- [转载] 对称加密与非对称加密
- 三种sqrt函数实现
- 洛谷——P1090 合并果子
- 本地计算机绑定域名访问
- ssm使用全注解实现增删改查案例——Dept
- Elastic Stack 安装
- 第一章:x264视频制作meGUI工具下载
- 课时47:魔法方法:定制序列
- java web相对路径_java(Web)中相对路径,绝对路径问题总结
- 如何清除 Linux 命令行历史记录
- Docker安装最新版MySQL5.7(mysql-5.7.40)教程(参考Docker Hub)
- 用久的苹果电脑是闲置回收还是维修
- foxmail皮肤_七大改变!Foxmail 6.5新功能体验
- 【非原创】完全用Linux工作(下)(r4笔记第86天)
- oracle会计软件技巧,财务软件输入凭证的五大技巧,太实用了!
- 信息学奥赛一本通高手训练1679:子集
- CSDN的C1考试,质数问题,一不小心就错失得分
- 基于HTML5的在线地图 - 加载TopoJSON数据
热门文章
- ubuntu下使用ppa安装codeblocks集成开发环境
- Android 性能测试初探(一)
- 大型网站的数据库分割问题。
- ListView与Button共存问题
- Javascript面向对象编程(一):对象的产生
- 当子元素用position:relative;时,父元素的overflow:hidden;在ie中失效的解决办法
- Linux基础(3)--搭建最小的Linux系统
- os.path.join()函数用法
- Judge Complex(判断-复杂)
- Asynchronous(异步处理-Promise)