实际开发中 dao、entity的代码怎样自动生成?一款工具送给你
01
关注"一猿小讲"朋友,都知道以往的文章一直倡导拒绝 CRUD,那到底什么是 CRUD?今天咱们就聊聊 Java 妹子小猿与数据库老头交互的事儿。
产品小汪铿锵有力的说:小猿同学,咱们近期要推一爆款产品,你先实现用户基本的登录的功能。
啥玩意?小猿内心嘀咕嘀咕:爆款产品,还基本的登录,那不就是实现用户的 CRUD(增删改查)么?
小汪一句话,累死三军。扯皮一上午的会议终于结束了,于是小猿便叫了个外卖,填补了肚子的空虚后,小猿习惯性的在脑海里,开始了爆款产品的从 0 到 1 的脑图搭建。
小猿的思路是这样的:先分析一下产品汪的需求,看看是否会有遗漏的需求功能点;然后进行数据库表结构设计;接着就是小猿喜欢的码代码操作。
小猿码代码的方式,那是出了名的相当特别的认真,所以引来了大家的围观。
之前只是道听途说,今日一见果然名不虚传。只见小猿先是在 sqlmaps 文件苦下了一番功夫,一个字母、一个标点的去编写映射文件;接着又一个一个去定义实体类,数据库表的字段一个一个的进行映射;然后用同样认真的方式去编写 dao 的代码;最后又回过头确认数据库表字段与实体类是否一一对应。
看着小猿认真的态度,确实值得赞扬。但是围观小猿码代码之后,看得我反而肾疼,这不都是重复性劳动么,难道就没有什么好的方式可以推荐给小猿吗?
02
带着小猿徒手造工具。
小猿,你找个你比较钟意的目录,创建个文件夹,你命名为 mybatis-generator,其实起啥名字无所谓啊,这个就是你的工具包目录,下面的东西都放这个目录中。
小猿,看看你电脑上有没有连接数据库的驱动包,没有咱就下载一个,给你个下载链接,再给你一分钟时间,把 jar 包下载一下,后面会用到,我去抽根烟。
https://repo1.maven.org/maven2/mysql/mysql-connector-java/5.1.38/mysql-connector-java-5.1.38.jar
小猿你下载好了没,我一根烟都抽完啦。
既然你下载完了,那就再看看电脑上有没有这个包 mybatis-generator-core-1.3.2.jar,别管它是干啥用的,没有就按照下面的地址下载就是啦,反正后面要用到。
https://repo1.maven.org/maven2/org/mybatis/generator/mybatis-generator-core/1.3.2/mybatis-generator-core-1.3.2.jar
小猿,到这咱们的准备工作差不多了,但是还需要你创建个配置文件 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>
<!-- 指定数据连接驱动jar地址 -->
<classPathEntry
location="/app/mybatis-generator/mysql-connector-java-5.1.38.jar" /> <!-- 指定数据连接驱动jar地址 -->
<context id="db2Tables" targetRuntime="MyBatis3">
<plugin type="org.mybatis.generator.plugins.SerializablePlugin"/>
<commentGenerator>
<property name="javaFileEncoding" value="UTF-8"/>
<!-- 是否生成注释代时间戳 -->
<property name="suppressDate" value="true" />
<!-- 是否取消注释 -->
<property name="suppressAllComments" value="false" />
</commentGenerator> <!--数据库连接的信息:驱动类、连接地址、用户名、密码 -->
<jdbcConnection driverClass="com.mysql.jdbc.Driver"
connectionURL="jdbc:mysql://localhost:3306/baokuan"
userId="root" password="root" /> <!-- targetProject:生成实体类存放的目录 -->
<javaModelGenerator targetPackage="com.cool.baokuan.modules.model"
targetProject="/app/mybatis-generator/src">
<property name="enableSubPackages" value="true" />
<property name="trimStrings" value="true" />
</javaModelGenerator> <!-- targetProject:mapper映射文件生成的位置 -->
<sqlMapGenerator targetPackage="com.cool.baokuan.modules.dao"
targetProject="/app/mybatis-generator/src">
<property name="enableSubPackages" value="true" />
</sqlMapGenerator> <!-- targetPackage:mapper接口生成的位置 -->
<javaClientGenerator targetPackage="com.cool.baokuan.modules.dao"
targetProject="/app/mybatis-generator/src" type="XMLMAPPER">
<property name="enableSubPackages" value="true" />
</javaClientGenerator> <!-- 指定数据库表 -->
<table tableName="T_USER" domainObjectName="User"
enableCountByExample="false" enableUpdateByExample="false"
enableDeleteByExample="false" enableSelectByExample="false"
selectByExampleQueryId="false"/> </context>
</generatorConfiguration>
小猿,改完目录了吧?
既然改完了,那就差最后一步了,你在创建个执行脚本,你的系统是 Windows,所以脚本名称为 run.bat,我的是Mac,所以我的脚本名称为 run.sh。创建完成再把下面的内容 copy 进去。
Java -jar mybatis-generator-core-1.3.2.jar -configfile generatorConfig.xml -overwrite
好了,小猿,恭喜你已经徒手完成工具包的搭建,你自己看看效果,满意不?
小猿,是骡子是马,咱们都应该牵出来溜溜。到你小试牛刀、一展歌喉的时候啦。一键运行 run.bat 或者 run.sh 试试。
哇塞,看到上面的效果,小猿着实惊呆啦,因为有了这个工具,以后再也不用重复的写映射文件、写实体类、写 dao 了,就只配置配置数据库的表名就行啦,简直太帅啦。
小猿,切莫欣喜过度。你以后使用这个工具时,一定要注意修改 generatorConfig.xml 文件中的以下几个地方,不然会出幺蛾子。
1. 修改指定数据连接驱动 jar 地址;
2. 修改数据库连接的url、用户名、密码;
3. 修改 targetProject 目录为你电脑的目录;
4. 修改数据库表。
好了,小猿,师傅领进猿门,修行在于个人,以后就看你自己的造化啦(?)。
03
造化弄人,小猿忙想招。
产品刚上线没几天,用户量陡增,真是爆款产品啊,用户查询越来越慢。
产品小汪牛掰哄哄的说:小猿,最近有好多用户反应系统体验越来越慢,是不是代码有 Bug 啊?
啥玩意,代码有 Bug,代码怎么可能有 Bug!其实小猿内心跟明镜一样,比任何人都清楚,是用户表太大了,以至于查询过慢,那该咋办呢?
只见小猿,拿出神笔,在本本上重重的写下啦“分库分表”,于是开始了分库分表一系列的烧脑的验算过程,不得不佩服小猿的数学功底,趁小猿不注意,我偷摸的记了一些,赶紧分享给你们。
分库分表的规则
若有 M 个数据库主节点,数据表总计拆分成 N 张子表,拆表字段可数值化转换为 X,则数据库实例的序号为 X % M; 数据表的序号为 X % N。
例如:当主节点个数 M=6,总计拆表数 N=1200 时,单库内子表个数为 200,那么数据库实例的序号为 X % 6;数据表的序号为 X % 1200。
那么序号为 0 的数据库中,会有序号为 0,6,12,18… 的数据表;序号为 1 的数据库中,会有序号为 1,7,13,19… 的数据表,以此类推。
拆表字段数值化机制
取拆表依据字段,对其取 crc32,之后取绝对值,即为上述“分库分表公式”中的 X。
没想到小猿,还专门为此写了段伪代码。
java.util.zip.CRC32 crc32 = new java.util.zip.CRC32();
// 拆分字段进行crc32
crc32.update(splitField.getBytes(DEFAULT_ENCODING));
long x = java.lang.Math.abs(crc32.getValue()); // 数据库下标
long n = x % dbNum;
String dbPos = String.format("%02d", n);
System.out.println("数据库的下标:" + dbPos); // 表下标
long m = x % tableNum;
String tablePos = String.format("%03d", m);
System.out.println("表的下标:" + tablePos);
而且,小猿在稿纸最后落款的时候,还写了三遍:Sharding-Jdbc、Sharding-Jdbc、Sharding-Jdbc。尤其是写了三遍,所以各位看官要自行脑补一下这个玩意啦,不然以后就永远跟不上小猿的节奏啦。
04
不愧是能让大家一起围观的小猿,看到这我也只能 ORZ 膜拜小猿。引用一句经典:你大爷还是你大爷,但是小猿已经不再是以前重复 CRUD 的小猿啦。士别三日当刮目相待,所以不要小看身边的每一位小猿呦。

实际开发中 dao、entity的代码怎样自动生成?一款工具送给你的更多相关文章
- 试试使用 eolinker 扫描 GitLab 代码注释自动生成 API 文档?
前言: 一般写完代码之后,还要将各类参数注解写入API文档,方便后续进行对接和测试,这个过程通常都很麻烦,如果有工具可以读取代码注释直接生成API文档的话,那会十分方便. 此前一直都是在使用eolin ...
- Eclipse中设置在创建新类时自动生成注释
方法一:Eclipse中设置在创建新类时自动生成注释 windows-->preference Java-->Code Style-->Code Templates code--&g ...
- ios 开发中使用SVN管理代码
今天新公司需要使用SVN管理代码,就在网上查看相关的资料,现在把相关用法记录下来: 1.使用的是这个软件Cornerston 网上有很多相应的下载链接,可以去查看 2.下载安装之后,首先需要添加仓库r ...
- 如何在Android开发中让你的代码更有效率
最近看了Google IO 2012年的一个视频,名字叫做Doing More With Less: Being a Good Android Citizen,主要是讲如何用少少的几句代码来改善And ...
- 什么是静态代码块?java中如何使用空参构造方法自动生成不同名字的对象,使用非静态的属性和静态属性有什么区别,原因是什么?如何理解static关键字
静态代码块?类加载就执行,最先执行 class demo{ static int num; static{ num=10; num*=3; System.out.println("haha& ...
- java DMO及增删改查代码的自动生成
在web开发过程中,尤其是后台管理系统的开发中,少不了增删改成的基础操作,原来我自己的做法是一份一份的拷贝粘贴,然后修改其中的不同,然而这样既枯燥无味又浪费了大量的时间,所以根据自己项目结构的特点写了 ...
- mybatis根据表逆向自动化生成代码(自动生成实体类、mapper文件、mapper.xml文件)
.personSunflowerP { background: rgba(51, 153, 0, 0.66); border-bottom: 1px solid rgba(0, 102, 0, 1); ...
- hibernate中.hbm.xml和注解方式自动生成数据表的简单实例(由新手小白编写,仅适用新手小白)
绝逼新手小白,so 请大神指点! 如果真的错的太多,错的太离谱,错的误导了其他小伙伴,还望大神请勿喷,大神请担待,大神请高抬贵嘴......谢谢. 好了,正题 刚接触ssh,今天在搞使用.hbm.xm ...
- 在idea中,mavne项目使用mybatis-generator-maven-plugin自动生成实体了的时候,在maven插件里面始终不显示
最近想学习mybatis的知识,自己搭了个简单的ssm框架,想通过插件自动生成实体类,发现想要的插件一直都没显示出来,着实很郁闷: pom.xm中的配置: <!--mybatis-generat ...
随机推荐
- 一次生产环境搭建11g RAC的记录
一.使用惠普3par工具配置共享存储 该部分可由惠普工作人员协助配置,只需将需求告知即可.如果想自己配置,惠普厂商会发送相关的软件工具以及操作手册给用户. 用putty登陆共享存储,使用showpd ...
- 轻量级MVC框架(自行开发)
源码及demo: https://github.com/killallspree/myFrame/
- flask 模型之间的关系 操作注意点
在创建模型时使用 # 关联表与表 添加以下参数 lazy='dynamic' 在两个表之间使用关联字段可以再次进行操作,筛选,分页 具体操作请看 https://www.bilibili.com/ ...
- SpringBoot——Cache使用原理及Redis整合
前言及核心概念介绍 前言 本篇主要介绍SpringBoot2.x 中 Cahe 的原理及几个主要注解,以及整合 Redis 作为缓存的步骤 核心概念 先来看看核心接口的作用及关系图: CachingP ...
- c 将年月日转化为星期
/*得到年月日转化为星期几*/ LOCAL ulong_t DateWeekGet(ulong_t year,ulong_t month,ulong_t day) { ulong_t c = ; ul ...
- kerberos系列之hdfs&yarn认证配置
一.安装hadoop 1.解压安装包重命名安装目录 [root@cluster2_host1 data]# tar -zxvf hadoop-2.7.1.tar.gz -C /usr/local/ [ ...
- python turtle笔记
Turtle库是Python语言中一个很流行的绘制图像的函数库,想象一个小乌龟,在一个横轴为x.纵轴为y的坐标系原点,(0,0)位置开始,它根据一组函数指令的控制,在这个平面坐标系中移动,从而在它 ...
- JSP+Servlet+C3P0+Mysql实现的苹果网上商城
项目简介 项目来源于:https://github.com/gpengDemo/Estore 本系统基于JSP+Servlet+C3P0+Mysql.涉及技术少,易于理解,适合JavaWeb初学者学习 ...
- 家乐的深度学习笔记「4」 - softmax回归
目录 softmax回归 分类问题 softmax回归模型 softmax运算 矢量表达式 单样本分类的矢量计算表达式 小批量样本分类的矢量计算表达式 交叉熵损失函数 模型预测及评价 图像分类数据集( ...
- SpringBoot项目中应用Jedis和一些常见配置
优雅的使用Jedis Redis的Java客户端有很多,Jedis是其中使用比较广泛和性能比较稳定的一个.并且其API和RedisAPI命名风格类似,推荐大家使用 在项目中引入Jedis 可以通过Ma ...