一、配置及准备工作

1、在 Maven 的 pom 文件中新增以下依赖:

  1. <dependency>
  2. <groupId>mysql</groupId>
  3. <artifactId>mysql-connector-java</artifactId>
  4. <version>runtime</version>
  5. </dependency>
  6. <dependency>
  7. <groupId>org.mybatis.spring.boot</groupId>
  8. <artifactId>mybatis-spring-boot-starter</artifactId>
  9. <version>1.3.0</version>
  10. </dependency>

2、在 application.properties 中配置 mysql 的链接信息:

  1. spring.datasource.url=jdbc:mysql://localhost:3306/demo
  2. spring.datasource.username=root
  3. spring.datasource.password=123456
  4. spring.datasource.driver-class-name=com.mysql.jdbc.Driver

3、在数据库中创建 user_info 表:

  1. CREATE TABLE user_info
  2. (
  3. account VARCHAR(20) NOT NULL PRIMARY KEY,
  4. nickname VARCHAR(20) NULL,
  5. phone CHAR(11) NULL,
  6. password CHAR(32) NOT NULL,
  7. email VARCHAR(50) NULL
  8. ) ENGINE = InnoDB DEFAULT CHARSET=utf8;

二、使用 mybatis generator 自动生成代码

1、在 Maven 的 pom 文件中添加如下插件:

  1. <plugin>
  2. <groupId>org.mybatis.generator</groupId>
  3. <artifactId>mybatis-generator-maven-plugin</artifactId>
  4. <version>1.3.2</version>
  5. <configuration>
        <configurationFile>${basedir}/src/main/resources/mybatis-generator.xml</configurationFile>
  6. <overwrite>true</overwrite>
  7. <verbose>true</verbose>
  8. </configuration>
  9. </plugin>

2、将如下 mybatis-generator.xml 配置文件放入到 src/main/resources 目录下:

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!DOCTYPE generatorConfiguration
  3. PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN"
  4. "http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd">
  5. <generatorConfiguration>
  6. <!-- 数据库驱动:选择你的本地硬盘上面的数据库驱动包-->
  7. <classPathEntry location="/Users/tengyunhao/.m2/repository/mysql/mysql-connector-java/5.1.21/mysql-connector-java-5.1.21.jar"/>
  8. <context id="DB2Tables" targetRuntime="MyBatis3">
  9. <commentGenerator>
  10. <property name="suppressDate" value="false"/>
  11. <!-- 是否去除自动生成的注释 true:是 : false:否 -->
  12. <property name="suppressAllComments" value="false"/>
  13. </commentGenerator>
  14. <!--数据库链接URL,用户名、密码 -->
  15. <jdbcConnection driverClass="com.mysql.jdbc.Driver" connectionURL="jdbc:mysql://localhost/demo" userId="root" password="123456">
  16. </jdbcConnection>
  17. <javaTypeResolver>
  18. <property name="forceBigDecimals" value="false"/>
  19. </javaTypeResolver>
  20. <!-- 生成模型的包名和位置-->
  21. <javaModelGenerator targetPackage="com.tengyunhao.demo.entity" targetProject="src/main/java">
  22. <property name="enableSubPackages" value="true"/>
  23. <property name="trimStrings" value="true"/>
  24. </javaModelGenerator>
  25. <!-- 生成映射文件的包名和位置-->
  26. <sqlMapGenerator targetPackage="mapping" targetProject="src/main/resources">
  27. <property name="enableSubPackages" value="true"/>
  28. </sqlMapGenerator>
  29. <!-- 生成DAO的包名和位置-->
  30. <javaClientGenerator type="XMLMAPPER" targetPackage="com.tengyunhao.demo.mapper" targetProject="src/main/java">
  31. <property name="enableSubPackages" value="true"/>
  32. </javaClientGenerator>
  33. <!-- 要生成的表 tableName是数据库中的表名或视图名 domainObjectName是实体类名-->
  34. <table tableName="user_info" domainObjectName="UserInfo" enableCountByExample="false" enableUpdateByExample="false" enableDeleteByExample="false" enableSelectByExample="false" selectByExampleQueryId="false"></table>
  35. </context>
  36. </generatorConfiguration>

mybatis-generator.xml

3、添加运行配置

点击 run -> Edit Configurations

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

4、运行

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

三、基本使用

1、编写 Service 接口及 Service 实现类:

  1. public interface UserService {
  2. int addUser(UserInfo userInfo);
  3. UserInfo getUserByAccount(String account);
  4. }
  1. @Service
  2. public class UserServiceImpl implements UserService {
  3. @Autowired
  4. private UserInfoMapper userInfoMapper;
  5. @Override
  6. public int addUser(UserInfo userInfo) {
  7. return userInfoMapper.insert(userInfo);
  8. }
  9. @Override
  10. public UserInfo getUserByAccount(String account) {
  11. return userInfoMapper.selectByPrimaryKey(account);
  12. }
  13. }

2、编写 Controller 类:

  1. @RestController
  2. @RequestMapping("/user")
  3. public class UserController {
  4. @Autowired
  5. private UserService userService;
  6. @RequestMapping(value = "account", method = RequestMethod.POST)
  7. public int addUser(String account, String password, String nickname) {
  8. UserInfo userInfo = new UserInfo();
  9. userInfo.setAccount(account);
  10. userInfo.setPassword(password);
  11. userInfo.setNickname(nickname);
  12. return userService.addUser(userInfo);
  13. }
  14. @RequestMapping(value = "account", method = RequestMethod.GET)
  15. public UserInfo getUserByAccount(String account) {
  16. return userService.getUserByAccount(account);
  17. }
  18. }

给 UserMapper 加上 @Mapper 注解(我这不加注解会报错)

3、配置 mybastis

首先在 application.properties 中新增如下配置:

  1. mybatis.mapper-locations=classpath:mapping/*.xml
  2. mybatis.config-location=classpath:mybatis-config.xml

然后将 mybatis-config.xml 配置文件放到 src/main/resources 目录下:

  1. <?xml version="1.0" encoding="UTF-8" ?>
  2. <!DOCTYPE configuration
  3. PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
  4. "http://mybatis.org/dtd/mybatis-3-config.dtd">
  5. <configuration>
  6. <typeAliases>
  7. </typeAliases>
  8. </configuration>

mybatis-config.xml

4、运行项目进行测试

这时我们就可以启动项目了。

另外 IDEA 提供了进行接口测试的工具,打开方式为 Tools -> Test RESTful Web Service,如下图所示:

四、添加事务

我们只需要在 Service 实现类中的方法上加入 @Trasactional 注解,默认当抛出异常的时候就会触发事务的回滚,从源码角度来看一下如何使用其参数:

  1. @Target({ElementType.METHOD, ElementType.TYPE})
  2. @Retention(RetentionPolicy.RUNTIME)
  3. @Inherited
  4. @Documented
  5. public @interface Transactional {
  6.  
  7. /** 指定事务管理器 */
  8. @AliasFor("transactionManager")
  9. String value() default "";
  10.  
  11. /** 指定事务的限定符 */
  12. @AliasFor("value")
  13. String transactionManager() default "";
  14.  
  15. /** 事务传播行为,默认为支持当前事务,当前没有事务则创建一个 */
  16. Propagation propagation() default Propagation.REQUIRED;
  17.  
  18. /** 事务隔离级别,默认按数据库默认隔离级别 */
  19. Isolation isolation() default Isolation.DEFAULT;
  20.  
  21. /** 事务超时时间 */
  22. int timeout() default TransactionDefinition.TIMEOUT_DEFAULT;
  23.  
  24. /** 读写或只读事务,默认读写事务 */
  25. boolean readOnly() default false;
  26.  
  27. /** 触发事务回滚的异常类 */
  28. Class<? extends Throwable>[] rollbackFor() default {};
  29.  
  30. /** 同上 */
  31. String[] rollbackForClassName() default {};
  32.  
  33. /** 不会导致事务回滚的异常类 */
  34. Class<? extends Throwable>[] noRollbackFor() default {};
  35.  
  36. /** 同上 */
  37. String[] noRollbackForClassName() default {};
  38.  
  39. }

在 Service 实现类加入 @Trasactional 注解后,还需要在入口类添加 @EnableTransactionManagement 注解,来开启事务:

  1. @EnableTransactionManagement
  2. @SpringBootApplication
  3. public class DemoApplication {
  4. public static void main(String[] args) {
  5. SpringApplication.run(DemoApplication.class, args);
  6. }
  7. }

[Spring] 学习Spring Boot之二:整合MyBatis并使用@Trasactional管理事务的更多相关文章

  1. spring boot 1.4 整合 mybatis druid

    http://www.jianshu.com/p/cef49ad91ba9spring boot 1.4 整合 mybatis druid

  2. SpringBoot 源码解析 (九)----- Spring Boot的核心能力 - 整合Mybatis

    本篇我们在SpringBoot中整合Mybatis这个orm框架,毕竟分析一下其自动配置的源码,我们先来回顾一下以前Spring中是如何整合Mybatis的,大家可以看看我这篇文章Mybaits 源码 ...

  3. Spring Boot 2.x整合mybatis及druid数据源及逆向工程

    1逆向工程 1)db.properties #============================# #===== Database sttings =====# #=============== ...

  4. Spring Boot2 系列教程 (九) | SpringBoot 整合 Mybatis

    前言 如题,今天介绍 SpringBoot 与 Mybatis 的整合以及 Mybatis 的使用,本文通过注解的形式实现. 什么是 Mybatis MyBatis 是支持定制化 SQL.存储过程以及 ...

  5. 【转】Spring学习---Spring 学习总结

    什么是Spring ? Spring是一个开源框架,Spring是于2003 年兴起的一个轻量级的Java 开发框架,由Rod Johnson在其著作Expert One-On-One J2EEDev ...

  6. springboot(二)整合mybatis,多数据源和事务管理

     -- 1.整合mybatis -- 2.整合多数据源 -- 3. 整合事务 代码地址:https://github.com/showkawa/springBoot_2017/tree/master/ ...

  7. Java开发学习(三十九)----SpringBoot整合mybatis

    一.回顾Spring整合Mybatis Spring 整合 Mybatis 需要定义很多配置类 SpringConfig 配置类 导入 JdbcConfig 配置类 导入 MybatisConfig ...

  8. Spring 学习——Spring框架结构、概念

    maven项目结构 记忆:在一个项目中,project下一层级时src,也就是源文件,所有需要进行编译的文件都是在这个目录下,其实也就是这一个目录,然后向下扩展.在src目录下,存在main文件夹,里 ...

  9. [原创]java WEB学习笔记109:Spring学习---spring中事物管理

    博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱好 ...

随机推荐

  1. Cloud Native Weekly | KubeCon首登中国,华为云亮相KubeCon 2018,微软云服务又罢工

    1.KubeCon首登中国,Kubernetes将如何再演进? 11月14日,由CNCF发起的云原生领域全球最大的峰会之一KubeCon+CloudNativeCon首次登陆中国,中国已经成为云原生领 ...

  2. Python能做什么?

    Python作为一个功能强大,并且简单易学的编程语言而广受好评,那么Python都能做些什么呢?概括起来有以下几个方面: 1.Web开发: 2.大数据处理: 3.人工智能: 4.自动化运维: 5.云计 ...

  3. c# winform调用摄像头识别二维码

    首先我们需要引用两个第三方组件:AForge和zxing. Aforge是摄像头操作组件,zxing是二维码识别组件.都是开源项目.避免重复造轮子. 其实一些操作代码我也是参照别人的,若侵犯您的版权, ...

  4. Alpha版本发布时间安排

    Alpha版本发布截止时间:2014年11月23日 第一轮迭代M1报告时间:2014年11月27日课上 - 每个团队5分钟时间汇报,5分钟时间提问 第一轮迭代M1事后分析报告时间:2014年11月29 ...

  5. Supervised Hashing with Kernels, KSH

    Notation 该论文中应用到较多符号,为避免混淆,在此进行解释: n:原始数据集的大小 l:实验中用于监督学习的数据集大小(矩阵S行/列的大小) m:辅助数据集,用于得到基于核的哈希函数 r:比特 ...

  6. GIT情况展示说明

    旧仓库:https://git.coding.net/shenbaishan/GIFT.git 公开的 新仓库:https://git.coding.net/shenbaishan/gift-sele ...

  7. Access restriction: The type 'BASE64Decoder' is not API

    Access restriction: The type 'BASE64Decoder' is not API (restriction on required library 'C:\Program ...

  8. 如何用Delphi开发网游外挂

    1.动作式,所谓动作式,就是指用API发命令给窗口或API控制鼠标.键盘等,使游戏里的人物进行流动或者攻击,最早以前的“石器”外挂就是这种方式.2.本地修改式,这种外挂跟传统上的一些游戏修改器没有两样 ...

  9. NESTED最终与外部事务合并在一起提交

    NESTED最终与外部事务合并在一起提交

  10. BZOJ2743 HEOI2012采花(离线+树状数组)

    如果能够把所有区间内第二次出现某颜色的位置标记出来,树状数组查询一下就可以了. 考虑离线.按左端点从小到大排序,不断移动左端点并更新第二次出现的位置. #include<iostream> ...