[Spring] 学习Spring Boot之二:整合MyBatis并使用@Trasactional管理事务
一、配置及准备工作
1、在 Maven 的 pom 文件中新增以下依赖:
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>runtime</version>
</dependency>
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>1.3.0</version>
</dependency>
2、在 application.properties 中配置 mysql 的链接信息:
spring.datasource.url=jdbc:mysql://localhost:3306/demo
spring.datasource.username=root
spring.datasource.password=123456
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
3、在数据库中创建 user_info 表:
CREATE TABLE user_info
(
account VARCHAR(20) NOT NULL PRIMARY KEY,
nickname VARCHAR(20) NULL,
phone CHAR(11) NULL,
password CHAR(32) NOT NULL,
email VARCHAR(50) NULL
) ENGINE = InnoDB DEFAULT CHARSET=utf8;
二、使用 mybatis generator 自动生成代码
1、在 Maven 的 pom 文件中添加如下插件:
<plugin>
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator-maven-plugin</artifactId>
<version>1.3.2</version>
<configuration>
<configurationFile>${basedir}/src/main/resources/mybatis-generator.xml</configurationFile>
<overwrite>true</overwrite>
<verbose>true</verbose>
</configuration>
</plugin>
2、将如下 mybatis-generator.xml 配置文件放入到 src/main/resources 目录下:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE generatorConfiguration
PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN"
"http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd">
<generatorConfiguration>
<!-- 数据库驱动:选择你的本地硬盘上面的数据库驱动包-->
<classPathEntry location="/Users/tengyunhao/.m2/repository/mysql/mysql-connector-java/5.1.21/mysql-connector-java-5.1.21.jar"/>
<context id="DB2Tables" targetRuntime="MyBatis3">
<commentGenerator>
<property name="suppressDate" value="false"/>
<!-- 是否去除自动生成的注释 true:是 : false:否 -->
<property name="suppressAllComments" value="false"/>
</commentGenerator>
<!--数据库链接URL,用户名、密码 -->
<jdbcConnection driverClass="com.mysql.jdbc.Driver" connectionURL="jdbc:mysql://localhost/demo" userId="root" password="123456">
</jdbcConnection>
<javaTypeResolver>
<property name="forceBigDecimals" value="false"/>
</javaTypeResolver>
<!-- 生成模型的包名和位置-->
<javaModelGenerator targetPackage="com.tengyunhao.demo.entity" targetProject="src/main/java">
<property name="enableSubPackages" value="true"/>
<property name="trimStrings" value="true"/>
</javaModelGenerator>
<!-- 生成映射文件的包名和位置-->
<sqlMapGenerator targetPackage="mapping" targetProject="src/main/resources">
<property name="enableSubPackages" value="true"/>
</sqlMapGenerator>
<!-- 生成DAO的包名和位置-->
<javaClientGenerator type="XMLMAPPER" targetPackage="com.tengyunhao.demo.mapper" targetProject="src/main/java">
<property name="enableSubPackages" value="true"/>
</javaClientGenerator>
<!-- 要生成的表 tableName是数据库中的表名或视图名 domainObjectName是实体类名-->
<table tableName="user_info" domainObjectName="UserInfo" enableCountByExample="false" enableUpdateByExample="false" enableDeleteByExample="false" enableSelectByExample="false" selectByExampleQueryId="false"></table>
</context>
</generatorConfiguration>
mybatis-generator.xml
3、添加运行配置
点击 run -> Edit Configurations

点击 + 号,添加一个 Maven 的配置

4、运行

运行后我们就可以在相应的目录下看到生成的代码了,如图:

三、基本使用
1、编写 Service 接口及 Service 实现类:
public interface UserService {
int addUser(UserInfo userInfo);
UserInfo getUserByAccount(String account);
}
@Service
public class UserServiceImpl implements UserService {
@Autowired
private UserInfoMapper userInfoMapper;
@Override
public int addUser(UserInfo userInfo) {
return userInfoMapper.insert(userInfo);
}
@Override
public UserInfo getUserByAccount(String account) {
return userInfoMapper.selectByPrimaryKey(account);
}
}
2、编写 Controller 类:
@RestController
@RequestMapping("/user")
public class UserController {
@Autowired
private UserService userService;
@RequestMapping(value = "account", method = RequestMethod.POST)
public int addUser(String account, String password, String nickname) {
UserInfo userInfo = new UserInfo();
userInfo.setAccount(account);
userInfo.setPassword(password);
userInfo.setNickname(nickname);
return userService.addUser(userInfo);
}
@RequestMapping(value = "account", method = RequestMethod.GET)
public UserInfo getUserByAccount(String account) {
return userService.getUserByAccount(account);
}
}
给 UserMapper 加上 @Mapper 注解(我这不加注解会报错)
3、配置 mybastis
首先在 application.properties 中新增如下配置:
mybatis.mapper-locations=classpath:mapping/*.xml
mybatis.config-location=classpath:mybatis-config.xml
然后将 mybatis-config.xml 配置文件放到 src/main/resources 目录下:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<typeAliases>
</typeAliases>
</configuration>
mybatis-config.xml
4、运行项目进行测试
这时我们就可以启动项目了。
另外 IDEA 提供了进行接口测试的工具,打开方式为 Tools -> Test RESTful Web Service,如下图所示:

四、添加事务
我们只需要在 Service 实现类中的方法上加入 @Trasactional 注解,默认当抛出异常的时候就会触发事务的回滚,从源码角度来看一下如何使用其参数:
@Target({ElementType.METHOD, ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Inherited
@Documented
public @interface Transactional {
/** 指定事务管理器 */
@AliasFor("transactionManager")
String value() default "";
/** 指定事务的限定符 */
@AliasFor("value")
String transactionManager() default "";
/** 事务传播行为,默认为支持当前事务,当前没有事务则创建一个 */
Propagation propagation() default Propagation.REQUIRED;
/** 事务隔离级别,默认按数据库默认隔离级别 */
Isolation isolation() default Isolation.DEFAULT;
/** 事务超时时间 */
int timeout() default TransactionDefinition.TIMEOUT_DEFAULT;
/** 读写或只读事务,默认读写事务 */
boolean readOnly() default false;
/** 触发事务回滚的异常类 */
Class<? extends Throwable>[] rollbackFor() default {};
/** 同上 */
String[] rollbackForClassName() default {};
/** 不会导致事务回滚的异常类 */
Class<? extends Throwable>[] noRollbackFor() default {};
/** 同上 */
String[] noRollbackForClassName() default {};
}
在 Service 实现类加入 @Trasactional 注解后,还需要在入口类添加 @EnableTransactionManagement 注解,来开启事务:
@EnableTransactionManagement
@SpringBootApplication
public class DemoApplication {
public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
}
}
[Spring] 学习Spring Boot之二:整合MyBatis并使用@Trasactional管理事务的更多相关文章
- spring boot 1.4 整合 mybatis druid
http://www.jianshu.com/p/cef49ad91ba9spring boot 1.4 整合 mybatis druid
- SpringBoot 源码解析 (九)----- Spring Boot的核心能力 - 整合Mybatis
本篇我们在SpringBoot中整合Mybatis这个orm框架,毕竟分析一下其自动配置的源码,我们先来回顾一下以前Spring中是如何整合Mybatis的,大家可以看看我这篇文章Mybaits 源码 ...
- Spring Boot 2.x整合mybatis及druid数据源及逆向工程
1逆向工程 1)db.properties #============================# #===== Database sttings =====# #=============== ...
- Spring Boot2 系列教程 (九) | SpringBoot 整合 Mybatis
前言 如题,今天介绍 SpringBoot 与 Mybatis 的整合以及 Mybatis 的使用,本文通过注解的形式实现. 什么是 Mybatis MyBatis 是支持定制化 SQL.存储过程以及 ...
- 【转】Spring学习---Spring 学习总结
什么是Spring ? Spring是一个开源框架,Spring是于2003 年兴起的一个轻量级的Java 开发框架,由Rod Johnson在其著作Expert One-On-One J2EEDev ...
- springboot(二)整合mybatis,多数据源和事务管理
-- 1.整合mybatis -- 2.整合多数据源 -- 3. 整合事务 代码地址:https://github.com/showkawa/springBoot_2017/tree/master/ ...
- Java开发学习(三十九)----SpringBoot整合mybatis
一.回顾Spring整合Mybatis Spring 整合 Mybatis 需要定义很多配置类 SpringConfig 配置类 导入 JdbcConfig 配置类 导入 MybatisConfig ...
- Spring 学习——Spring框架结构、概念
maven项目结构 记忆:在一个项目中,project下一层级时src,也就是源文件,所有需要进行编译的文件都是在这个目录下,其实也就是这一个目录,然后向下扩展.在src目录下,存在main文件夹,里 ...
- [原创]java WEB学习笔记109:Spring学习---spring中事物管理
博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱好 ...
随机推荐
- 【ORACLE】oracle11g单实例安装
-- 上传安装包 p13390677_112040_Linux-x86-64_1of7.zip p13390677_112040_Linux-x86-64_2of7.zip -- 解压安装包 unzi ...
- 广州区块链系统or积分联盟
区块链技术开发至今已有十年,从概念的现世到如今初步应用,区块链开发公司在各个领域开始发光发热,很多人都想参与其中,通过区块链开发实现企业转型来适应未来市场,也有一些初创者希望借此实现创业意图,但在诸多 ...
- BugPhobia沟通篇章:Solr模式配置与数据导入调研
0x01 :Scrum Meeting特别说明 特别说明,考虑到编译原理课程考核的时间安排,每天开发时间急剧缩短以至于难以维系正常的Scrum Meeting,因此,将2015/12/13 00:00 ...
- 20135323符运锦----第三周:构建一个简单的Linux系统MenuOS
相关知识点 1.arch目录 占据相当庞大的空间,X86目录下代码需要重点关注. 2.init目录 内核启动的相关代码基本都在此目录下,内含MAIN.C,文件中START_KERNEL是整个LINUX ...
- composer 使用(踩坑笔记)
composer的介绍 来张图就好啦!我不细说啦 安装composer 1).PHP 环境变量配置,可参考百度经验: 2).详情可参考中国全量镜像进行 Composer 的安装 3).安装完成后,命令 ...
- [转帖]kubeadm 实现细节
kubeadm 实现细节 http://docs.kubernetes.org.cn/829.html 1 核心设计原则 2 常量和众所周知的值和路径 3 kubeadm init 工作流程内部设计 ...
- PHP4个载入语句的区别
4个载入语句的区别 include和require的区别: include载入文件失败时(即没有找到该文件),报一个“提示错误”,然后继续执行后续代码: requre载入文件失败时,报错并立即终止执行 ...
- BeanFactory 简介以及它 和FactoryBean的区别(阿里面试)
BeanFacotry是spring中比较原始的Factory.如XMLBeanFactory就是一种典型的BeanFactory.原始的BeanFactory无法支持spring的许多插件,如AOP ...
- codeforces4A
Watermelon CodeForces - 4A Qingyu有一个简单的问题想让你解决. 输入一个数,如果它是2,或者它是奇数,输出NO,否则输出YES. 很简单吧,因此你应该很快解决. 输入 ...
- 【loj6029】「雅礼集训 2017 Day1」市场 线段树+均摊分析
题目描述 给出一个长度为 $n$ 的序列,支持 $m$ 次操作,操作有四种:区间加.区间下取整除.区间求最小值.区间求和. $n\le 100000$ ,每次加的数在 $[-10^4,10^4]$ 之 ...