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,不用操心文件内容,直接把下面的代码拿过去改吧改吧就行啦。注意一定要把里面涉及到的目录,都改成你电脑上的目录,你先修改一会儿,我去泡杯咖啡喝喝。内容如下(注意一定要修改目录)

/p>

PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN"

"http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd">

location="/app/mybatis-generator/mysql-connector-java-5.1.38.jar" />

connectionURL="jdbc:mysql://localhost:3306/baokuan"

userId="root" password="root" />

targetProject="/app/mybatis-generator/src">

targetProject="/app/mybatis-generator/src">

targetProject="/app/mybatis-generator/src" type="XMLMAPPER">

enableCountByExample="false" enableUpdateByExample="false"

enableDeleteByExample="false" enableSelectByExample="false"

selectByExampleQueryId="false"/>

小猿,改完目录了吧?

既然改完了,那就差最后一步了,你在创建个执行脚本,你的系统是 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 的小猿啦。士别三日当刮目相待,所以不要小看身边的每一位小猿呦。

java dao层代码生成器_实际开发中 dao、entity的代码怎样自动生成?一款工具送给你...相关推荐

  1. Spring+SpringMVC+Mybatis(开发必备技能)04、mybatis自动生成mapper_dao_model(包含工具与视频讲解) 纯绿色版本、配套使用视频,100%运行成功

    Spring+SpringMVC+Mybatis(开发必备技能) 04.mybatis自动生成mapper_dao_model(包含工具与视频讲解) 纯绿色版本.配套使用视频,100%运行成功 百度网 ...

  2. 实际开发中 dao、entity的代码怎样自动生成?一款工具送给你

    01 关注"一猿小讲"朋友,都知道以往的文章一直倡导拒绝 CRUD,那到底什么是 CRUD?今天咱们就聊聊 Java 妹子小猿与数据库老头交互的事儿. 产品小汪铿锵有力的说:小猿同 ...

  3. 微信开发中消息回复的代码_消息中的消息

    微信开发中消息回复的代码 Ste·ga·no·graph·y / stegəˈnägrəfi / (noun): the practice of concealing messages or info ...

  4. java.lang.IllegalArgumentException: 字符[_]在域名中永远无效。 at

    [http-nio-8080-exec-1] org.apache.coyote.AbstractProcessor.parseHost [xxx_tomcat] 是无效主机注意:更多的请求解析错误将 ...

  5. php jsp显示数据排序,JSP_SQL数据库开发中的一些精典代码,1.按姓氏笔画排序: select * From T - phpStudy...

    SQL数据库开发中的一些精典代码 1.按姓氏笔画排序: select * From TableName Order By CustomerName Collate Chinese_PRC_Stroke ...

  6. HTML5+移动APP开发中遇到的各种代码元素的含义(四)

    系列目录 跨平台移动APP开发中遇到的各种代码元素的含义(一) HTML5+移动APP开发中遇到的各种代码元素的含义(二) HTML5+移动APP开发中遇到的各种代码元素的含义(三) 目录 系列目录 ...

  7. jsp/html开发中常用的JS代码和页面特效代码

    1.jsp/html开发中常用的JS代码 1.后退 前进 <input type="button" value="后退" onClick="hi ...

  8. Java代码实现自动生成产品标签图片(升级版)

    上次写过一次Java代码实现自动生成产品标签图片的案例,今天工作中又用到了,再来补充一下. 要求,生成的标签戴上logo标志,也就是加上图片:直接上代码: public static void cre ...

  9. html自动联想什么意思,Eclipse中html/js/jsp代码的自动联想

    1.打开eclipse→Windows→Preferences→Java→Editor→Content Assist 修改Auto Activation triggers for java的值为:.a ...

最新文章

  1. php自动到某个时间提醒,2周后,php脚本cron作业将提醒消息发送到特定的电子邮件地址...
  2. leetcode算法题--顺时针打印矩阵
  3. Android Studio Debug
  4. C语言编译构建系统,C语言 之建立静态链接库
  5. 用c语言编写数码管的显示函数,各位大神,如何用C语言实现在数码管上实现1234同时亮...
  6. 大学有哪些专业python_python就业方向有哪些?
  7. mpc5774时钟监控寄存器_单片机如何才能不死机之内外部时钟
  8. 并发译文翻译计划(二)
  9. 第一学期《计算机网络》作业一_新学期学习计划合集5篇-其他范文
  10. dijkstra算法代码_深度好文:改变了我们生活方式最有影响力的5种图算法
  11. vue-router配置介绍和使用方法(二)
  12. html语言中表格由什么组成,html表格基本结构是什么?html表格的完整代码详解
  13. spring4笔记----spring生命周期属性
  14. ut-890/485-usb驱动 FOR Linux
  15. bochs运行xp_bochs xp镜像下载
  16. 线性混合效应模型学习
  17. 呆萌却实际可怕的动物:蛇鹫会踢腿 大熊猫攻击凶猛
  18. android fastboot原理,Android 手机进入不了fastboot模式的解决方案
  19. MarkDown的简介
  20. 测试基础之一——静态测试,动态测试,黑盒测试,白盒测试,α测试,β测试的定义

热门文章

  1. HTML-input标签事件监听
  2. 如何用vscode配置java
  3. android bitmap 失真,Bitmap.createScaledBitmap 失真
  4. 荣耀猎人游戏本有何优势?一机多用你值得体验
  5. 靠着这份年终总结,我涨薪8K,成为领导眼中最闪亮的星~
  6. SRv6测试技术简介
  7. app屡次停止运行怎么解决_小说APP用户黏性不强怎么解决?
  8. 极验onelogin 一键登录 接入流程与问题
  9. 如何正确关机,重启,以及常用的快捷键
  10. SQL SERVER 2约束的创建,删除,重命名