Mybatis Generator最完整配置详解

背景

通过mybatis插件自动生成代码

MyBatis 介绍

MyBatis 是一款标准的 ORM 框架,被广泛的应用于各企业开发中。MyBatis 最早是 Apache 的一个开源项目 iBatis,2010 年这个项目由 Apache Software Foundation 迁移到了 Google Code,并且改名为 MyBatis,2013 年 11 月又迁移到 Github。从 MyBatis 的迁移史,也可以看出源码托管平台的发展史,GitHub 目前已经成为世界上最大的开源软件托管平台,建议大家多多关注这个全球最大的同性社交网站。

MyBatis 支持普通的 SQL 查询,存储过程和高级映射的优秀持久层框架。MyBatis 消除了几乎所有的 JDBC 代码和参数的手工设置以及对结果集的检索封装。MaBatis 可以使用简单的 XML 或注解用于配置和原始映射,将接口和 Java 的 POJO(Plain Old Java Objects,普通的 Java 对象)映射成数据库中的记录。

作为一款使用广泛的开源软件,它的特点有哪些呢?

优点

  • SQL 被统一提取出来,便于统一管理和优化
  • SQL 和代码解耦,将业务逻辑和数据访问逻辑分离,使系统的设计更清晰、更易维护、更易单元测试
  • 提供映射标签,支持对象与数据库的 ORM 字段关系映射
  • 提供对象关系映射标签,支持对象关系组件维护
  • 灵活书写动态 SQL,支持各种条件来动态生成不同的 SQL

缺点

  • 编写 SQL 语句时工作量很大,尤其是字段多、关联表多时,更是如此
  • SQL 语句依赖于数据库,导致数据库移植性差

MyBatis 几个重要的概念

Mapper 配置

可以使用基于 XML 的 Mapper 配置文件来实现,也可以使用基于 Java 注解的 MyBatis 注解来实现,甚至可以直接使用 MyBatis 提供的 API 来实现。

Mapper 接口

是指自行定义的一个数据操作接口,类似于通常所说的 DAO 接口。早期的 Mapper 接口需要自定义去实现,现在 MyBatis 会自动为 Mapper 接口创建动态代理对象。Mapper 接口的方法通常与 Mapper 配置文件中的 select、insert、update、delete 等 XML 结点存在一一对应关系。

Executor

MyBatis 中所有的 Mapper 语句的执行都是通过 Executor 进行的,Executor 是 MyBatis 的一个核心接口。

SqlSession

是 MyBatis 的关键对象,是执行持久化操作的独享,类似于 JDBC 中的 Connection,SqlSession 对象完全包含以数据库为背景的所有执行 SQL 操作的方法,它的底层封装了 JDBC 连接,可以用 SqlSession 实例来直接执行被映射的 SQL 语句。

SqlSessionFactory

是 MyBatis 的关键对象,它是单个数据库映射关系经过编译后的内存镜像。SqlSessionFactory 对象的实例可以通过 SqlSessionFactoryBuilder 对象类获得,而 SqlSessionFactoryBuilder 则可以从 XML 配置文件或一个预先定制的 Configuration 的实例构建出。

MyBatis 的工作流程

Mybatis Generator最完整配置详解_第1张图片

  • 首先加载 Mapper 配置的 SQL 映射文件,或者是注解的相关 SQL 内容。
  • 创建会话工厂,MyBatis 通过读取配置文件的信息来构造出会话工厂(SqlSessionFactory)。
  • 创建会话。根据会话工厂,MyBatis 就可以通过它来创建会话对象(SqlSession),会话对象是一个接口,该接口中包含了对数据库操作的增、删、改、查方法。
  • 创建执行器。因为会话对象本身不能直接操作数据库,所以它使用了一个叫做数据库执行器(Executor)的接口来帮它执行操作。
  • 封装 SQL 对象。在这一步,执行器将待处理的 SQL 信息封装到一个对象中(MappedStatement),该对象包括 SQL 语句、输入参数映射信息(Java 简单类型、HashMap 或 POJO)和输出结果映射信息(Java 简单类型、HashMap 或 POJO)。
  • 操作数据库。拥有了执行器和 SQL 信息封装对象就使用它们访问数据库了,最后再返回操作结果,结束流程。

在我们具体的使用过程中,就是按照上述的流程来执行。

是否要使用代码生成工具?


有些声音说使用代码生成工具不好,理由诸如:会不利于个人学习成长,生成的代码不好,可能使得一些初学者望而却步!

我要说,还是那句老话:工欲善其事必先利其器,善于使用工具可以大大提高工作效率,再现今社会效率就是王道。事情都是怎么简单怎么做,偷懒使社会进步。一些琐碎的事情,能交给工作去做就使用工具做,只有从琐碎的重复的劳动中摆脱出来,才能有时间专注其他,才能更好的思考业务,更好的做设计,才能提高代码质量,做出好的产品!

工具要灵活运用,能借几分力就借几分力,剩余的没办法就自己上手做,生成的代码不好就取对自己有用的进行修改使用。

mybatis-generator能做什么?


能够生成PO类,能生成mapper映射文件(其中包括基本的增删改查功能)、能生成mapper接口。这可是省了很多功夫,即使你要做些修改,添加下自己需要的功能或删除自己不需要的功能。

本文示例环境


maven工程、IDE是Intellij IDEA、mybatis-generator-maven-plugin插件。

Intellij IDEA也有几个mybatis-generator插件,可以安装使用,具体笔者也还没试过,这里不做介绍,有兴趣有时间可以研究一下。


修改pom.xml,添加mybatis-generator-maven-plugin插件



    org.mybatis.generator
    mybatis-generator-maven-plugin
    1.3.2
    
        
        src/main/resources/config/generatorConfig.xml
        true
        true
    
    
        
            Generate MyBatis Artifacts
            
                generate
            
        
    
    
        
            org.mybatis.generator
            mybatis-generator-core
            1.3.2
        
    

generatorConfig.xml 配置项详解

路径参考pom.xml ->src/main/resources/config/generatorConfig.xml






 
 
  



    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
        
    
    
    
    
        
        
    
    
    
    
    
        
        
        
        
        
        
        
        
        
        
        
        
        
        
    
    
    
    
    
        
        
    
    
    
    
    
        
        
        
        
    
    
    
    
        
        
        
        
        
        
        
        
        
        
        
         
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
         
         
         
         
            
            
            
            
             
            
             
            
            
            
         
         
         
    

通过插件直接生成

Mybatis Generator最完整配置详解_第2张图片

常见的坑

mysql8 和mysql5
1、不能这样 driverClass="com.mysql.jdbc.Driver" 写了,应该修改成 driverClass="com.mysql.cj.jdbc.Driver"
2、解决java.sql.SQLException: The server time zone value '???ú±ê×??±??' is unrecognized or represents more than one time zone.

3、值得注意的是,在 Spring Boot 2.1.0 中,com.mysql.jdbc.Driver 已经过期,推荐使用 com.mysql.cj.jdbc.Driver。

ps:

1、svn提交代码时提示告警信息没有配置数据源当运行sql时,可以忽略,如果有强迫症可以配置取消

Warning:(13, 35) No data sources are configured to run this SQL and provide advanced code assistance. Disable this inspection via problem menu (Alt+Enter).

2、 通过配置清楚告警 editor -> inspection -> sql -> no datasource configured

Warning:(78, 10) SQL dialect is not configured.

Mybatis Generator最完整配置详解_第3张图片

3、svn提交时提示报错 Element type must be declared

Error:(5, 2) Element type "generatorConfiguration" must be declared. 

找到报错位置,alt+enter:

1.Fetch external resource

2.Ignore external resource

3.Manually setup external resourc

Mybatis Generator最完整配置详解_第4张图片

参考

官网

中文译版

Maven依赖查询

MyBatisGeneator 详解博客地址

完 

你可能感兴趣的:(MyBatis,mybatis,maven,mysql)