spring-mybatis+spring整合
整合之前回忆一下spring和mybatis分别做了什么:
spring 通过注解/xml配置,实现AOP和DI
DI: 接口实现类中, 将接口私有化,从容器中读取,而不是new一个
UserDao userDao=new UserDaoImpl()
//改写成
private UserDao userDao
IoC:获取类时,从容器中获取
UserDao userDao = new UserDaoImpl();
//改成
UserDao userDao = applicationConfig.getBean("userDao");
AOP:将一些常用的操作,编写成切面,插入到程序中,通过监听实现
Before
After
...
mybatis 通过config.xml mapper.xml ,实体类,serviceImpl,来映射数据库数据,并且通过对实体类的进行serviceImpl的操作,来调用mapper内容,对数据库数据进行操作
class People{
private String name;
....getting/setting/toString;
}
class PeopleService{
private People people;
void addPeople(){
}
}
class PeopleServiceImpl{
private People people;
void addPeople(){
}
....
}
Peoplemapper.xml
insert xxxxxx
config.xml
Peoplemapper.xml
jdbc
....
两者整合起来可以做什么,我还不是很清楚。。。
——————————————————————————————————————
整合
一/,导入mybatis-spring的包
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>2.0.1</version>
</dependency>
二/ 编辑applicationContent.xml,加入sqlSessionFactory
<bean id="sqlSessionFactory" class = "org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref = "dataSource"/>
<property name="configLocation" value="classpath:mybatis-config.xml"/>
</bean>
mybatis-config.xml中environment部分可以注释掉了
<environments default="mysql">
<!-- 配置id为mysql的数据库环境 -->
<environment id = "mysql">
<transactionManager type="JDBC"/>
<dataSource type = "POOLED">
<property name = "driver" value = "${jdbc.driver}"/>
<property name = "url" value = "${jdbc.url}"/>
<property name = "username" value = "${jdbc.username}"/>
<property name = "password" value = "${jdbc.password}"/>
</dataSource>
</environment>
</environments>
三/ 与mybatis方法用的差不多。
原理:创建DAO和DAOIMPL,在daoImpl中注入sqlSessionFactory,创建sqlSession来操作。
提供:mybatis-spring包提供了SqlSessionTemplate和SqlSessionDaoSupport来实现。
具体内容:
1. SqlSessionTemplate:负责当前SqlSession和当前Spring事务时相关的,并管理SqlSession(关闭,提交,回滚)
2. SqlSessionDaoSupport作为DAO的基类来使用,提供方法 getSqlSession()
四/代码实现
Customer,CustomerDao,customerMapper.xml,mybatis-config.xml没变化。
CustomerDaoImpl修改如下
public class CustomerImpl
extends SqlSessionDaoSupport
implements CustomerDao{
public Customer findCustomerById(Integer id){
return this.getSqlSession().selectOne("com.itheima.mapper.CustomerMapper.findCustomerById",id);
}
}
以上代码需要SqlSessionFactory来创建sqlSession,这里通过注入来实现,修改applicationContext.xml
<bean id = "customerDao" class = "com.itheima.dao.impl.CustomerImpl">
<property name="sqlSessionFactory" ref ="sqlSessionFactory"/>
</bean>
以上代码将sqlSessionFactory注入到CustomerImpl中,这里的注入sqlSessionFactory是父类SqlSessionDaoSupport的一个私有属性。
public void setSqlSessionFactory(SqlSessionFactory sqlSessionFactory) {
if (this.sqlSessionTemplate == null || sqlSessionFactory != this.sqlSessionTemplate.getSqlSessionFactory()) {
this.sqlSessionTemplate = createSqlSessionTemplate(sqlSessionFactory);
}
}
(property元素用于调用bean示例中的setter方法,完成属性赋值)
用xml方式整合
原则

去除dao和daoImpl的class
在applicationContext.xml中增加bean
<bean id="customerMapper" class="org.mybatis.spring.mapper.MapperFactoryBean">
<property name="mapperInterface" value="com.itheima.mapper.CustomerMapper" />
<property name="sqlSessionFactory" ref="sqlSessionFactory" />
</bean>
<!--可以自行给bean加property?-->
<bean id="sqlSessionFactory"
class="org.mybatis.spring.SqlSessionFactoryBean">
<!--注入数据源 -->
<property name="dataSource" ref="dataSource" />
<!--指定核心配置文件位置 -->
<property name="configLocation" value="classpath:mybatis-config.xml"/>
</bean>
在mapper.xml同路径下新增mapper.java
package com.itheima.mapper;
import com.itheima.po.Customer;;
public interface CustomerMapper {
public Customer findCustomerById(Integer id);
}
public class DaoTest {
@Test
public void findCustometByIdMapperTest(){
ApplicationContext act = new
ClassPathXmlApplicationContext("applicationContext.xml");
CustomerMapper customerMapper = act.getBean(CustomerMapper.class);
Customer customer = customerMapper.findCustomerById(1);
System.out.print(customer);
}
}
基于MapperScannerConfigurer的整合
不需要编写DaoImpl实现类,不需要添加DaoImpl的bean。
增加一个扫描mapper的路径,直接读
<bean class ="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="basePackage" value="com.itheima.mapper"/>
</bean>
<bean id="sqlSessionFactory"
class="org.mybatis.spring.SqlSessionFactoryBean"> <property name="dataSource" ref="dataSource" /> <property name="configLocation" value="classpath:mybatis-config.xml"/>
</bean>
用mapperScannerConfigurer+事务+service处理数据(比用mapper多一层,用service做一些业务处理)
这边增删改都要用事务(具体是数据库的事务的ACID原则,不多讲)
@Service
@Transactional
public class CustomerServiceImpl implements CustomerService {
//注解注入CustomerMapper
@Autowired
private CustomerMapper customerMapper;
//添加客户
@Override
public void addCustomer(Customer customer) {
this.customerMapper.addCustomer(customer);
int i=1/0; //模拟添加操作后系统突然出现的异常问题
}
}
mapper中增加对应的方法(略)
applicationContext中增加扫描包
<context:component-scan base-package="com.itheima.service" />
spring-mybatis+spring整合的更多相关文章
- struts2 + spring + mybatis 框架整合详细介绍
struts2 + spring + mybatis 框架整合详细介绍 参考地址: https://blog.csdn.net/qq_22028771/article/details/5149898 ...
- SpringMvc+Spring+Mybatis+Maven整合
一.建立数据库表,使用generator自动生成相关代码: /* SQLyog Ultimate v11.24 (32 bit) MySQL - 5.1.62-community : Database ...
- JavaWeb_(SpringMVC框架)测试SpringMVC&Spring&MyBatis三大整合
搭建 SpringMVC&Spring&MyBatis三大整合 传送门 1.准备 测试搭建S pringMVC&Spring&MyBatis三大整合 用例 a)准备 ...
- SSM框架-----------SpringMVC+Spring+Mybatis框架整合详细教程
1.基本概念 1.1.Spring Spring是一个开源框架,Spring是于2003 年兴起的一个轻量级的Java 开发框架,由Rod Johnson 在其著作Expert One-On-One ...
- maven+springmvc+spring+mybatis+velocity整合
一.ssmm简介 ssmm是当下企业最常用的开发框架架构 maven:管理项目jar包,构建项目 spring:IOC容器,事务管理 springmvc:mvc框架 myBatis:持久层框架 v ...
- 1.springMVC+spring+Mybatis的整合思路
SSM整合的过程:就是把一些东西交给spring管理,也就是添加配置文件的一个过程.那么有哪些东西我们要交给spring管理呢?大概有以下几个: 1.数据源(可配置数据库连接池) 2.SqlSessi ...
- 第一章 企业项目开发--maven+springmvc+spring+mybatis+velocity整合
说明:本系列文章主要是对自己在一家大型互联网公司实习的过程中对所学知识的总结!参与的是实际中使用的上线项目. 代码的github地址:https://github.com/zhaojigang/ssm ...
- idea+springmvc+spring+mybatis+maven整合返回json数据webapi
首先看一张目录结构图: : 创建步骤: 1.创建maven webapp工程, 创建完后的目录结构为: 2.添加项目依赖(添加jar包) 需要的jar包: spring-webmvc, spring ...
- Spring+MyBatis+SpringMvc整合Demo
客户关系管理系统demo 项目分析 该demo使用技术及环境:ssm+maven+bootstrap+jsp+mysql+idea+jdk1.8 需求:客户管理,实现客户列表分页显示如下图 项目开始 ...
- spring mybatis springmvc整合
使用SSM(Spring.SpringMVC和Mybatis)已经有三个多月了,项目在技术上已经没有什么难点了,基于现有的技术就可以实现想要的功能,当然肯定有很多可以改进的地方.之前没有记录SSM整合 ...
随机推荐
- 17-js观察者模式
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- 【链接】js监听input输入框内容变化
https://blog.csdn.net/idomyway/article/details/79078625 $("#input1").bind("input prop ...
- hadoop--Unable to load native-hadoop library for your platform解决方法
笔者实验环境:centos 7.4.1708,hadoop-2.6.0-cdh5.14.2. 执行hadoop命令时出现以下告警,不能加载相关库: WARN util.NativeCodeLoader ...
- Linux下的静态库与动态库的生成与调用
静态库与动态库 静态函数库 这类库的名字一般是libxxx.a,xxx为库的名字.利用静态函数库编译成的文件比较大,因为整个函数库的所有数据都会被整合进目标代码中,他的优点就显而易见了,即编译后的执行 ...
- LC 21. Merge Two Sorted Lists
题目描述 Merge two sorted linked lists and return it as a new list. The new list should be made by splic ...
- 1267: 展开字符串(Java)
WUSTOJ 1267: 展开字符串 参考 jamesMusk的博客--Java 判断字符是大写小写或者数字 Description 给三个参数a1,a2,a3和一个字符串,请按以下要求展开该字符 ...
- Ubuntu部署ftp服务器
Ubuntu 16.04 FTP服务器安装及配置 FTP File Transfer Protocol文件传输协议,两台计算机传送文件的协议,客户端可以通过FTP命令从服务器下载,上传文件,修 ...
- IDEA整合Jenkins界面化管理项目构建
版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/WALK_MAN_wubiao/articl ...
- MySQL 多列排序
MySQL 基础篇 三范式 MySQL 军规 MySQL 配置 MySQL 用户管理和权限设置 MySQL 常用函数介绍 MySQL 字段类型介绍 MySQL 多列排序 MySQL 行转列 列转行 M ...
- JSON序列化必看以及序列化工具类
1.要序列化的类必须用 [DataContract] 特性标识 2.需要序列化的属性应用 [DataMember] 特性标识,没有该特性则表示不序列化该属性.类亦如此! 3.可以网络上找封装好 ...