真赞!IDEA中这么玩MyBatis,让编码速度飞起!

互联网架构师

共 6444字,需浏览 13分钟

 · 2021-08-23

上一篇:深夜看了张一鸣的微博,让我越想越后怕

作者:Orson

来源:cnblogs.com/java-class/p/6237564.html


IDEA 逆向 MyBatis 工程时,不像支持 Hibernate 那样有自带插件,需要集成第三方的 MyBatis Generator。

MyBatis Generator的详细介绍 http://mybatis.github.io/generator/index.html


本篇博客图解 MyBatis Generator 的使用过程,并结合实战说明逆向工程的使用方式。


搭建 MyBatis Generator 插件环境


a. 添加插件依赖 pom.xml

<!--mybatis 逆向生成插件--><plugin>     <groupId>org.mybatis.generator</groupId>     <artifactId>mybatis-generator-maven-plugin</artifactId>     <version>1.3.2</version>     <configuration>        <configurationFile>src/main/resources/generatorConfig.xml</configurationFile>        <verbose>true</verbose>        <overwrite>true</overwrite>     </configuration>     <executions>        <execution>           <id>Generate MyBatis Artifacts</id>        </execution>     </executions>     <dependencies>        <dependency>          <groupId>org.mybatis.generator</groupId>          <artifactId>mybatis-generator-core</artifactId>          <version>1.3.2</version>        </dependency>     </dependencies></plugin>


b.配置文件 generatorConfig.xml

<?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"><generatorConfiguration>    <properties resource="jdbc.properties"/>    <classPathEntry location="${jdbc_driverLocation}"/>  <!--指定特定数据库的jdbc驱动jar包的位置-->
<context id="default" targetRuntime="MyBatis3"> <!-- optional,旨在创建class时,对注释进行控制 --> <commentGenerator> <property name="suppressDate" value="true"/> <property name="suppressAllComments" value="true"/> </commentGenerator>
<!--jdbc的数据库连接 --> <jdbcConnection driverClass="${jdbc_driverClass}" connectionURL="${jdbc_url}" userId="${jdbc_user}" password="${jdbc_pwd}"> </jdbcConnection>
<!-- 非必需,类型处理器,在数据库类型和java类型之间的转换控制--> <javaTypeResolver><property name="forceBigDecimals" value="false"/></javaTypeResolver>
<!-- Model模型生成器,用来生成含有主键key的类,记录类 以及查询Example类 targetPackage 指定生成的model生成所在的包名 targetProject 指定在该项目下所在的路径 --> <javaModelGenerator targetPackage="com.rambo.sdm.dao.pojo" targetProject="src/main/java"> <!-- 是否允许子包,即targetPackage.schemaName.tableName --> <property name="enableSubPackages" value="false"/> <!-- 是否对model添加 构造函数 --> <property name="constructorBased" value="true"/> <!-- 是否对类CHAR类型的列的数据进行trim操作 --> <property name="trimStrings" value="true"/> <!-- 建立的Model对象是否 不可改变 即生成的Model对象不会有 setter方法,只有构造方法 --> <property name="immutable" value="false"/> </javaModelGenerator>
<!--Mapper映射文件生成所在的目录 为每一个数据库的表生成对应的SqlMap文件 --> <sqlMapGenerator targetPackage="com.rambo.sdm.dao.mapper" targetProject="src/main/java"> <property name="enableSubPackages" value="false"/> </sqlMapGenerator>
<!-- 客户端代码,生成易于使用的针对Model对象和XML配置文件 的代码 type="ANNOTATEDMAPPER",生成Java Model 和基于注解的Mapper对象 type="MIXEDMAPPER",生成基于注解的Java Model 和相应的Mapper对象 type="XMLMAPPER",生成SQLMap XML文件和独立的Mapper接口 --> <javaClientGenerator targetPackage="com.rambo.sdm.dao.inter" targetProject="src/main/java" type="XMLMAPPER"> <property name="enableSubPackages" value="true"/> </javaClientGenerator>
<table tableName="user" domainObjectName="UserPO"> <generatedKey column="uuid" sqlStatement="SELECT REPLACE(UUID(),'-','') UUID FROM DUAL"/> </table> </context></generatorConfiguration>


c.数据库配置文件 jdbc.properties

jdbc_driverLocation=D:\\Program Files\\Repository\\mysql\\mysql-connector-java\\5.1.38\\mysql-connector-java-5.1.38.jarjdbc_driverClass=com.mysql.jdbc.Driverjdbc_url=jdbc:mysql://localhost:3306/db_test?useUnicode=true&amp;characterEncoding=utf-8jdbc_user=rootjdbc_pwd=123456validationQuery = select 1


d. 配置插件启动项


项目实战


User类就是普通的实体类,定义了数据库对应的字段,以及set/get方法。

Mybatis 引入了 Example 类,用来封装数据库查询条件。


a.比如在一个项目 我们要删除某个小组下某个用户的信息

public int deleteUserApplyInfo(long user_id,long team_id){        StudyTeamUserApplyInfoExample ue = new StudyTeamUserApplyInfoExample();        ue.createCriteria().andUserIdEqualTo(new BigDecimal(user_id)).andTeamIdEqualTo(new BigDecimal(team_id));return studyTeamUserApplyInfoDAO.deleteByExample(ue);}


b.根据小组ID(非主键 更新小组信息)

public int updateStudyTeamInfo(StudyTeamInfo st){        StudyTeamInfoExample ste = new StudyTeamInfoExample();        ste.createCriteria().andTeamIdEqualTo(st.getTeamId());return studyTeamInfoDAO.updateByExampleSelective(st,ste);}


c.其它

(1)模糊查询并且排序 

public List<StudyTeamInfo> getStudyTeamInfoByName(String team_name){        StudyTeamInfoExample se = new StudyTeamInfoExample();        se.createCriteria().andTeamNameLike("%"+team_name+"%").andEnableEqualTo((short)1);        se.setOrderByClause("team_score desc");        List<StudyTeamInfo> ls = studyTeamInfoDAO.selectByExample(se);if(ls!=null&&ls.size()>0){return ls;        }return null;    }

(2)大于等于某个分数 并且小于某个分数的查询

public StudyTeamLevel getStudyTeamLevel(long score){        StudyTeamLevelExample le = new StudyTeamLevelExample();        le.createCriteria().andNeedScoreLessThanOrEqualTo(score).andUpScoreGreaterThan(score);        List<StudyTeamLevel> ls = studyTeamLevelDAO.selectByExample(le);if(ls!=null&&ls.size()>0){return ls.get(0);        }return null;}


感谢您的阅读,也欢迎您发表关于这篇文章的任何建议,关注我,技术不迷茫!小编到你上高速。

    · END ·
最后,关注公众号互联网架构师,在后台回复:2T,可以获取我整理的 Java 系列面试题和答案,非常齐全


正文结束


推荐阅读 ↓↓↓

1.不认命,从10年流水线工人,到谷歌上班的程序媛,一位湖南妹子的励志故事

2.如何才能成为优秀的架构师?

3.从零开始搭建创业公司后台技术栈

4.程序员一般可以从什么平台接私活?

5.37岁程序员被裁,120天没找到工作,无奈去小公司,结果懵了...

6.IntelliJ IDEA 2019.3 首个最新访问版本发布,新特性抢先看

7.这封“领导痛批95后下属”的邮件,句句扎心!

8.15张图看懂瞎忙和高效的区别!

一个人学习、工作很迷茫?


点击「阅读原文」加入我们的小圈子!

浏览 21
点赞
评论
收藏
分享

手机扫一扫分享

举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

举报