Spring与MyBatis集成
- 一、事务
- 二、spring和mybatis的集成(XML方式)
-
- 1. 项目结构
- 2. 导包
- 3. 创建db.properties
- 4. 创建log4j.properties
- 5. 通过MyBatis逆向工程生成User、UserMapper、UserMapper.xml
- 6. 创建mybatis.cfg.xml
- 7. 创建application-dao.xml
- 8. 创建UserService
- 9. 创建UserserviceImpl
- 10. 创建application-service.xml
- 11. 创建UserController
- 12. 创建application-action.xml
- 13. 创建applicationContext.xml
- 14. 测试
- 三、 spring与mybatis集成(注解方式)
- 四、注解方式去掉mybatis.cfg.xml
- 五、在注解方式上新增分页查询
一、事务
1. 事务的分类
- 编程式事务
将事务控制的代码入侵到我们核心对象代码中,如在hibernate 里面配置session beginTreanaction() session.commit() - 声明式事务
只需要在spring 的配置文件中,进行事务声明,声明将哪些方法加入事务环境进行执行。
2. 为什么要使用声明式事务
大多数Spring 用户选择声明式事务管理的原因是,这个是对应用代码影响最小的选择,使用aop特点在某个方法执行前开启事务,结束时提交事务,因此也最符合 非侵入式 轻量级容器的理念
- Spring 声明式事务管理可以在任何环境下使用,只需要更改配置文件,他就可以和JDBC、JDO、Hibernate 或其他的事务机制一起工作。
- Spring 的声明式事务管理可以被应用到任何类(以及那个类的实例)上。
- Spring 提供声明式的回滚规则。
- Spring 允许你通过AOP 定制事务行为。(例如,如果需要,你可以在事务回滚中插入定制行为。你也可以增加任意的通知,就像事务通知一样)。
- Spring 不提供高端应用服务器提供的跨越远程调用的事务上下文传播。如果你需要这些特性,推荐使用EJB。然而,不要轻易使用这些特性,因为通常我们并不希望跨越远程调用。
3. Spring是如何实现声明式事务的
Spring 的事务管理是通过AOP 代理实现的。其中的事务通知由元数据(目前基于XML 或注解)驱动
代理对象与事务元数据结合产生一个AOP代理,它使用一个PlatformTransactionManager 接口配合事务拦截器,在方法调用过后实施事务。
二、spring和mybatis的集成(XML方式)
1. 项目结构
2. 导包
1). spring
2). mybatis
3). mysql
4). pagehelper
5). log4j
3. 创建db.properties
driver=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/springdemo
username=root
password=123456
4. 创建log4j.properties
# Global logging configuration
log4j.rootLogger=DEBUG, stdout
# MyBatis logging configuration...
log4j.logger.org.mybatis.example.BlogMapper=TRACE
# Console output...
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%5p [%t] - %m%n
5. 通过MyBatis逆向工程生成User、UserMapper、UserMapper.xml
1). User
/**
* User
*/
package com.lasing.domain;
import java.util.Date;
public class User {
private Integer id;
private String name;
private String address;
private Date birthday;
public User() {
super();
}
public User(String name, String address, Date birthday) {
super();
this.name = name;
this.address = address;
this.birthday = birthday;
}
public User(Integer id, String name, String address, Date birthday) {
super();
this.id = id;
this.name = name;
this.address = address;
this.birthday = birthday;
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name == null ? null : name.trim();
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address == null ? null : address.trim();
}
public Date getBirthday() {
return birthday;
}
public void setBirthday(Date birthday) {
this.birthday = birthday;
}
public String toString() {
return "User [id=" + id + ", name=" + name + ", address=" + address + ", birthday=" + birthday + "]";
}
}
2). UserMapper
/**
* UserMapper
*/
package com.lasing.mapper;
import java.util.List;
import com.lasing.domain.User;
public interface UserMapper {
int deleteByPrimaryKey(Integer id);
int insert(User record);
int insertSelective(User record);
User selectByPrimaryKey(Integer id);
List<User> selectAll();
int updateByPrimaryKeySelective(User record);
int updateByPrimaryKey(User record);
}
3). UserMapper.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.lasing.mapper.UserMapper" >
<resultMap id="BaseResultMap" type="com.lasing.domain.User" >
<id column="id" property="id" jdbcType="INTEGER" />
<result column="name" property="name" jdbcType="VARCHAR" />
<result column="address" property="address" jdbcType="VARCHAR" />
<result column="birthday" property="birthday" jdbcType