您的位置:首页 > 编程语言 > Java开发

Spring Boot 学习笔记4——结合Mybatis访问数据库及事务控制

2017-12-05 17:58 1006 查看
spring boot提供的数据库访问(通过JdbcTemplate)可看Spring Cloud学习笔记3——配置中心

码云地址:https://gitee.com/wudiyong/ConfigServer.git

结合Mybatis只需以下几个配置

1、加入mybatis依赖

<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>1.3.1</version>
</dependency>


2、application.properties

1)配置sql xml文件的路径

2)mybatis配置文件的路径及文件名,里面可以指定sql xml文件的位置、对象的别名等,如果没有什么需要配置的,可以不要该配置项

mybatis.mapper-locations=classpath:mybatis/mapper/*Mapper.xml
#可以不要下面的配置
mybatis.config-locations=classpath:mybatis/mybatis-config.xml
3、mybatis-config.xml文件位于src/main/resources/mybatis文件夹中,内容如下:

<?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>
<typeAlias alias="integer" type="java.lang.Integer" />
<typeAlias alias="map" type="java.util.Map" />
<!-- 更多自定义的类,alias是别名 = -->
</typeAliases>
</configuration>
4、sql xml文件放在src/main/resources/mybatis/mapper处,文件名一般为xxxMapper.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.ConfigServer.mapper.ConfigInfoMapper"><!--指定该xml文件对应哪个mapper接口-->
<resultMap id="BaseResultMap" type="com.ConfigServer.entity.NameValuePair">
<result column="key" property="name" jdbcType="VARCHAR" />
<result column="value" property="value" jdbcType="VARCHAR" />
</resultMap>

<sql id="Base_Column_List">
key,value
</sql>

<select id="getConfigInfo" parameterType="map" resultMap="BaseResultMap">
SELECT
<include refid="Base_Column_List" />
FROM config_info t
where application = #{application , jdbcType=VARCHAR}
</select>

</mapper>
5、mapper接口要用@Mapper注解,ConfigInfoMapper.java文件内容如下:

@Mapper
public interface ConfigInfoMapper {
public List<NameValuePair> getConfigInfo(Map<String, Object> params);
}
至此,mybatis已配置完成,可以通过mybatis访问数据库了,在需要使用的地方通过@Autowired注入xxxMapper接口即可,如:

@Autowired
private ConfigInfoMapper configInfoMapper;


配置事务控制
spring boot开启事务非常简单,不管是否使用mybatis,只需两步:

1、在入口类前面加上注解@EnableTransactionManagement

2、在需要使用事务的方法外面加上注解@Transactional

大多数情况下使用默认配置即可,如果对事务需要做特殊处理,可以修改@Transactional的属性值或在入口类处定义使用不同的PlatformTransactionManager。

@Transactional有如下属性可以设置:

@Transactional(propagation=Propagation.REQUIRED,readOnly=false,rollbackFor=Exception.class,
noRollbackFor=FileNotFoundException.class)
propagation默认等于Propagation.REQUIRED;

readOnly默认等于false;

rollbackFor默认是Class<? extends Throwable>[] rollbackFor() default {},也就是所有异常都回滚;

noRollbackFor默认是Class<? extends Throwable>[] noRollbackFor() default {},也就是说所有异常都回滚;

在Spring Boot中,当我们使用了spring-boot-starter-jdbc或spring-boot-starter-data-jpa依赖的时候,框架会自动默认分别注入DataSourceTransactionManager或JpaTransactionManager,如果两个依赖都加入,则可以在入口类处指定用哪个PlatformTransactionManager。

首先入口类要实现接口TransactionManagementConfigurer

然后加入如下代码:

// 创建事务管理器1,DataSource我们在连接数据库的时候就已经自定义了,这里会自动注入我们自定义的DataSource
@Bean(name = "txManager1")
public PlatformTransactionManager txManager(DataSource dataSource) {
return new DataSourceTransactionManager(dataSource);
}

// 创建事务管理器2
@Bean(name = "txManager2")
public PlatformTransactionManager txManager2(EntityManagerFactory factory) {
return new JpaTransactionManager(factory);
}

// 实现接口 TransactionManagementConfigurer 方法,其返回值代表在拥有多个事务管理器的情况下默认使用的事务管理器
@Override
public PlatformTransactionManager annotationDrivenTransactionManager() {
return txManager2;
}


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: