转:使用Mybatis-Generator自动生成Dao、Model、Mapping相关文件
转:使用Mybatis-Generator自动生成Dao、Model、Mapping相关文件
使用Mybatis-Generator自动生成Dao、Model、Mapping相关文件
Mybatis属于半自动ORM,在使用这个框架中,工作量最大的就是书写Mapping的映射文件,由于手动书写很容易出错,我们可以利用Mybatis-Generator来帮我们自动生成文件。
1、相关文件
关于Mybatis-Generator的下载可以到这个地址:https://github.com/mybatis/generator/releases
由于我使用的是Mysql数据库,这里需要再准备一个连接mysql数据库的驱动jar包
以下是相关文件截图:
和Hibernate逆向生成一样,这里也需要一个配置文件:
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 <generatorConfiguration> 6 <!--数据库驱动--> 7 <classPathEntry location="mysql-connector-java-5.0.8-bin.jar"/> 8 <context id="DB2Tables" targetRuntime="MyBatis3"> 9 <commentGenerator> 10 <property name="suppressDate" value="true"/> 11 <property name="suppressAllComments" value="true"/> 12 </commentGenerator> 13 <!--数据库链接地址账号密码--> 14 <jdbcConnection driverClass="com.mysql.jdbc.Driver" connectionURL="jdbc:mysql://localhost/mymessages" userId="root" password="root"> 15 </jdbcConnection> 16 <javaTypeResolver> 17 <property name="forceBigDecimals" value="false"/> 18 </javaTypeResolver> 19 <!--生成Model类存放位置--> 20 <javaModelGenerator targetPackage="lcw.model" targetProject="src"> 21 <property name="enableSubPackages" value="true"/> 22 <property name="trimStrings" value="true"/> 23 </javaModelGenerator> 24 <!--生成映射文件存放位置--> 25 <sqlMapGenerator targetPackage="lcw.mapping" targetProject="src"> 26 <property name="enableSubPackages" value="true"/> 27 </sqlMapGenerator> 28 <!--生成Dao类存放位置--> 29 <javaClientGenerator type="XMLMAPPER" targetPackage="lcw.dao" targetProject="src"> 30 <property name="enableSubPackages" value="true"/> 31 </javaClientGenerator> 32 <!--生成对应表及类名--> 33 <table tableName="message" domainObjectName="Messgae" enableCountByExample="false" enableUpdateByExample="false" enableDeleteByExample="false" enableSelectByExample="false" selectByExampleQueryId="false"></table> 34 </context> 35 </generatorConfiguration>
需要修改文件配置的地方我都已经把注释标注出来了,这里的相关路径(如数据库驱动包,生成对应的相关文件位置可以自定义)不能带有中文。
上面配置文件中的:
<table tableName="message" domainObjectName="Messgae" enableCountByExample="false" enableUpdateByExample="false" enableDeleteByExample="false" enableSelectByExample="false" selectByExampleQueryId="false"></table>
tableName和domainObjectName为必选项,分别代表数据库表名和生成的实体类名,其余的可以自定义去选择(一般情况下均为false)。
生成语句文件:
java -jar mybatis-generator-core-1.3.2.jar -configfile generatorConfig.xml -overwrite
2、使用方法
在该目录按住Shift键,右键鼠标选择"在此处打开命令窗口",复制粘贴生成语句的文件代码即可。
看下效果图:
首先这个是我的数据库表
生成相关代码:
Message.java
1 package lcw.model; 2 3 public class Messgae { 4 private Integer id; 5 6 private String title; 7 8 private String describe; 9 10 private String content; 11 12 public Integer getId() { 13 return id; 14 } 15 16 public void setId(Integer id) { 17 this.id = id; 18 } 19 20 public String getTitle() { 21 return title; 22 } 23 24 public void setTitle(String title) { 25 this.title = title == null ? null : title.trim(); 26 } 27 28 public String getDescribe() { 29 return describe; 30 } 31 32 public void setDescribe(String describe) { 33 this.describe = describe == null ? null : describe.trim(); 34 } 35 36 public String getContent() { 37 return content; 38 } 39 40 public void setContent(String content) { 41 this.content = content == null ? null : content.trim(); 42 } 43 }
MessgaeMapper.xml
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="lcw.dao.MessgaeMapper" > 4 <resultMap id="BaseResultMap" type="lcw.model.Messgae" > 5 <id column="id" property="id" jdbcType="INTEGER" /> 6 <result column="title" property="title" jdbcType="VARCHAR" /> 7 <result column="describe" property="describe" jdbcType="VARCHAR" /> 8 <result column="content" property="content" jdbcType="VARCHAR" /> 9 </resultMap> 10 <sql id="Base_Column_List" > 11 id, title, describe, content 12 </sql> 13 <select id="selectByPrimaryKey" resultMap="BaseResultMap" parameterType="java.lang.Integer" > 14 select 15 <include refid="Base_Column_List" /> 16 from message 17 where id = #{id,jdbcType=INTEGER} 18 </select> 19 <delete id="deleteByPrimaryKey" parameterType="java.lang.Integer" > 20 delete from message 21 where id = #{id,jdbcType=INTEGER} 22 </delete> 23 <insert id="insert" parameterType="lcw.model.Messgae" > 24 insert into message (id, title, describe, 25 content) 26 values (#{id,jdbcType=INTEGER}, #{title,jdbcType=VARCHAR}, #{describe,jdbcType=VARCHAR}, 27 #{content,jdbcType=VARCHAR}) 28 </insert> 29 <insert id="insertSelective" parameterType="lcw.model.Messgae" > 30 insert into message 31 <trim prefix="(" suffix=")" suffixOverrides="," > 32 <if test="id != null" > 33 id, 34 </if> 35 <if test="title != null" > 36 title, 37 </if> 38 <if test="describe != null" > 39 describe, 40 </if> 41 <if test="content != null" > 42 content, 43 </if> 44 </trim> 45 <trim prefix="values (" suffix=")" suffixOverrides="," > 46 <if test="id != null" > 47 #{id,jdbcType=INTEGER}, 48 </if> 49 <if test="title != null" > 50 #{title,jdbcType=VARCHAR}, 51 </if> 52 <if test="describe != null" > 53 #{describe,jdbcType=VARCHAR}, 54 </if> 55 <if test="content != null" > 56 #{content,jdbcType=VARCHAR}, 57 </if> 58 </trim> 59 </insert> 60 <update id="updateByPrimaryKeySelective" parameterType="lcw.model.Messgae" > 61 update message 62 <set > 63 <if test="title != null" > 64 title = #{title,jdbcType=VARCHAR}, 65 </if> 66 <if test="describe != null" > 67 describe = #{describe,jdbcType=VARCHAR}, 68 </if> 69 <if test="content != null" > 70 content = #{content,jdbcType=VARCHAR}, 71 </if> 72 </set> 73 where id = #{id,jdbcType=INTEGER} 74 </update> 75 <update id="updateByPrimaryKey" parameterType="lcw.model.Messgae" > 76 update message 77 set title = #{title,jdbcType=VARCHAR}, 78 describe = #{describe,jdbcType=VARCHAR}, 79 content = #{content,jdbcType=VARCHAR} 80 where id = #{id,jdbcType=INTEGER} 81 </update> 82 </mapper>
MessgaeMapper.java
1 package lcw.dao; 2 3 import lcw.model.Messgae; 4 5 public interface MessgaeMapper { 6 int deleteByPrimaryKey(Integer id); 7 8 int insert(Messgae record); 9 10 int insertSelective(Messgae record); 11 12 Messgae selectByPrimaryKey(Integer id); 13 14 int updateByPrimaryKeySelective(Messgae record); 15 16 int updateByPrimaryKey(Messgae record); 17 }
分类: JAVA
</div>
<div class="postDesc">posted @ <span id="post-date">2014-12-05 02:30</span> <a href="https://www.cnblogs.com/lichenwei/">李晨玮</a> 阅读(<span id="post_view_count">23427</span>) 评论(<span id="post_comment_count">9</span>) <a href="https://i.cnblogs.com/EditPosts.aspx?postid=4145696" rel="nofollow">编辑</a> <a href="#" onclick="AddToWz(4145696);return false;">收藏</a></div>
</div>
<script type="text/javascript">var allowComments=true,cb_blogId=181785,cb_entryId=4145696,cb_blogApp=currentBlogApp,cb_blogUserGuid='ac9cc69c-f6ad-e311-8d02-90b11c0b17d6',cb_entryCreatedDate='2014/12/5 2:30:00';loadViewCount(cb_entryId);var cb_postType=1;</script>
评论列表
<div class="feedbackItem">
<div class="feedbackListSubtitle">
<div class="feedbackManage">
<span class="comment_actions"></span>
</div>
<a href="#3078889" class="layer">#1楼</a><a name="3078889" id="comment_anchor_3078889"></a> <span class="comment_date">2014-12-05 11:36</span> <a id="a_comment_author_3078889" href="http://home.cnblogs.com/u/697557/" target="_blank">zh.w</a> <a href="http://msg.cnblogs.com/send/zh.w" title="发送站内短消息" class="sendMsg2This"> </a>
</div>
<div class="feedbackCon">
<div id="comment_body_3078889" class="blog_comment_body">请写详细点吧,实体类的属性是怎么和表的字段映射的</div><div class="comment_vote"><a href="javascript:void(0);" class="comment_digg" onclick="return voteComment(3078889,'Digg',this)">支持(0)</a><a href="javascript:void(0);" class="comment_bury" onclick="return voteComment(3078889,'Bury',this)">反对(0)</a></div>
</div>
</div>
<div class="feedbackItem">
<div class="feedbackListSubtitle">
<div class="feedbackManage">
<span class="comment_actions"></span>
</div>
<a href="#3078901" class="layer">#2楼</a><a name="3078901" id="comment_anchor_3078901"></a>[<span class="louzhu">楼主</span>] <span class="comment_date">2014-12-05 11:43</span> <a id="a_comment_author_3078901" href="https://www.cnblogs.com/lichenwei/" target="_blank">李晨玮</a> <a href="http://msg.cnblogs.com/send/%E6%9D%8E%E6%99%A8%E7%8E%AE" title="发送站内短消息" class="sendMsg2This"> </a>
</div>
<div class="feedbackCon">
<div id="comment_body_3078901" class="blog_comment_body"><a href="#3078889" title="查看所回复的评论" onclick="commentManager.renderComments(0,50,3078889);">@</a>
zh.w
这个就属于Mybatis框架的知识点了,有时间再写,这篇文章只是记录下使用方法。
支持(0)反对(0)
http://pic.cnblogs.com/face/614265/20141123005318.png <div class="feedbackItem">
<div class="feedbackListSubtitle">
<div class="feedbackManage">
<span class="comment_actions"></span>
</div>
<a href="#3103449" class="layer">#3楼</a><a name="3103449" id="comment_anchor_3103449"></a> <span class="comment_date">2015-01-09 11:09</span> <a id="a_comment_author_3103449" href="https://www.cnblogs.com/legenda-lee/" target="_blank">Legenda-Lee</a> <a href="http://msg.cnblogs.com/send/Legenda-Lee" title="发送站内短消息" class="sendMsg2This"> </a>
</div>
<div class="feedbackCon">
<div id="comment_body_3103449" class="blog_comment_body">自动生成也是有局限性,有时候不能满足现实要求、比如方法名设置要求、特定逻辑的sql等等,还是要自己去编写。</div><div class="comment_vote"><a href="javascript:void(0);" class="comment_digg" onclick="return voteComment(3103449,'Digg',this)">支持(0)</a><a href="javascript:void(0);" class="comment_bury" onclick="return voteComment(3103449,'Bury',this)">反对(0)</a></div><span id="comment_3103449_avatar" style="display:none;">http://pic.cnblogs.com/face/709022/20151129115802.png</span>
</div>
</div>
<div class="feedbackItem">
<div class="feedbackListSubtitle">
<div class="feedbackManage">
<span class="comment_actions"></span>
</div>
<a href="#3418803" class="layer">#4楼</a><a name="3418803" id="comment_anchor_3418803"></a> <span class="comment_date">2016-04-27 17:05</span> <a id="a_comment_author_3418803" href="https://www.cnblogs.com/xchsp/" target="_blank">xchsp</a> <a href="http://msg.cnblogs.com/send/xchsp" title="发送站内短消息" class="sendMsg2This"> </a>
</div>
<div class="feedbackCon">
<div id="comment_body_3418803" class="blog_comment_body">使用Mybatis-Generator自动生成Dao、Model、Mapping相关文件</div><div class="comment_vote"><a href="javascript:void(0);" class="comment_digg" onclick="return voteComment(3418803,'Digg',this)">支持(0)</a><a href="javascript:void(0);" class="comment_bury" onclick="return voteComment(3418803,'Bury',this)">反对(0)</a></div><span id="comment_3418803_avatar" style="display:none;">http://pic.cnblogs.com/face/110119/20141120152543.png</span>
</div>
</div>
<div class="feedbackItem">
<div class="feedbackListSubtitle">
<div class="feedbackManage">
<span class="comment_actions"></span>
</div>
<a href="#3466001" class="layer">#5楼</a><a name="3466001" id="comment_anchor_3466001"></a> <span class="comment_date">2016-07-07 22:55</span> <a id="a_comment_author_3466001" href="https://www.cnblogs.com/web-java/" target="_blank">让自己行动起来</a> <a href="http://msg.cnblogs.com/send/%E8%AE%A9%E8%87%AA%E5%B7%B1%E8%A1%8C%E5%8A%A8%E8%B5%B7%E6%9D%A5" title="发送站内短消息" class="sendMsg2This"> </a>
</div>
<div class="feedbackCon">
<div id="comment_body_3466001" class="blog_comment_body">XML配置的方式非常灵活,不过对于新手来说有点困难。我专门写了一个带界面的mybatis-generator, github上已经开源:<a href="https://github.com/astarring/mybatis-generator-gui" target="_blank">https://github.com/astarring/mybatis-generator-gui</a> 欢迎大家使用并提供改进意见。</div><div class="comment_vote"><a href="javascript:void(0);" class="comment_digg" onclick="return voteComment(3466001,'Digg',this)">支持(0)</a><a href="javascript:void(0);" class="comment_bury" onclick="return voteComment(3466001,'Bury',this)">反对(0)</a></div><span id="comment_3466001_avatar" style="display:none;">http://pic.cnblogs.com/face/595984/20150806101519.png</span>
</div>
</div>
<div class="feedbackItem">
<div class="feedbackListSubtitle">
<div class="feedbackManage">
<span class="comment_actions"></span>
</div>
<a href="#3847396" class="layer">#6楼</a><a name="3847396" id="comment_anchor_3847396"></a> <span class="comment_date">2017-11-22 14:42</span> <a id="a_comment_author_3847396" href="http://home.cnblogs.com/u/819268/" target="_blank">勿念丶</a> <a href="http://msg.cnblogs.com/send/%E5%8B%BF%E5%BF%B5%E4%B8%B6" title="发送站内短消息" class="sendMsg2This"> </a>
</div>
<div class="feedbackCon">
<div id="comment_body_3847396" class="blog_comment_body">按照博主的方法 只生成了sqlMap里面insertSelective方法,其他的都没有</div><div class="comment_vote"><a href="javascript:void(0);" class="comment_digg" onclick="return voteComment(3847396,'Digg',this)">支持(0)</a><a href="javascript:void(0);" class="comment_bury" onclick="return voteComment(3847396,'Bury',this)">反对(0)</a></div>
</div>
</div>
<div class="feedbackItem">
<div class="feedbackListSubtitle">
<div class="feedbackManage">
<span class="comment_actions"></span>
</div>
<a href="#3891538" class="layer">#7楼</a><a name="3891538" id="comment_anchor_3891538"></a> <span class="comment_date">2018-01-17 09:52</span> <a id="a_comment_author_3891538" href="https://www.cnblogs.com/fengzheng/" target="_blank">风的姿态</a> <a href="http://msg.cnblogs.com/send/%E9%A3%8E%E7%9A%84%E5%A7%BF%E6%80%81" title="发送站内短消息" class="sendMsg2This"> </a>
</div>
<div class="feedbackCon">
<div id="comment_body_3891538" class="blog_comment_body">简单的web 版生成器,不用关注这些细节了,欢迎到 <a href="https://github.com/huzhicheng/kite-mybatis-builder" target="_blank">github</a> 上试用。<br><a href="https://github.com/huzhicheng/kite-mybatis-builde" target="_blank">https://github.com/huzhicheng/kite-mybatis-builde</a></div><div class="comment_vote"><a href="javascript:void(0);" class="comment_digg" onclick="return voteComment(3891538,'Digg',this)">支持(0)</a><a href="javascript:void(0);" class="comment_bury" onclick="return voteComment(3891538,'Bury',this)">反对(0)</a></div><span id="comment_3891538_avatar" style="display:none;">http://pic.cnblogs.com/face/273364/20140311104117.png</span>
</div>
</div>
<div class="feedbackItem">
<div class="feedbackListSubtitle">
<div class="feedbackManage">
<span class="comment_actions"></span>
</div>
<a href="#3979204" class="layer">#8楼</a><a name="3979204" id="comment_anchor_3979204"></a> <span class="comment_date">2018-05-21 22:53</span> <a id="a_comment_author_3979204" href="https://www.cnblogs.com/xyblogs/" target="_blank">邢逸</a> <a href="http://msg.cnblogs.com/send/%E9%82%A2%E9%80%B8" title="发送站内短消息" class="sendMsg2This"> </a>
</div>
<div class="feedbackCon">
<div id="comment_body_3979204" class="blog_comment_body">不错</div><div class="comment_vote"><a href="javascript:void(0);" class="comment_digg" onclick="return voteComment(3979204,'Digg',this)">支持(0)</a><a href="javascript:void(0);" class="comment_bury" onclick="return voteComment(3979204,'Bury',this)">反对(0)</a></div><span id="comment_3979204_avatar" style="display:none;">http://pic.cnblogs.com/face/1368438/20180727202549.png</span>
</div>
</div>
<div class="feedbackItem">
<div class="feedbackListSubtitle">
<div class="feedbackManage">
<span class="comment_actions"></span>
</div>
<a href="#3979205" class="layer">#9楼</a><a name="3979205" id="comment_anchor_3979205"></a><span id="comment-maxId" style="display:none;">3979205</span><span id="comment-maxDate" style="display:none;">2018/5/21 22:53:50</span> <span class="comment_date">2018-05-21 22:53</span> <a id="a_comment_author_3979205" href="https://www.cnblogs.com/xyblogs/" target="_blank">邢逸</a> <a href="http://msg.cnblogs.com/send/%E9%82%A2%E9%80%B8" title="发送站内短消息" class="sendMsg2This"> </a>
</div>
<div class="feedbackCon">
<div id="comment_body_3979205" class="blog_comment_body">谢谢</div><div class="comment_vote"><a href="javascript:void(0);" class="comment_digg" onclick="return voteComment(3979205,'Digg',this)">支持(0)</a><a href="javascript:void(0);" class="comment_bury" onclick="return voteComment(3979205,'Bury',this)">反对(0)</a></div><span id="comment_3979205_avatar" style="display:none;">http://pic.cnblogs.com/face/1368438/20180727202549.png</span>
</div>
</div>
<div id="comments_pager_bottom"></div></div><script type="text/javascript">var commentManager = new blogCommentManager();commentManager.renderComments(0);</script>
</div><!--end: forFlow -->
</div><!--end: mainContent 主体内容容器-->
<div id="sideBar">
<div id="sideBarMain">
公告
<div id="blog-calendar" style=""><table id="blogCalendar" class="Cal" cellspacing="0" cellpadding="0" title="Calendar">
<tbody><tr><td colspan="7"><table class="CalTitle" cellspacing="0">
<tbody><tr><td class="CalNextPrev"><a href="javascript:void(0);" onclick="loadBlogCalendar('2018/12/01');return false;"><</a></td><td align="center">2019年1月</td><td class="CalNextPrev" align="right"><a href="javascript:void(0);" onclick="loadBlogCalendar('2019/02/01');return false;">></a></td></tr>
</tbody></table></td></tr><tr><th class="CalDayHeader" align="center" abbr="日" scope="col">日</th><th class="CalDayHeader" align="center" abbr="一" scope="col">一</th><th class="CalDayHeader" align="center" abbr="二" scope="col">二</th><th class="CalDayHeader" align="center" abbr="三" scope="col">三</th><th class="CalDayHeader" align="center" abbr="四" scope="col">四</th><th class="CalDayHeader" align="center" abbr="五" scope="col">五</th><th class="CalDayHeader" align="center" abbr="六" scope="col">六</th></tr><tr><td class="CalOtherMonthDay" align="center">30</td><td class="CalOtherMonthDay" align="center">31</td><td align="center">1</td><td align="center">2</td><td align="center">3</td><td align="center">4</td><td class="CalWeekendDay" align="center">5</td></tr><tr><td class="CalTodayDay" align="center">6</td><td align="center">7</td><td align="center">8</td><td align="center">9</td><td align="center">10</td><td align="center">11</td><td class="CalWeekendDay" align="center">12</td></tr><tr><td class="CalWeekendDay" align="center">13</td><td align="center">14</td><td align="center">15</td><td align="center">16</td><td align="center">17</td><td align="center">18</td><td class="CalWeekendDay" align="center">19</td></tr><tr><td class="CalWeekendDay" align="center">20</td><td align="center">21</td><td align="center">22</td><td align="center">23</td><td align="center">24</td><td align="center">25</td><td class="CalWeekendDay" align="center">26</td></tr><tr><td class="CalWeekendDay" align="center">27</td><td align="center">28</td><td align="center">29</td><td align="center">30</td><td align="center">31</td><td class="CalOtherMonthDay" align="center">1</td><td class="CalOtherMonthDay" align="center">2</td></tr><tr><td class="CalOtherMonthDay" align="center">3</td><td class="CalOtherMonthDay" align="center">4</td><td class="CalOtherMonthDay" align="center">5</td><td class="CalOtherMonthDay" align="center">6</td><td class="CalOtherMonthDay" align="center">7</td><td class="CalOtherMonthDay" align="center">8</td><td class="CalOtherMonthDay" align="center">9</td></tr>
<div id="leftcontentcontainer">
<div id="blog-sidecolumn"><div id="sidebar_search" class="sidebar-block">
</div><!--end: sideBarMain -->
</div><!--end: sideBar 侧边栏容器 -->
<div class="clear"></div>
</div>