一、mybatis-generator的基本配置与使用

  使用mybatis-generator来生成常用的dao层类与xml,可以满足基础的增删改查功能

  1. 添加pom依赖,常用的几个依赖包

  1. <dependency>
  2.   <groupId>org.mybatis.generator</groupId>
  3. <artifactId>mybatis-generator-core</artifactId>
  4. <version>1.3.7</version>
  5. </dependency>
  6. <dependency>
  7. <groupId>com.github.pagehelper</groupId>
  8. <artifactId>pagehelper-spring-boot-starter</artifactId>
  9. <version>1.2.3</version>
  10. </dependency>
  11. <dependency>
  12. <groupId>org.mybatis</groupId>
  13. <artifactId>mybatis</artifactId>
  14. <version>3.5.0</version>
  15. </dependency>

  

  2. 在resource下添加配置文件

generator.properties  数据库连接信息

  1. jdbc.driverClass=com.mysql.jdbc.Driver
  2. jdbc.connectionURL=jdbc:mysql://192.168.90.221:33010/mall
  3. jdbc.userId=root
  4. jdbc.password=123456

generatorConfig.xml  :生成器的一些基础配置在这里设置

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!DOCTYPE generatorConfiguration
  3. PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN"
  4. "http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd">
  5.  
  6. <generatorConfiguration>
  7. <properties resource="generator.properties"/>
  8. <context id="MySqlContext" targetRuntime="MyBatis3" defaultModelType="flat">
  9. <property name="beginningDelimiter" value="`"/>
  10. <property name="endingDelimiter" value="`"/>
  11. <property name="javaFileEncoding" value="UTF-8"/>
  12. <!-- 为模型生成序列化方法-->
  13. <plugin type="org.mybatis.generator.plugins.SerializablePlugin"/>
  14. <!-- 为生成的Java模型创建一个toString方法 -->
  15. <plugin type="org.mybatis.generator.plugins.ToStringPlugin"/>
  16. <!--覆盖生成XML文件-->
  17. <plugin type="org.mybatis.generator.plugins.UnmergeableXmlMappersPlugin" />
  18. <commentGenerator type="com.macro.mall.CommentGenerator">
  19. <!-- 是否去除自动生成的注释 true:是 : false:否 -->
  20. <property name="suppressAllComments" value="true"/>
  21. <property name="suppressDate" value="true"/>
  22. <property name="addRemarkComments" value="true"/>
  23. </commentGenerator>
  24.  
  25. <jdbcConnection driverClass="${jdbc.driverClass}"
  26. connectionURL="${jdbc.connectionURL}"
  27. userId="${jdbc.userId}"
  28. password="${jdbc.password}">
  29. </jdbcConnection>
  30.  
  31. <javaModelGenerator targetPackage="com.macro.mall.alm.model" targetProject="mall-mbg\src\main\java"/>
  32.  
  33. <sqlMapGenerator targetPackage="com.macro.mall.alm.mapper" targetProject="mall-mbg\src\main\resources"/>
  34.  
  35. <javaClientGenerator type="XMLMAPPER" targetPackage="com.macro.mall.alm.mapper"
  36. targetProject="mall-mbg\src\main\java"/>
  37. <!--生成全部表tableName设为%-->
  38. <table tableName="alm_goods_sift">
  39. <generatedKey column="id" sqlStatement="MySql" identity="true"/>
  40. </table>
  41. </context>
  42. </generatorConfiguration>

  

  3. 配置java运行类,用于生成dao层

CommentGenerator.java :生成类中注释相关的配置

  1. package com.macro.mall;
  2.  
  3. import org.mybatis.generator.api.IntrospectedColumn;
  4. import org.mybatis.generator.api.IntrospectedTable;
  5. import org.mybatis.generator.api.dom.java.Field;
  6. import org.mybatis.generator.internal.DefaultCommentGenerator;
  7. import org.mybatis.generator.internal.util.StringUtility;
  8.  
  9. import java.util.Properties;
  10.  
  11. /**
  12. * 自定义注释生成器
  13. * https://gitee.com/zscat-platform/mall on 2018/4/26.
  14. */
  15. public class CommentGenerator extends DefaultCommentGenerator {
  16. private boolean addRemarkComments = false;
  17.  
  18. /**
  19. * 设置用户配置的参数
  20. */
  21. @Override
  22. public void addConfigurationProperties(Properties properties) {
  23. super.addConfigurationProperties(properties);
  24. this.addRemarkComments = StringUtility.isTrue(properties.getProperty("addRemarkComments"));
  25. }
  26.  
  27. /**
  28. * 给字段添加注释
  29. */
  30. @Override
  31. public void addFieldComment(Field field, IntrospectedTable introspectedTable,
  32. IntrospectedColumn introspectedColumn) {
  33. String remarks = introspectedColumn.getRemarks();
  34. //根据参数和备注信息判断是否添加备注信息
  35. if (addRemarkComments && StringUtility.stringHasValue(remarks)) {
  36. //文档注释开始
  37. field.addJavaDocLine("/**");
  38. //获取数据库字段的备注信息
  39. String[] remarkLines = remarks.split(System.getProperty("line.separator"));
  40. for (String remarkLine : remarkLines) {
  41. field.addJavaDocLine(" * " + remarkLine);
  42. }
  43. addJavadocTag(field, false);
  44. field.addJavaDocLine(" */");
  45. }
  46. }
  47. }

 Generator.java :执行器,运行该类来进行代码的生成

  1. package com.macro.mall;
  2.  
  3. import org.mybatis.generator.api.MyBatisGenerator;
  4. import org.mybatis.generator.config.Configuration;
  5. import org.mybatis.generator.config.xml.ConfigurationParser;
  6. import org.mybatis.generator.internal.DefaultShellCallback;
  7.  
  8. import java.io.InputStream;
  9. import java.util.ArrayList;
  10. import java.util.List;
  11.  
  12. public class Generator {
  13. public static void main(String[] args) throws Exception {
  14. //MBG 执行过程中的警告信息
  15. List<String> warnings = new ArrayList<String>();
  16. //当生成的代码重复时,覆盖原代码
  17. boolean overwrite = true;
  18. //读取我们的 MBG 配置文件
  19. InputStream is = Generator.class.getResourceAsStream("/generatorConfig.xml");
  20. ConfigurationParser cp = new ConfigurationParser(warnings);
  21. Configuration config = cp.parseConfiguration(is);
  22. is.close();
  23.  
  24. DefaultShellCallback callback = new DefaultShellCallback(overwrite);
  25. //创建 MBG
  26. MyBatisGenerator myBatisGenerator = new MyBatisGenerator(config, callback, warnings);
  27. //执行生成代码
  28. myBatisGenerator.generate(null);
  29. //输出警告信息
  30. for (String warning : warnings) {
  31. System.out.println(warning);
  32. }
  33. }
  34. }

  4. 执行Generator类用于生成具体的dao层中相关的文件,常用4个文件,model类,xml文件,Dao接口,Example类

示例中的代码将生成以下几个文件:具体内容我就不展示了。小伙伴们自己拿个数据表试一下就知道了

AlmGoodsSift.java :自动将数据库中下划线分隔的表名转换为驼峰命名的java实体类

AlmGoodsSiftExample.java :封装了一下增删改查优化的方法

AlmGoodsSiftMapper.java : 接口类

AlmGoodsSiftMapper.xml : sql语句

5. 常用的方法

5.1 查询举例使用 example条件分页查询 , 单表查询使用Example配置条件基本都可以满足了

  1. public List<AlmGoodsSift> pageSift(PageParam pageParam) {
  2. //使用PageHelper来传递分页参数
  3. PageHelper.startPage(pageParam.getPageNum(),pageParam.getPageSize(),true);
  4. AlmGoodsSiftExample goodsSiftExample = new AlmGoodsSiftExample();
  5. AlmGoodsSiftExample.Criteria goodsSiftExampleCriteria = goodsSiftExample.createCriteria();
  6. // 查询status与deleteStatus指定值
  7. goodsSiftExampleCriteria.andStatusEqualTo(GoodsSiftStatusEnum.NORMAL.getCode());
  8. goodsSiftExampleCriteria.andDeleteStatusEqualTo(DeleteStatusEnum.Normal.getValue());
  9. // 可配置排序条件
  10. goodsSiftExample.setOrderByClause("sort_time desc");
  11. return goodsSiftMapper.selectByExample(goodsSiftExample);
  12. }

  5.2 插入就不在多述了,调用insert方法即可,条件更新与删除

  1. // 使用主键来更新,只更新参数中不为null的值
  2. public void updateGoods(Long id) {
  3. AlmGoodsSift status2Delete = new AlmGoodsSift();
  4. status2Delete.setId(id);
  5. status2Delete.setDeleteStatus(DeleteStatusEnum.Delete.getValue());
  6. goodsSiftMapper.updateByPrimaryKeySelective(status2Delete);
  7. }
  8.  
  9. // 使用example来更新,example配置查询条件,实体类中指定要更新的字段值
  10. public void updateGoods(Long id) {
  11. AlmGoodsSift status2Delete = new AlmGoodsSift();
  12. status2Delete.setDeleteStatus(DeleteStatusEnum.Delete.getValue());
  13.  
  14. AlmGoodsSiftExample goodsSiftExample = new AlmGoodsSiftExample();
  15. AlmGoodsSiftExample.Criteria goodsSiftExampleCriteria = goodsSiftExample.createCriteria();
  16. goodsSiftExampleCriteria.andIdEqualTo(id);
  17.  
  18. goodsSiftMapper.updateByExampleSelective(status2Delete,goodsSiftExample);
  19. }
  20.  
  21. // 删除的话调用以下方法即可
  22. goodsSiftMapper.deleteByExample(goodsSiftExample);
  23. goodsSiftMapper.deleteByPrimaryKey(id);

  

  5.3 注意方法名updateByExampleSelective中包含selective单词,意思是传递参数中有值的话就更新,为null不做任何处理,对于有些同学要将字段值置为null值的操作,selective就满足不了你了,使用不带 selective 的方法注意了,将全字段更新


二、使用自定义Dao来更新数据:使用mybatis生成工具只能满足简单的操作,复杂的sql语句还是得自己写

  1. 配置自定义dao接口,基于生成的mapper,可以省去很多重复的配置性代码

    1.1  新建DTO用来代替实体类,有时候实体类的属性满足不了业务,查询联表时,还会返回关联对象的数据,或者自定义属性数据。(示例中包含了对象与列表对象)     

  1. package com.macro.mall.alm.dto;
  2. import com.macro.mall.alm.model.AlmGoodsSift;
  3. import com.macro.mall.pms.model.PmsProduct;
  4. import com.macro.mall.sms.model.SmsCoupon;
  5. import lombok.Data;
  6. import java.util.List;
  7.  
  8. @Data
  9. public class GoodsSiftDTO extends AlmGoodsSift {
  10. /** * 名称 */
  11. private String goodsName;
  12. /** * 图片 */
  13. private String goodsPic;
  14. /** * 商品信息 */
  15. private PmsProduct product;
  16. /** * 优惠券列表 */
  17. private List<SmsCoupon> coupons;
  18. } 

    1.2  新建接口 AlmGoodsSiftDao.java文件

  1. package com.macro.mall.alm.mapper;
  2.  
  3. import com.macro.mall.alm.dto.GoodsSiftDTO;
  4. import java.util.List;
  5.  
  6. public interface AlmGoodsSiftDao {
  7.   // 自定义参数,自定义返回对象
  8. List<GoodsSiftDTO> listGoodsSiftDTO(GoodsSiftDTO goodsSiftDTO);
  9. }

    1.3  新建xml配置文件,AlmGoodsSiftDao.xml ,编写 listGoodsSiftDTO方法的sql语句,用到了 association、collection,联表查询不外乎这几种情况,使用以上配置基本上都可以满足业务需求了

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
  3. <mapper namespace="com.macro.mall.alm.mapper.AlmGoodsSiftDao">
      <!-- resultMap继承AlmGoodsSiftMapper的BaseResultMap配置 -->
  4. <resultMap id="GoodsSiftResultMap" type="com.macro.mall.alm.dto.GoodsSiftDTO" extends="com.macro.mall.alm.mapper.AlmGoodsSiftMapper.BaseResultMap">
  5. <!--dto中自定义的属性映射-->
  6. <result column="goods_name" jdbcType="VARCHAR" property="goodsName" />
  7. <result column="goods_pic" jdbcType="VARCHAR" property="goodsPic" />
  8. <!--关联对象-->
  9. <association property="product" resultMap="com.macro.mall.pms.mapper.PmsProductMapper.BaseResultMap" columnPrefix="p_" />
  10. <!--关联集合-->
  11. <collection property="coupons" columnPrefix="c_" resultMap="com.macro.mall.sms.mapper.SmsCouponMapper.BaseResultMap"></collection>
  12. </resultMap>
  13.  
  14. <select id="listGoodsSiftDTO" parameterType="com.macro.mall.alm.dto.GoodsSiftDTO" resultMap="GoodsSiftResultMap">
  15. select
  16. -- 返回goods_name、goods_pic的值,字段名称与配置中column名称匹配上即可
  17. ags.name goods_name , ags.pic goods_pic
  18. -- 返回alm_goods_sift的所有字段信息,resultMap继承了AlmGoodsSiftMapper的配置,所以这里无需重复定义映射关系
  19. ags.* ,
  20. -- product表的字段都用p_开头重命名,会使用resultMap中相应的配置进行转换
  21. pp.name p_name , pp.price p_price , pp.sale p_sale ,pp.status p_status , pp.stock p_stock ,pp.note p.note, pp.freight p_freight ,
  22. -- coupon表的字段都用c_开头重命名
  23. sc.note c_note, sc.code s_code , sc.amount s_amount sc.start_time s_start_time ,sc.end_time s_end_time
  24. from alm_goods_sift ags
  25. -- 与product表的关系是一对一,使用association来配置,将结果映射为dto中的一个对象属性
  26. left join pms_product pp on pp.id = ags.productId
  27. -- 与coupon表的关系是一对多,使用collection来配置,结果将封装成集合
  28. left join sms_coupon sc on sc.coupon_id = ags.coupon_id
  29. </select>
  30. </mapper>

    1.4 dao接口多参数传递,普通参数+集合参数

  1. // 查询集合范围内的数据
  2. void listInIds(@Param("goodsId") Long goodsId, @Param("ids") List<Long> ids);

 对应xml的sql配置

  1. <select id="listInIds">
  2. select * from alm_goods_sift ags where ags.good_id=#{goodsId} and ags.id in
  3. <foreach collection="ids" item="id" separator="," open="(" close=")">
  4. #{id}
  5. </foreach>
  6. </select>

ok,以上就是小弟在日常工作环境中比较常用的例子了,基本上能够满足日常开发需求了~~~~~~

mybatis generator 的日常使用的更多相关文章

  1. 取代 Mybatis Generator,这款代码生成神器配置更简单,开发效率更高!

    作为一名 Java 后端开发,日常工作中免不了要生成数据库表对应的持久化对象 PO,操作数据库的接口 DAO,以及 CRUD 的 XML,也就是 mapper. Mybatis Generator 是 ...

  2. mybatis Generator生成代码及使用方式

    本文原创,转载请注明:http://www.cnblogs.com/fengzheng/p/5889312.html 为什么要有mybatis mybatis 是一个 Java 的 ORM 框架,OR ...

  3. 使用MyBatis Generator自动创建代码(dao,mapping,poji)

    连接的数据库为SQL server2008,所以需要的文件为sqljdbc4.jar 使用的lib库有: 在lib库目录下新建一个src文件夹用来存放生成的文件,然后新建generatorConfig ...

  4. mybatis generator 自动生成dao层映射代码

    资源: doc url :http://www.mybatis.org/generator/ download:https://github.com/mybatis/generator/release ...

  5. mybatis generator maven插件自动生成代码

    如果你正为无聊Dao代码的编写感到苦恼,如果你正为怕一个单词拼错导致Dao操作失败而感到苦恼,那么就可以考虑一些Mybatis generator这个差价,它会帮我们自动生成代码,类似于Hiberna ...

  6. mybatis generator.xml 配置 自动生成model,dao,mapping

    generator.xml文件: <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE gener ...

  7. Mybatis generator的使用

    <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE generatorConfiguration ...

  8. MyBatis Generator作为maven插件自动生成增删改查代码及配置文件例子

    什么是MyBatis Generator MyBatis Generator (MBG) 是一个Mybatis的代码生成器,可以自动生成一些简单的CRUD(插入,查询,更新,删除)操作代码,model ...

  9. 记一次 IDEA mybatis.generator 自定义扩展插件

    在使用 idea mybatis.generator 生成的代码,遇到 生成的代码很多重复的地方, 虽然代码是生成的,我们也不应该允许重复的代码出现,因为这些代码后期都要来手动维护. 对于生成时间戳注 ...

随机推荐

  1. ElasticSearch--validate验证搜索语句是否合法或者存在语法错误

    GET /accounts/person/_validate/query?explain { "query":{ "match": { "user&q ...

  2. 线程基础8-quene讲解

    PriorityBlockingQueue是一个基于优先级堆的无界的并发安全的优先级队列(FIFO),队列的元素按照其自然顺序进行排序,或者根据构造队列时提供的 Comparator 进行排序,具体取 ...

  3. JDK8--09:全新的时间API

    在JDK8之前,时间有各种问题,最大的问题就是,我们使用的时间格式化类SimpleDateFormat不是线程安全的 为了更准确的说明SimpleDateFormat非线程安全,演示一个并发做时间格式 ...

  4. 搞懂ELK并不是一件特别难的事(ELK)

    本篇文章主要介绍elk的一些框架组成,原理和实践,采用的ELK本版为7.7.0版本 一.ELK介绍 1.1.ELK简介 ELK是Elasticsearch.Logstash.Kibana三大开源框架首 ...

  5. 主存到Cache直接映射、全相联映射和组相联映射

    转自:https://blog.csdn.net/dongyanxia1000/article/details/53392315 ---- Cache的容量很小,它保存的内容只是主存内容的一个子集,且 ...

  6. css实现左边定宽右边自适应的5种方法总汇

    在网页布局中,通常需要实现左边定宽右边自适应布局,默认html的结构如下: <div class="box"> <div class="left&quo ...

  7. 数据库基础01-SQL基础语法

    数据库查询语言(Structured Query Language) 数据库查询语言: DDL(data definition language) -数据定义语言,建库建表 DML (data man ...

  8. redo log 与 binlog

    redo log 与 binlog   redo log redo log (重做日志)是处于存储引擎层的,是InnoDB引擎特有的 redo log 存储的是物理日志 --- 即,"在某个 ...

  9. YAML & JSON &XML如何选择

    前言 本文翻译https://www.csestack.org/yaml-vs-json-vs-xml-difference/,下文会针对当前现有的数据序列化语言做下梳理.重点突出YAML是什么,优缺 ...

  10. Cow Relays,过N条边的最短路

    题目链接 题意: 找从a到b的经过N条边的最短路 分析: 有点板子...方法:矩阵存,然后有个类似快速幂的思想,然后再加上离散化就好了. 没啥写的,只能说说矩阵了,我用的方法是先枚举i,j再枚举k,当 ...