MyBatis Generator 使用配置

⚠️ 内容声明 本文写于 2016 年,内容已不再维护更新。文章中的部分内容已过时: MyBatis Generator 版本:文中使用的是 1.3.5 版本,当前最新版本已更新至 1.4.x,提供了更多功能和改进 MySQL 驱动:文中使用的 com.mysql.jdbc.Driver 已被弃用,应使用 com.mysql.cj.jdbc.Driver Eclipse IDE:现代 Java 开发更多使用 IntelliJ IDEA,且 IDE 对 MyBatis 的支持已有专门的插件(如 MyBatisX) 当前最佳实践: 使用 MyBatis Generator 最新版本(1.4.x) 配合现代构建工具(Maven/Gradle)和 IDE 插件使用 考虑使用 MyBatis-Plus 等增强框架,提供更便捷的代码生成和 CRUD 操作 对于新项目,建议评估是否需要代码生成器,或考虑使用 JPA/Spring Data JPA 等现代 ORM 方案 MyBatis Generator (MBG) 是一个 MyBatis 的代码生成器。MBG 可以内省数据库的表(或多个表),然后生成可以用来访问(多个)表的基础对象。这样在与数据库表进行交互时,不需要手动创建对象和配置文件。MBG 解决了对数据库操作影响最大的一些简单 CRUD(插入、查询、更新、删除)操作。 MyBatis Generator 文档 MyBatis Generator 官方文档 MyBatis Generator 中文文档 通过 Maven 运行 MBG MyBatis Generator (MBG) 包含了一个可以集成到 Maven 构建的 Maven 插件,按照 Maven 的配置惯例,将 MBG 集成到 Maven 很容易。 ...

September 10, 2016 · 5 min · 924 words · Me, LLM

SpringMVC 入门使用

⚠️ 内容声明 本文写于 2016 年,部分内容已过时,仅供历史参考: XML 配置方式的 SpringMVC 已不再推荐 web.xml 配置前端控制器的方式已过时 JSP 视图技术已较少使用 文中提及的 Struts2 框架已基本淘汰 当前最佳实践(2024+): 项目创建:使用 Spring Initializr 生成 Spring Boot 项目,自动配置 DispatcherServlet 控制器:使用 @RestController 直接返回 JSON,无需 @ResponseBody 路由注解:使用 @GetMapping、@PostMapping 等简化注解替代 @RequestMapping 参数绑定:MVC 基础概念仍适用,但推荐结合 Bean Validation(@Valid)进行校验 视图层:前后端分离(REST API + Vue/React),或使用 Thymeleaf 模板 配置方式:Java Config + application.yml,无需 XML 配置 本文主要参考了 imooc-SpringMVC 起步 视频教程和 SpringMVC 从入门到精通 系列 - HansonQ ,还有自己的一些总结。 主要内容:MVC 简介、前端控制器模式、SpringMVC 基本概念、SpringMVC 配置、SpringMVC 中的注解、SpringMVC 数据绑定。 MVC 简介 1、MVC 是一种架构模式 ...

September 7, 2016 · 5 min · 876 words · Me, LLM

刚刚毕业的两个月小结

走出校园已经两个月了,因为之前的暑期也没怎么在家待过,大一在中康、大二在腾骏、大三在大为,大四毕业也就是现在,所以也没有什么特别的感觉。可以说,这两个月也做了些事情,学了些东西的。 从学校毕业,最直接的影响就是自己更加专注于计算机知识,不用再为学业担心。确定了先走技术的道路,也让自己不那么迷茫做什么。工作规律,自己开始读读书,才觉的读书是件有意思的事。也逼着自己常常写点东西,主要是觉的:写东西的时候自己会主动的思考,文笔练着练着也就能进步吧。 (一) DMV 是毕业后自己第一个项目,全栈开发。初版两周上线,后有花了一周多的时间编写了答题记录的功能。其中的收获是:项目框架的搭建和前端入门知识。原来的项目搭建都不是自己做的,也一直觉的是一件很难的事情。也许就是因为没有做过才觉的难,做过之后也觉的不过如此。项目的页面不多,但都是自己一点点写的,HTML JS 原来也就是自己改改,没有完整写过,这次算是一次不错的锻炼。写前端的时候才发现现在的前端真的是日新月异 AngularJS React 好多好多自己都没有听过的东西,也是从 Mengqi 那里了解到了很多。可惜的是自己没有实际的用上这些,如有机会一定尝试。 DMV 项目流量平平,因为有 Domain 类项目的工作,DMV 的维护就暂时放置了,还是心有不舍的。期间和 John 聊过一次关于产品的事基本总结为: 产品项目是会有失败的,有流量的项目才有维护的意义。 大型项目只有成功与失败之分,没有中间项,失败将代价很大。 不一定要留住用户。 更小的成本更高的流量,高流量后就可以做很多的事。 (二) Domain 信息类项目,使用的架构和 DMV 一致,逻辑更加简单。自己主要做了数据整理,收获是关于 SQL 命令。SQL 就可以直接处理很多的事情。使用了 RMI 做数据同步,用反射写了一段程序,是一次有突破的尝试。 一次看到自己年初的简历,笑了。自己是真敢写,能写个 Hello World 就敢标成了解。从会用到原理,是接下要走的路。 (三) 最近在看设计模式和算法的书,一直在做 LeetCode 的题。设计模式没用过,逮到能用机会绝不错过。算法健脑,刚刚开始接触觉的挺有意思,对数据结构也是种了解。 (四) 再次参加舍友的婚礼,又个结婚了。大一奶了一口,现在成真。祝福 Lu&Feifei。 (五) 来说说程序员那无处安放的创造力 有了锤子想找钉子是很正常的原始冲动,但我们必须认识到,创造力对于程序员这个职业来讲,是锦上添花的东西。如果你没有强大的工程能力,那么创造力也不过是无本之木。所以扎扎实实的把工程基础打好,这是最根本的。 在此基础上,我比较推荐程序员采用内外两条线来培养自己。在公司内的项目上采取相对保守的策略,尽力把稳定性做到最好,培养出自己卓越的工程能力;然后在公司外的开源项目和自己的独立项目上,采用一些新的技术、实践一些新的想法、充分发挥自己的创造力,梦想还是要有的,对吧。 这样做最明显的好处是,你可以了解到新技术和激进方案的优缺点,从而在进行方案选型时,有更多的依据;还有一个职业发展上的好处:如果不是主负责人,公司的项目往往不能代表你的能力;但独立项目却可以作为一个非常好的能力证明出现在你的简历里边。 你可以是一个身怀绝技的手艺人,在自己家里你尝试各种手法各种风格的个人作品;但当你参与颐和园这种级别的工程时,好好的把自己负责的石头雕成总设计师要求的样子就好 —— 毕竟这个时代一个人已经很难负责整个项目了。这就是我所理解的程序员的工匠精神。 摘自:程序员到底是一个什么职业? (尾) 现在自己能听见进去一些原来听不去的话了。我不认为自己是被同化了,也许是心中少了些恶意。 状态不错,继续前进。 – EOF –

August 31, 2016 · 1 min · 59 words · Me

LeetCode Number of 1 Bits 191

191. Number of 1 Bits Write a function that takes an unsigned integer and returns the number of ’1’ bits it has (also known as the Hamming weight). For example, the 32-bit integer ’11’ has binary representation 00000000000000000000000000001011, so the function should return 3. 大体意思 写一个函数,输入一个无符号整数,返回其中值为 1 的比特位的个数(这个值也被称为数字汉明重量) 自己的思路 循环判断最后一位是否是 1 public int hammingWeight(int n) { int result = 0; while (n != 0) { if ((n & 1) == 1) { result++; } n = n >> 1; } return result; } 在 Submit Solution ...

August 31, 2016 · 2 min · 237 words · Me

LeetCode Happy Number 202

202. Happy Number Write an algorithm to determine if a number is “happy”. A happy number is a number defined by the following process: Starting with any positive integer, replace the number by the sum of the squares of its digits, and repeat the process until the number equals 1 (where it will stay), or it loops endlessly in a cycle which does not include 1. Those numbers for which this process ends in 1 are happy numbers. ...

August 29, 2016 · 1 min · 209 words · Me

LeetCode Roman to Integer 13

13. Roman to Integer Given a roman numeral, convert it to an integer. Input is guaranteed to be within the range from 1 to 3999. wikipedia-罗马数字 罗马数字共有 7 个,即 I(1)、V(5)、X(10)、L(50)、C(100)、D(500)和 M(1000)。按照下述的规则可以表示任意正整数。需要注意的是罗马数字中没有“0”,与进位制无关。一般认为罗马数字只用来记数,而不作演算。 重复数次:一个罗马数字重复几次,就表示这个数的几倍。 右加左减: 在较大的罗马数字的右边记上较小的罗马数字,表示大数字加小数字。 在较大的罗马数字的左边记上较小的罗马数字,表示大数字减小数字。 左减的数字有限制,仅限于 I、X、C。比如 45 不可以写成 VL,只能是 XLV 但是,左减时不可跨越一个位值。比如,99 不可以用 IC(100-1)表示,而是用 XCIX([100-10]+[10-1])表示。(等同于阿拉伯数字每位数字分别表示。) 左减数字必须为一位,比如 8 写成 VIII,而非 IIX。 右加数字不可连续超过三位,比如 14 写成 XIV,而非 XIIII。(见下方“数码限制”一项。) 加线乘千: 在罗马数字的上方加上一条横线或者加上下标的 Ⅿ,表示将这个数乘以 1000,即是原数的 1000 倍。 同理,如果上方有两条横线,即是原数的 1000000(1000^{{2}})倍。 数码限制: 同一数码最多只能连续出现三次,如 40 不可表示为 XXXX,而要表示为 XL。 例外:由于 IV 是古罗马神话主神朱庇特(即 IVPITER,古罗马字母里没有 J 和 U)的首字,因此有时用 IIII 代替 IV。 自己的解法 做一个数组对照的字典,遵守此条规定:在较大的罗马数字的左边记上较小的罗马数字,表示大数字减小数字。 ...

August 25, 2016 · 1 min · 160 words · Me

LeetCode Majority Element 169

169. Majority Element Given an array of size n, find the majority element. The majority element is the element that appears more than [ n/2 ] times. You may assume that the array is non-empty and the majority element always exist in the array. 题目大意 给定一个数组,找这个数组中的主元素,主元素是元素出现次数大于⌊ n/2 ⌋的元素。 假设给定的数组非空,主元素都存在。 自己的解法 将数组进行排序,根据题意,那么中间的这个数就是 majority element public int majorityElement(int[] nums) { Arrays.sort(nums); return nums[nums.length / 2]; } 别人的解法 【LeetCode-面试算法经典-Java 实现】【169-Majority Element(主元素)】 ...

August 24, 2016 · 1 min · 191 words · Me

LeetCode First Unique Character in a String 387

387. First Unique Character in a String Given a string, find the first non-repeating character in it and return it’s index. If it doesn’t exist, return -1. Examples: s = "leetcode" return 0. s = "loveleetcode", return 2. Note: You may assume the string contain only lowercase letters. 自己的解法 开始觉的遍历 char[] 然后判断在 String 的首位置和末位置,若一样就返回索引。呃,感觉有点偷鸡 public int firstUniqChar(String s) { for (int i = 0; i < s.length(); i++) { if (s.indexOf(s.charAt(i)) == s.lastIndexOf(s.charAt(i))) { return i; } } return -1; } 查了下别人的,又是 new int[26] ...

August 23, 2016 · 1 min · 133 words · Me

LeetCode Maximum Depth of Binary Tree 104

104. Maximum Depth of Binary Tree Given a binary tree, find its maximum depth. The maximum depth is the number of nodes along the longest path from the root node down to the farthest leaf node. 自己的解法 自己想到应该用递归、为空的返回 0,不为空的返回 1,递归累加;但是有两个点这么判断呢?其实很容易取两数字的 MAX public int maxDepth(TreeNode root) { if (root == null) { return 0; } return 1 + Math.max(maxDepth(root.left), maxDepth(root.right)); } 参考: 104 Maximum Depth of Binary Tree | Data Structure and algorithm analysis

August 23, 2016 · 1 min · 73 words · Me

【此生为完成】随笔

我们要用多大的代价,才能认清活着的意义? 于娟,这个风华正茂的女子,拥有留洋经历和博士学位的复旦大学青年教师,在与晚期癌症抗争一年又四个月后,终于撒手人寰。她带走的家人的思念和不舍,给我们留下坚强的力量。 《此生未完成》这本书是上周末聚会时 Zhen 提到的,上周京东买书就带上了。书里前半探讨作者在生死临界时对生活、工作、名利、家人、朋友的一些看法和思考。这对于刚刚毕业的我来说,确实有些是无法真切体会到的,毕竟经历少。但是在书的字里行间中,仍然可以看到一个(不知道用什么词)的女子。 (一) 疾病能让人有怎样的疼痛? 我还是没有哭,不是因为坚强,而是因为痛的想不起来哭,那个时候,只要能用尽全力顶着。如果稍微分神,我就会痛的晕厥。我不想家人看到我的痛苦。 说来惭愧的一个对比,自己在喝多时有过这样的经历:自己抱着垃圾桶使劲顶着一股劲,要是有人来给自己说话,就会分神似的使劲的呕吐。可这蚀骨之痛要比这疼痛多少倍呢? (二) 重要的是当他得知我生病消息后的第一反应,眼神表情乃至电话语气网络留言里端倪尽出,你会觉得世间很多人情世故是那么的让你淡然一笑。 在遇到大事的时候方显出真正的朋友和所谓的朋友,扬尘散土,洗沙留金。能遇到“大事”的机会不多,遇到的“大事”还能全身而退的机会就更少了。所以觉的自己应该及时去明辨所有的朋友,将真心给最真的,对于其他的就随他去吧。我不可能讨所有人喜欢,也用不着。 (三) 三十岁之前的努力更多是因为自己有着太多的欲望和执著,从没有“只要活着就好”的简单。名利权情,没有一样是不辛苦的,却没有一样可以带走。 这是一个作者很重要的一个观点。在现在的我看来,“只要活着就好”的活着,是一种精神上富有的活着,是充满智慧的活着。 就说现在的自己,什么都不曾拥有,或许不用拥有过的名、利,但是其他方面什么都没有,自己一切都是空的,看到好就会有强烈的“欲望”,如果再强烈一点就会有“执著”。在文字中我感受到了作者在精神方面的强大与富有,或许在这之后才能感受到在名、利之外更重要的东西。其实,自己真的很难想通,到底拥有什么自己就可以“苟”了,自己到底想要什么。了解自己真正想要什么真是一幸事。 作者提到的有时间,多多陪陪家人父母、有机会就尽孝,自己是很赞同的。 (四) 外公反映土豆每次经过,都趴在玻璃上看玻璃窗里的圣诞树、圣诞彩球和姜饼屋。土豆眼神里有点想,但却乖乖看着,并不讨。外公回想说:“那个眼神我想起了卖火柴的小女孩,有时候孩子听话,你却反而会心酸。” 这文字碰触心灵最柔软的地方。 (五) 你的妈妈不是懦夫,所以你的人生里,遇到珍贵的人与关键的事,都要积极争取,可以失败,但是不能放弃。我想做一个让儿子骄傲的妈妈,只此一点,无论任何地步,我都不会选择自己走,哪怕,万劫不复的痛。 (六) 更多人不会明白,我们两个的谈笑深处埋藏着多少不能言表的无声叹息。上一次见面,我和梅两个事多么风华正茂,像展翅云霄的鹰隼,挥着翅膀相约下次的冲天。这次的相逢,是灰头土脸被命运按在尘土里依然微笑的土鸡之间的问候。 (七) “为啥是我得癌症” 的非学术报告,是书的精华文章。从饮食习惯、睡眠习惯、突击作业、环境问题,分析了对身体不利的因素。突击作业其实就是工作习惯。 在饮食上常吃不寻常的动物、暴饮暴食、嗜荤如命。 我们要相信聪明的祖先,几千年的智慧沉淀,才最终锁定了我们现在的食材,并在远古对他们进行豢养。如果孔雀比鸡好吃,那么现在的就是孔雀,孔雀就是鸡。 在睡眠习惯上: 二十三时至次日三时,是肝脏活动能力最强的时段,也是肝脏最佳的排毒时期,如果肝脏功能得不到休息,会引起肝脏血流相对不足,已受损的肝细胞难以修复并加剧恶化。所以“长期熬夜等于慢性自杀”的说法并不夸张。因此医生建议人们从二十三时左右开始上床睡觉,次日一至三时进入深睡眠状态,好好地养足肝血。 突击作业: 一辆平时就跌跌撞撞一直不维修的破车,一踩油门就彻夜地疯跑疯开半个月。一年搞个五六次,就是钢筋铁打的汽车,开个二十几年也到报废了。 环境问题,空气污染、水污染和食品安全危机还有那可怕的甲醛家具。 (八) 不去想控制大局小局,不想去多管闲事淡事,我不在有对手,不再有敌人,我也不在关心谁比谁强,课题也好,任务也罢,暂且放着。 也许只有正在想明白的人,才懂的世间的一切,隔岸看花、风淡云轻。

August 22, 2016 · 1 min · 37 words · Me