mybatis + mybatis-generator +通用mapper + mybatis-plus

mybatis

  1. mybatis: 一种操作数据库的框架,提供Mapper类。缺点:需要在xml中提前写好sql语句。官方文档
  2. 以User表为例的开发步骤:
    1. 导入mybatis的pom坐标
    2. 创建User数据库表
    3. 创建User pojo实体类
    4. 映射UserMapper.xml,写入sql语句,利用parameterType和resultType规定参数和返回值类型
    5. sqlMapConfig.xml核心配置文件,配置数据库连接信息,缩写,mapper文件地址等

mybatis-generator

  1. mybatis-generator: 自动为mybatis生成简单的crud语句官方文档
  2. 开发步骤
    • 因为是mybatis的辅助,同样需要导入mybatis的pom坐标
    • 导入mabtis-generator-maven-plugin插件
      mybatis + mybatis-generator +通用mapper + mybatis-plus_第1张图片
    • 编写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看起来更简明易懂些:
mybatis + mybatis-generator +通用mapper + mybatis-plus_第2张图片
缺点:

  1. 如果数据库字段变化频繁,就需要反复重新生成代码,并覆盖之前可能修改过的文件
  2. 仅基础的增删改查等方法,就产生了大量的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

  1. 导入mybatis-spring-boot-starter坐标,这是mybatis官方给出的mybatis继承springboot的启动器
  2. 添加到application.yml配置文件中,别名,mapper.xml映射文件路径等信息
  3. 给mapper接口添加@Mapper注解或者直接在启动类上添加@MapperScan()mapper组件扫描地址

整合通用mapper 官方文档

  1. 导入mybatis-spring-boot-starter(tk.mybatis)的通用mapper启动器,一旦引入该启动器,会覆盖mybatis官方启动器的功能,因此需要移除mybatis-spring-boot-starter坐标。
  2. mapper接口只需要继承Mapper,无需编写代码
  3. 需要将springboot启动器上的mapper组件扫描的依赖改成tk.mybatis的
  4. 给User实体类添加JPA注解

mybatis-plus 国人苞米豆团队的官方文档!好看!种草!

mybatis plus: 在mybatis的基础上开发的框架。上面讲的代码生成和通用mapper可以看成插件。在mybatis的基础上增加了很多功能,内置通用mapper, 通用service,分页插件等。
mybatis plus generator

  1. 引入依赖mybatis-plus-boot-starter
  2. 添加@MapperScan注解
  3. 编写实体类,可以使用@Data Lombok来简化代码
  4. 编写Mapper接口继承BaseMapper

总结:

数据库框架:Mybatis Plus > Mybatis
代码生成器:Mybatis Plus Generator > Mybatis Generator
建议使用Mybatis-plus + 其自带的AutoGenerator代码生成器,参考官方文档

你可能感兴趣的:(java)