mybatis
mybatis
: 一种操作数据库的框架,提供Mapper类。缺点:需要在xml中提前写好sql语句。官方文档- 以User表为例的开发步骤:
1. 导入mybatis
的pom坐标
2. 创建User数据库表
3. 创建User pojo实体类
4. 映射UserMapper.xml,写入sql语句,利用parameterType和resultType规定参数和返回值类型
5. sqlMapConfig.xml核心配置文件,配置数据库连接信息,缩写,mapper文件地址等
mybatis-generator
mybatis-generator
: 自动为mybatis生成简单的crud语句官方文档- 开发步骤
- 因为是mybatis的辅助,同样需要导入mybatis的pom坐标
- 导入
mabtis-generator-maven-plugin
插件
- 编写
generatorConfig.xml配置文件
,配置内容包括:数据库连接,生成的dao mapper接口和映射mapper.xml文件、实体类等内容。 - 运行maven的插件即可自动生成
<?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">
<!--
generatorConfig.xml的作用:
1. 设置如何连接数据库
2. 设置生成什么以及生成的方式
3. 所用到的数据库table是什么
-->
<generatorConfiguration>
<!-- 配置数据库驱动, 从maven的仓库中获取即可-->
<classPathEntry location="E:\java\tools\maven_repository\mysql\mysql-connector-java\8.0.19\mysql-connector-java-8.0.19.jar" />
<context id="DB2Tables" targetRuntime="MyBatis3">
<jdbcConnection driverClass="com.mysql.cj.jdbc.Driver"
connectionURL="jdbc:mysql://localhost:3306/twomeng?&useSSL=false&useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai"
userId="root"
password="970306">
</jdbcConnection>
<javaTypeResolver >
<property name="forceBigDecimals" value="false" />
</javaTypeResolver>
<!--生成model类的存放位置-->
<javaModelGenerator targetPackage="com.twomeng.practice.model" targetProject="src\main\java">
<property name="enableSubPackages" value="true" />
<property name="trimStrings" value="true" />
</javaModelGenerator>
<!--生成映射文件存放位置-->
<sqlMapGenerator targetPackage="com.twomeng.practice.dao" targetProject="src\main\java">
<property name="enableSubPackages" value="true" />
</sqlMapGenerator>
<!--生成mapper类的存放位置-->
<javaClientGenerator type="XMLMAPPER" targetPackage="com.twomeng.practice.dao" targetProject="src\main\java">
<property name="enableSubPackages" value="true" />
</javaClientGenerator>
<!--生成对应表及类名-->
<table tableName="sys_user" domainObjectName="SysUser" >
<property name="useActualColumnNames" value="true"/>
<!-- <generatedKey column="userId" sqlStatement="DB2" identity="true" />-->
<!-- <columnOverride column="DATE_FIELD" property="startDate" />-->
<!-- <ignoreColumn column="FRED" />-->
<!-- <columnOverride column="LONG_VARCHAR_FIELD" jdbcType="VARCHAR" />-->
</table>
</context>
</generatorConfiguration>
我们打开生成的UserMapper.xml文件,发现里面很多SQL语句也被写的挺复杂的,反而不如用原生mybatis直接写sql看起来更简明易懂些:
缺点:
- 如果数据库字段变化频繁,就需要反复重新生成代码,并覆盖之前可能修改过的文件
- 仅基础的增删改查等方法,就产生了大量的XML内容,代码十分多
通用mapper
通用mapper的产生是为了解决mybatis-generator的上面提到的两条缺点,它在mybatis-generator的基础上结合了部分JPA注解产生了通用mapper。
什么是JPA
JPA是Java Persistence API的简称,中文名Java持久层API,是JDK 5.0注解或XML描述对象-关系表的映射关系,并将运行期的实体对象持久化到数据库中。JPA是需要Provider来实现其功能的,Hibernate就是JPA Provider中很强的一个,应该说无人能出其右。
参考博客
基本注解:
- @Entity 标注实体类
- @Table 标注实体类对应的数据库表名
- @Id 标注主键列
- @GeneratedValue 标注主键的生成策略:auto increment等,
stategy = GenerationType.auto
- @Column 标注列名 实体属性和映射数据库表列不同名时使用
通用mapper使用方法官方文档中有详细的描述
添加pom坐标:
- 和mybatis集成,添加
mapper
依赖 - 和spring+mybatis(mybatis-spring)集成,添加
mapper
依赖 - 和spring-boot集成,添加
mapper-spring-boot-starter
依赖 - 整合在mybatis-generator的依赖中
Springboot整合mybatis和通用mapper
整合mybatis
- 导入
mybatis-spring-boot-starter
坐标,这是mybatis官方给出的mybatis继承springboot的启动器 - 添加到
application.yml
配置文件中,别名,mapper.xml映射文件路径等信息 - 给mapper接口添加@Mapper注解或者直接在启动类上添加@MapperScan()mapper组件扫描地址
整合通用mapper 官方文档
- 导入
mybatis-spring-boot-starter(tk.mybatis)
的通用mapper启动器,一旦引入该启动器,会覆盖mybatis官方启动器的功能,因此需要移除mybatis-spring-boot-starter
坐标。 - mapper接口只需要继承
Mapper<User>
,无需编写代码 - 需要将springboot启动器上的mapper组件扫描的依赖改成tk.mybatis的
- 给User实体类添加JPA注解
mybatis-plus 国人苞米豆团队的官方文档!好看!种草!
mybatis plus
: 在mybatis的基础上开发的框架。上面讲的代码生成和通用mapper可以看成插件。在mybatis的基础上增加了很多功能,内置通用mapper, 通用service,分页插件等。
mybatis plus generator
- 引入依赖
mybatis-plus-boot-starter
- 添加@MapperScan注解
- 编写实体类,可以使用@Data Lombok来简化代码
- 编写Mapper接口继承
BaseMapper<User>
总结:
数据库框架:Mybatis Plus > Mybatis
代码生成器:Mybatis Plus Generator > Mybatis Generator
建议使用Mybatis-plus + 其自带的AutoGenerator代码生成器,参考官方文档