Spring与MyBatis集成(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
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值