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整合 ...
随机推荐
- 配置node低版本支持ES7
由于node的版本为6.*,不升级情况下,能使用ES7的 async await 特性, 在目录下 添加 start.js package.json里添加依赖配置 重新npm install 下载依赖 ...
- CDH6.2的fair-scheduler.xml
<?xml version="1.0" encoding="UTF-8" standalone="yes"?><alloc ...
- [转帖]持久化journalctl日志清空命令查看配置参数详解
持久化journalctl日志清空命令查看配置参数详解 最近 linux上面部署服务 习惯使用systemd 进行处理 这样最大的好处能够 使用journalctl 进行查看日志信息. 今天清理了下 ...
- javascript当中火狐的firebug如何单步调试程序?
[学习笔记] 2)火狐的firebug如何单步调试程序 马克-to-win:火狐中:工具/web 开发者/调试器,开始时没有文件,在浏览器当中点刷新按钮,文件就加载进来了. 文章转载自原文:https ...
- Scala调用Kafka的生产者和消费者Demo,以及一些配置参数整理
kafka简介 Kafka是apache开源的一款用Scala编写的消息队列中间件,具有高吞吐量,低延时等特性. Kafka对消息保存时根据Topic进行归类,发送消息者称为Producer,消息接受 ...
- Zuul 源码的分析
Zuul 就是个网关,过滤所有数据, 和Eureka的区别就是,前者或过滤数据,一般进行权限拦截,后者进行请求的转发,只是链接. Zuul包含了对请求的路由和过滤两个最主要的功能: 使用 注解@Ena ...
- 【转】spring基础:@ResponseBody,PrintWriter用法
理解:很多情况我们需要在controller接收请求然后返回一些message. 1.在springmvc中当返回值是String时,如果不加@ResponseBody的话,返回的字符串就会找这个St ...
- 【C++札记】构造函数与析构函数
构造函数(constructor) 1.构造函数是种特殊的类成员函数,遵循如下规则: a.函数名与类名必须相同. b.没有返回值 例如: class Obj { ... public: Obj() { ...
- Dining(POJ-3281)【最大流】
题目链接:https://vjudge.net/problem/POJ-3281 题意:厨师做了F种菜各一份,D种饮料各一份,另有N头奶牛,每只奶牛只吃特定的菜和饮料,问该厨师最多能满足多少头奶牛? ...
- Python【BeautifulSoup解析和提取网页数据】
[解析数据] 使用浏览器上网,浏览器会把服务器返回来的HTML源代码翻译为我们能看懂的样子 在爬虫中,也要使用能读懂html的工具,才能提取到想要的数据 [提取数据]是指把我们需要的数据从众多数据中挑 ...