[Spring] 学习Spring Boot之二:整合MyBatis并使用@Trasactional管理事务

摘要:
--数据库驱动:选择你的本地硬盘上面的数据库驱动包--˃˂tabletableName="user_info"domainObjectName="UserInfo"e

一、配置及准备工作

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 TABLEuser_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

[Spring] 学习Spring Boot之二:整合MyBatis并使用@Trasactional管理事务第1张

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

[Spring] 学习Spring Boot之二:整合MyBatis并使用@Trasactional管理事务第2张

4、运行

[Spring] 学习Spring Boot之二:整合MyBatis并使用@Trasactional管理事务第3张

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

[Spring] 学习Spring Boot之二:整合MyBatis并使用@Trasactional管理事务第4张

三、基本使用

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

public interfaceUserService {
    intaddUser(UserInfo userInfo);
    UserInfo getUserByAccount(String account);
}
@Service
public class UserServiceImpl implementsUserService {
    @Autowired
    privateUserInfoMapper userInfoMapper;
    @Override
    public intaddUser(UserInfo userInfo) {
        returnuserInfoMapper.insert(userInfo);
    }
    @Override
    publicUserInfo getUserByAccount(String account) {
        returnuserInfoMapper.selectByPrimaryKey(account);
    }
}

2、编写 Controller 类:

@RestController
@RequestMapping("/user")
public classUserController {
    @Autowired
    privateUserService userService;
    @RequestMapping(value = "account", method =RequestMethod.POST)
    public intaddUser(String account, String password, String nickname) {
        UserInfo userInfo = newUserInfo();
        userInfo.setAccount(account);
        userInfo.setPassword(password);
        userInfo.setNickname(nickname);
        returnuserService.addUser(userInfo);
    }
    @RequestMapping(value = "account", method =RequestMethod.GET)
    publicUserInfo getUserByAccount(String account) {
        returnuserService.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,如下图所示:

[Spring] 学习Spring Boot之二:整合MyBatis并使用@Trasactional管理事务第5张

四、添加事务

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

@Target({ElementType.METHOD, ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Inherited
@Documented
public @interfaceTransactional {

    /**指定事务管理器 */@AliasFor("transactionManager")
    String value() default "";

    /**指定事务的限定符 */@AliasFor("value")
    String transactionManager() default "";

    /**事务传播行为,默认为支持当前事务,当前没有事务则创建一个 */Propagation propagation() defaultPropagation.REQUIRED;

    /**事务隔离级别,默认按数据库默认隔离级别 */Isolation isolation() defaultIsolation.DEFAULT;

    /**事务超时时间 */
    int timeout() defaultTransactionDefinition.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 classDemoApplication {
    public static voidmain(String[] args) {
        SpringApplication.run(DemoApplication.class, args);
    }
}

免责声明:文章转载自《[Spring] 学习Spring Boot之二:整合MyBatis并使用@Trasactional管理事务》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇wampserver2.5 在 Win7 64位下的相关配置备忘08- adb常用命令以及模拟器链接adb命令下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Calendar Provider

英文原文:http://developer.android.com/guide/topics/providers/calendar-provider.html 关键类 CalendarContract.Calendars CalendarContract.Events CalendarContract.Attendees CalendarContrac...

带中文的字符串截取

最近在页面展示的时候遇到这样的场景,文字有可能超长,却又不允许换行。 当然,可以用高超的css来搞定。但如果你想要让多余的文字用“...”来代替,并且要兼容很多浏览器,这种时候用css也会很头疼吧。 1.C#对中文字符串的截取 与英文字符相比,我们把中文字符按两个占位来计算,对于带中文的字符串截取,要面临两个问题: 1.无法截取半个中文字符; 2.对于除...

深入浅出Blazor webassembly 之API服务端保护

受保护 API 项目的思路是: 调用方先提交用户名和密码 (即凭证) 到登录接口, 由登录接口验证凭证合法性, 如果合法, 返回给调用方一个Jwt token.  以后调用方访问API时, 需要将该token 加到 Bearer Http 头上, 服务方验证该 token 是否有效, 如果验证通过, 将允许其继续访问受控API.  ============...

15、mybatis学习——鉴别器discriminator的使用

这个例子只是重在为了理解discriminator的使用 一对多的实体类Student.java  多对一的实体类College.java StudentMapper接口定义测试discriminator的方法   StudentMapper的sql配置文件中进行相对应接口方法配置 <!-- 测试鉴别器discriminator --&...

C# + ArcEngine 常用方法(不定时更新)

1、Arcengine调用GP服务,抛出异常方法 object sev = null; try{ Application.DoEvents(); gp.Execut...

SQL Server2000中死锁经验总结 &amp;lt;转&amp;gt;

虽然不能完全避免死锁,但可以使死锁的数量减至最少。将死锁减至最少可以增加事务的吞吐量并减少系统开销,因为只有很少的事务: 回滚,而回滚会取消事务执行的所有工作。 由于死锁时回滚而由应用程序重新提交。 下列方法有助于最大限度地降低死锁: 按同一顺序访问对象。 避免事务中的用户交互。 保持事务简短并在一个批处理中。 使用低隔离级别...