SpringBoot
- 1. SpringBoot集成MyBatis
-
- 1.1 添加mybatis依赖,MySQL驱动
- 1.2 使用MyBatis提供的逆向工程生成实体Bean,映射文件,DAO接口
-
- 1.2.1 配置文件GeneratorMapper.xml
- 1.2.2 插件
- 1.2.3 成功生成映射文件,DAO接口,实体Bean
- 1.2.4 总结:
- 1.3 SpringBoot集成MyBatis测试
- 1.4 扫描DAO的注解——有两种@Mapper和@MapperScan()
- 1.5 问题:Java下的xml文件不被编译-----Mapper映射文件存放的位置
- 2. SpringBoot支持事务-----@Transactional
1. SpringBoot集成MyBatis
1.1 添加mybatis依赖,MySQL驱动
pom
<!--MySQL驱动-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<!--MyBatis整合SpringBoot框架的起步依赖-->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.2.1</version>
</dependency>
1.2 使用MyBatis提供的逆向工程生成实体Bean,映射文件,DAO接口
有数据库直接生成实体Bean,Mapper,DAO接口
1.2.1 配置文件GeneratorMapper.xml
GeneratorMapper.xm
放在项目最外层
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE generatorConfiguration
PUBLIC "-//mybatis//DTD MyBatis Generator Configuration 1.0//EN"
"http://mybatis/dtd/mybatis-generator-config_1_0.dtd">
<generatorConfiguration>
<!--指定连接数据库的JDBC驱动包所在位置,指定到你本机的完成路径-->
<classPathEntry location="C:Usersabc.m2
epositorymysqlmysql-connector-java8.0.28mysql-connector-java-8.0.28.jar"/>
<!--配置table表信息内容体,targetRuntime指定采用MyBatis3的版本-->
<context id="tables" targetRuntime="MyBatis3">
<!--抑制生成注释,由于生成的注释都是英文的,可以不让它生成-->
<commentGenerator>
<!-- 是否去除自动生成的注释 true:是 : false:否 -->
<property name="suppressAllComments" value="true" />
</commentGenerator>
<!--数据库连接的信息:驱动类、连接地址、用户名、密码 -->
<jdbcConnection driverClass="com.mysql.cj.jdbc.Driver"
connectionURL="jdbc:mysql://localhost:3306/xiaomissm?useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true"
userId="root"
password="123456">
</jdbcConnection>
<!-- 默认false,把JDBC DECIMAL 和 NUMERIC 类型解析为 Integer,为 true时把JDBC DECIMAL 和
NUMERIC 类型解析为java.math.BigDecimal -->
<javaTypeResolver>
<property name="forceBigDecimals" value="false" />
</javaTypeResolver>
<!-- 生成model类,实体Bean
targetPackage 指定model类的包名
targetProject:生成model类的位置 -->
<javaModelGenerator targetPackage="com.guo.springboot.model"
targetProject="src/main/java">
<!-- enableSubPackages:是否让schema作为包的后缀 -->
<property name="enableSubPackages" value="false" />
<!-- 从数据库返回的值被清理前后的空格 -->
<property name="trimStrings" value="true" />
</javaModelGenerator>
<!-- 实体映射文件
targetProject:mapper映射文件生成的位置 -->
<sqlMapGenerator targetPackage="com.guo.springboot.mapper"
targetProject="src/main/java">
<!-- enableSubPackages:是否让schema作为包的后缀 -->
<property name="enableSubPackages" value="false" />
</sqlMapGenerator>
<!--生成MyBatis的Mapper接口类文件, DAO接口
targetPackage指定Mapper接口类的名
targetPackage:指定生成的Mapper接口放的位置 -->
<javaClientGenerator type="XMLMAPPER"
targetPackage="com.guo.springboot.mapper"
targetProject="src/main/java">
<!-- enableSubPackages:是否让schema作为包的后缀 -->
<property name="enableSubPackages" value="false" />
</javaClientGenerator>
<!-- 数据库表名及对应的Java模型类名 -->
<table tableName="admin" domainObjectName="Admin"
enableCountByExample="false"
enableUpdateByExample="false"
enableDeleteByExample="false"
enableSelectByExample="false"
selectByExampleQueryId="false"/>
<!-- <table schema="" tableName="admin"></table>
<table schema="" tableName="product_info"></table>
<table schema="" tableName="product_type"></table>
<table schema="" tableName="users"></table>-->
</context>
</generatorConfiguration>
1.2.2 插件
pom
放在< plugins>标签下
<!--mybatis代码自动生成插件-->
<plugin>
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator-maven-plugin</artifactId>
<version>1.3.3</version>
<configuration>
<!--配置文件的位置-->
<configurationFile>GeneratorMapper.xml</configurationFile>
<verbose>true</verbose>
<overwrite>true</overwrite>
</configuration>
</plugin>
1.2.3 成功生成映射文件,DAO接口,实体Bean
Maven→Plugins→mybatis-generator→mybatis-generator:generate双击
1.生成的实体Bean
2.生成的DAO接口
3.映射文件SQL
AdminMapper.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis//DTD Mapper 3.0//EN" "http://mybatis/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.guo.springboot.mapper.AdminMapper">
<resultMap id="BaseResultMap" type="com.guo.springboot.model.Admin">
<!--id 标签只能修饰主键字段-->
<!--result除了主键意外的字段-->
<!--
column 数据库中的字段名称
property 映射对象的属性名称
jdbcType 列在数据库中字段的类型(可以省略不写)
-->
<!--
resultMap作用:
1.当数据库中字段名称与实体对象的属性名不一致时,可以进行转换
2.当前查询的结果没有对应一个表的,可以自定义一个结果集
-->
<!--
如果数据库中字段名由多个单词构成,通过MyBatis逆向工程生成的对象属性名称会
按照驼峰命名法则生成属性名称
其中:数据库中字段名称由多个单词通过_下划线分割
-->
<id column="a_id" jdbcType="INTEGER" property="aId" />
<result column="a_name" jdbcType="VARCHAR" property="aName" />
<result column="a_pass" jdbcType="VARCHAR" property="aPass" />
</resultMap>
<!--sql语句片段,,将公共的部分抽取出来
可以通过include标签引用sql语句片段-->
<sql id="Base_Column_List">
a_id, a_name, a_pass
</sql>
<select id="selectByPrimaryKey" parameterType="java.lang.Integer" resultMap="BaseResultMap">
select
<include refid="Base_Column_List" />
from admin
where a_id = #{aId,jdbcType=INTEGER}
</select>
<delete id="deleteByPrimaryKey" parameterType="java.lang.Integer">
delete from admin
where a_id = #{aId,jdbcType=INTEGER}
</delete>
<insert id="insert" parameterType="com.guo.springboot.model.Admin">
insert into admin (a_id, a_name, a_pass)
values (#{aId,jdbcType=INTEGER}, #{aName,jdbcType=VARCHAR}, #{aPass,jdbcType=VARCHAR})
</insert>
<!--suffixOverrides 去除多余的逗号-->
<insert id="insertSelective" parameterType="com.guo.springboot.model.Admin">
insert into admin
<trim prefix="(" suffix=")" suffixOverrides=",">
<if test="aId != null">
a_id,
</if>
<if test="aName != null">
a_name,
</if>
<if test="aPass != null">
a_pass,
</if>
</trim>
<trim prefix="values (" suffix=")" suffixOverrides=",">
<if test="aId != null">
#{aId,jdbcType=INTEGER},
</if>
<if test="aName != null">
#{aName,jdbcType=VARCHAR},
</if>
<if test="aPass != null">
#{aPass,jdbcType=VARCHAR},
</if>
</trim>
</insert>
<update id="updateByPrimaryKeySelective" parameterType="com.guo.springboot.model.Admin">
update admin
<set>
<if test="aName != null">
a_name = #{aName,jdbcType=VARCHAR},
</if>
<if test="aPass != null">
a_pass = #{aPass,jdbcType=VARCHAR},
</if>
</set>
where a_id = #{aId,jdbcType=INTEGER}
</update>
<update id="updateByPrimaryKey" parameterType="com.guo.springboot.model.Admin">
update admin
set a_name = #{aName,jdbcType=VARCHAR},
a_pass = #{aPass,jdbcType=VARCHAR}
where a_id = #{aId,jdbcType=INTEGER}
</update>
</mapper>
1.2.4 总结:
MyBatis逆向工程只针对于单表操作
单表操作
单表操作
生成6个方法,
增 (全部属性添加,部分属性添加)
删
改(全部属性修改,部分属性修改)
查
1.3 SpringBoot集成MyBatis测试
前边已经准备好依赖,映射文件,实体Bean,DAO接口。
下边对增删改查进行开发
Controller控制层
在控制层注入业务层
Service
在业务层注入持久层
能注入的前提是spring容器中要有
对象交给Spring容器创建
@Service
@Mapper
1.4 扫描DAO的注解——有两种@Mapper和@MapperScan()
@Mapper需要在每一个Mapper接口类上添加,作用扫描dao接口
@MapperScan()是在SpringBoot启动入口类上添加的,它是扫描所有包
1.在每个Mapper接口上边添加@Mapper注解
@Mapper //扫描DAO接口到spring容器
2.如果有多个Mapper接口,可以在启动类上添加注解@MapperScan()进行扫描接口
@MapperScan(basePackages = “com.guo.springboot.mapper”)//开启扫描Mapper接口的包以及子目录
核心配置文件
application.properties
#设置连接数据库的四要素
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/xiaomissm?useUnicode=true&characterEncoding=UTF-8&useJDBCComliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=GMT%2B8
spring.datasource.username=root
spring.datasource.password=123456
1.5 问题:Java下的xml文件不被编译-----Mapper映射文件存放的位置
IDEA规定所有的配置文件应该在resources文件夹下,java文件应该在java文件下,,,,然而MyBatis中规定Mapper.xm文件和Mapper接口放在一起,,,最后会出现java文件夹下的Mapper.xml文件编译不进去,,,解决办法需要手动指定文件夹为resources。
1.方法一
Mapper接口和Mapper映射文件放在src/main/java同一目录下
需要在pom文件中手动指定资源文件夹路径resources
pom
在< plugins>标签下添加
<!--手动指定文件夹为resources-->
<resources>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.xml</include>
</includes>
</resource>
</resources>
2.方法二
将Mapper接口和Mapper映射文件分开放
把Mapper映射文件放在resources(类路径)文件夹的mapper目录下
需要在SpringBoot核心配置文件中指定mapper映射文件存放的位置
配置核心配置文件
application.properties
#指定MyBatis映射文件的路径
mybatis.mapper-locations=classpath:mapper/*.xml
2. SpringBoot支持事务-----@Transactional
事务是一个完成的功能,也叫做是一个完成的业务
事务只能跟什么SQL语句有关系? 事务只跟DML语句有关系:增删改
DML 数据操作语言 : 主要的关键字有:update、delete、insert。DML操作可以手动控制事务的开启、提交和回滚。
- DQL 数据查询语言 关键字有:select
- DDL 数据定义语言 主要的关键字有:create、alter、drop、truncate。DDL操作是隐性提交的,不能回滚
- TCL 事务控制语言 主要的语句关键字有:commit、rollback、savepoint、set transaction。
- DCL 数据控制语言 主要的关键字有:grant、revoke 。
SpringBoot2.0以后只需要在方法上添加@Transactional
在之前还需要在入口类上添加
@EnableTransactionManagement //开启事务
更多推荐
SpringBoot集成MyBatis
发布评论