MyBatis学习4—使用MyBatis_Generator生成Dto、Dao、Mapping

MyBatis学习4—使用MyBatis_Generator生成Dto、Dao、Mapping由于MyBatis属于一种半自动的ORM框架,所以主要的工作将是书写Mapping映射文件,但是由于手写映射文件很容易出错,所以查资料发现有现成的工具可以自动生成底层模型类、Dao接口类甚至Mapping映射文件。一、建立表结构CREATETABLE`user`(`id`varchar(50)NOTNULL,`username`varchar(18)CHAR

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE稳定放心使用

MyBatis学习4---使用MyBatis_Generator生成Dto、Dao、Mapping

程序老哥,一名10年老程序猿,目前为广告系统技术负责人,长期工作在一线主要关注服务器后端的开发,在Java、微服务、Docker、高可用架构均有深入实践。本博客以后的更新全部迁移到微信公众号上,欢迎大家都关注本公众号,我会定时的更新各种技术文章,方便大家学习进步。

由于MyBatis属于一种半自动的ORM框架,所以主要的工作将是书写Mapping映射文件,但是由于手写映射文件很容易出错,所以查资料发现有现成的工具可以自动生成底层模型类、Dao接口类甚至Mapping映射文件。

一、建立表结构

CREATE TABLE `user` (
  `id` varchar(50) NOT NULL,
  `username` varchar(18) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL,
  `password` varchar(18) DEFAULT NULL,
  `email` varchar(50) DEFAULT NULL,
  `name` varchar(18) DEFAULT NULL,
  `sex` varchar(2) DEFAULT NULL,
  `birthday` varchar(50) DEFAULT NULL,
  `address` varchar(500) DEFAULT NULL,
  `tel` varchar(18) DEFAULT NULL,
  `qq` varchar(18) DEFAULT NULL,
  `image` varchar(50) DEFAULT NULL,
  `sfjh` varchar(1) DEFAULT NULL,
  `sfzx` varchar(1) DEFAULT NULL,
  `sfhf` varchar(1) DEFAULT NULL,
  `sfpl` varchar(1) DEFAULT NULL,
  `sffx` varchar(1) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf-8;

二、下载mybatis-generator-core

进入:http://code.google.com/p/mybatis/

选择Downloads,再选择MyBatis Generator Tool下载即可。

三、生成配置文件

新建一个空的XML配置文件,名称可以随便取,这里以generatorConfig.xml为名。最好将这个文件放在下载后的lib目录中,如图:

MyBatis学习4---使用MyBatis_Generator生成Dto、Dao、Mapping

其中mysql的驱动可以随便放在非中文路径的地方,这里为了方便就放在lib目录下。

自动生成最重要的就是配置文件的书写,现在就开始介绍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>
<!-- 数据库驱动-->
	<classPathEntry	location="mysql-connector-java-5.0.6-bin.jar"/>
	<context id="DB2Tables"	targetRuntime="MyBatis3">
		<commentGenerator>
			<property name="suppressDate" value="true"/>
			<!-- 是否去除自动生成的注释 true:是 : false:否 -->
			<property name="suppressAllComments" value="true"/>
		</commentGenerator>
		<!--数据库链接URL,用户名、密码 -->
		<jdbcConnection driverClass="com.mysql.jdbc.Driver" connectionURL="jdbc:mysql://localhost/test" userId="test" password="test">
		</jdbcConnection>
		<javaTypeResolver>
			<property name="forceBigDecimals" value="false"/>
		</javaTypeResolver>
		<!-- 生成模型的包名和位置-->
		<javaModelGenerator targetPackage="test.model" targetProject="src">
			<property name="enableSubPackages" value="true"/>
			<property name="trimStrings" value="true"/>
		</javaModelGenerator>
		<!-- 生成映射文件的包名和位置-->
		<sqlMapGenerator targetPackage="test.mapping" targetProject="src">
			<property name="enableSubPackages" value="true"/>
		</sqlMapGenerator>
		<!-- 生成DAO的包名和位置-->
		<javaClientGenerator type="XMLMAPPER" targetPackage="test.dao" targetProject="src">
			<property name="enableSubPackages" value="true"/>
		</javaClientGenerator>
		<!-- 要生成哪些表-->
		<table tableName="about" domainObjectName="AboutDto" enableCountByExample="false" enableUpdateByExample="false" enableDeleteByExample="false" enableSelectByExample="false" selectByExampleQueryId="false"></table>
		<table tableName="user" domainObjectName="UserDto" enableCountByExample="false" enableUpdateByExample="false" enableDeleteByExample="false" enableSelectByExample="false" selectByExampleQueryId="false"></table>
		<table tableName="syslogs" domainObjectName="SyslogsDto" enableCountByExample="false" enableUpdateByExample="false" enableDeleteByExample="false" enableSelectByExample="false" selectByExampleQueryId="false"></table>
	</context>
</generatorConfiguration>

1、其中需要注意的有数据库驱动、数据库URL、用户名、密码、生成模型的包名和位置、生成映射文件的包名和位置、生成DAO的包名和位置以及最后需要生成的表名和对应的类名。

四、运行

需要通过CMD命令行方式来运行,首先可以先准备一个运行的脚本,这里使用的脚本是:java -jar mybatis-generator-core-1.3.2.jar -configfile generatorConfig.xml -overwrite

需要注意的是:mybatis-generator-core-1.3.2.jar为下载的对应版本的jar,generatorConfig.xml 为配置文件名,如果不为这个可以在这里进行修改。

启动cmd进入到“F:\soft\mybatis-generator-core-1.3.2\lib”这个目录下,如图:

MyBatis学习4---使用MyBatis_Generator生成Dto、Dao、Mapping

生成成功后进到src目录下,可以看到已经生成了对应的model、dao、mapping,如图:

MyBatis学习4---使用MyBatis_Generator生成Dto、Dao、Mapping

下面可以看看生成后的UserMapper.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="test.dao.UserDtoMapper" >
  <resultMap id="BaseResultMap" type="test.model.UserDto" >
    <id column="id" property="id" jdbcType="VARCHAR" />
    <result column="username" property="username" jdbcType="VARCHAR" />
    <result column="password" property="password" jdbcType="VARCHAR" />
    <result column="email" property="email" jdbcType="VARCHAR" />
    <result column="name" property="name" jdbcType="VARCHAR" />
    <result column="sex" property="sex" jdbcType="VARCHAR" />
    <result column="birthday" property="birthday" jdbcType="VARCHAR" />
    <result column="address" property="address" jdbcType="VARCHAR" />
    <result column="tel" property="tel" jdbcType="VARCHAR" />
    <result column="qq" property="qq" jdbcType="VARCHAR" />
    <result column="image" property="image" jdbcType="VARCHAR" />
    <result column="sfjh" property="sfjh" jdbcType="VARCHAR" />
    <result column="sfzx" property="sfzx" jdbcType="VARCHAR" />
    <result column="sfhf" property="sfhf" jdbcType="VARCHAR" />
    <result column="sfpl" property="sfpl" jdbcType="VARCHAR" />
    <result column="sffx" property="sffx" jdbcType="VARCHAR" />
  </resultMap>
  <sql id="Base_Column_List" >
    id, username, password, email, name, sex, birthday, address, tel, qq, image, sfjh, 
    sfzx, sfhf, sfpl, sffx
  </sql>
  <select id="selectByPrimaryKey" resultMap="BaseResultMap" parameterType="java.lang.String" >
    select 
    <include refid="Base_Column_List" />
    from user
    where id = #{id,jdbcType=VARCHAR}
  </select>
  <delete id="deleteByPrimaryKey" parameterType="java.lang.String" >
    delete from user
    where id = #{id,jdbcType=VARCHAR}
  </delete>
  <insert id="insert" parameterType="test.model.UserDto" >
    insert into user (id, username, password, 
      email, name, sex, birthday, 
      address, tel, qq, image, 
      sfjh, sfzx, sfhf, sfpl, 
      sffx)
    values (#{id,jdbcType=VARCHAR}, #{username,jdbcType=VARCHAR}, #{password,jdbcType=VARCHAR}, 
      #{email,jdbcType=VARCHAR}, #{name,jdbcType=VARCHAR}, #{sex,jdbcType=VARCHAR}, #{birthday,jdbcType=VARCHAR}, 
      #{address,jdbcType=VARCHAR}, #{tel,jdbcType=VARCHAR}, #{qq,jdbcType=VARCHAR}, #{image,jdbcType=VARCHAR}, 
      #{sfjh,jdbcType=VARCHAR}, #{sfzx,jdbcType=VARCHAR}, #{sfhf,jdbcType=VARCHAR}, #{sfpl,jdbcType=VARCHAR}, 
      #{sffx,jdbcType=VARCHAR})
  </insert>
  <insert id="insertSelective" parameterType="test.model.UserDto" >
    insert into user
    <trim prefix="(" suffix=")" suffixOverrides="," >
      <if test="id != null" >
        id,
      </if>
      <if test="username != null" >
        username,
      </if>
      <if test="password != null" >
        password,
      </if>
      <if test="email != null" >
        email,
      </if>
      <if test="name != null" >
        name,
      </if>
      <if test="sex != null" >
        sex,
      </if>
      <if test="birthday != null" >
        birthday,
      </if>
      <if test="address != null" >
        address,
      </if>
      <if test="tel != null" >
        tel,
      </if>
      <if test="qq != null" >
        qq,
      </if>
      <if test="image != null" >
        image,
      </if>
      <if test="sfjh != null" >
        sfjh,
      </if>
      <if test="sfzx != null" >
        sfzx,
      </if>
      <if test="sfhf != null" >
        sfhf,
      </if>
      <if test="sfpl != null" >
        sfpl,
      </if>
      <if test="sffx != null" >
        sffx,
      </if>
    </trim>
    <trim prefix="values (" suffix=")" suffixOverrides="," >
      <if test="id != null" >
        #{id,jdbcType=VARCHAR},
      </if>
      <if test="username != null" >
        #{username,jdbcType=VARCHAR},
      </if>
      <if test="password != null" >
        #{password,jdbcType=VARCHAR},
      </if>
      <if test="email != null" >
        #{email,jdbcType=VARCHAR},
      </if>
      <if test="name != null" >
        #{name,jdbcType=VARCHAR},
      </if>
      <if test="sex != null" >
        #{sex,jdbcType=VARCHAR},
      </if>
      <if test="birthday != null" >
        #{birthday,jdbcType=VARCHAR},
      </if>
      <if test="address != null" >
        #{address,jdbcType=VARCHAR},
      </if>
      <if test="tel != null" >
        #{tel,jdbcType=VARCHAR},
      </if>
      <if test="qq != null" >
        #{qq,jdbcType=VARCHAR},
      </if>
      <if test="image != null" >
        #{image,jdbcType=VARCHAR},
      </if>
      <if test="sfjh != null" >
        #{sfjh,jdbcType=VARCHAR},
      </if>
      <if test="sfzx != null" >
        #{sfzx,jdbcType=VARCHAR},
      </if>
      <if test="sfhf != null" >
        #{sfhf,jdbcType=VARCHAR},
      </if>
      <if test="sfpl != null" >
        #{sfpl,jdbcType=VARCHAR},
      </if>
      <if test="sffx != null" >
        #{sffx,jdbcType=VARCHAR},
      </if>
    </trim>
  </insert>
  <update id="updateByPrimaryKeySelective" parameterType="test.model.UserDto" >
    update user
    <set >
      <if test="username != null" >
        username = #{username,jdbcType=VARCHAR},
      </if>
      <if test="password != null" >
        password = #{password,jdbcType=VARCHAR},
      </if>
      <if test="email != null" >
        email = #{email,jdbcType=VARCHAR},
      </if>
      <if test="name != null" >
        name = #{name,jdbcType=VARCHAR},
      </if>
      <if test="sex != null" >
        sex = #{sex,jdbcType=VARCHAR},
      </if>
      <if test="birthday != null" >
        birthday = #{birthday,jdbcType=VARCHAR},
      </if>
      <if test="address != null" >
        address = #{address,jdbcType=VARCHAR},
      </if>
      <if test="tel != null" >
        tel = #{tel,jdbcType=VARCHAR},
      </if>
      <if test="qq != null" >
        qq = #{qq,jdbcType=VARCHAR},
      </if>
      <if test="image != null" >
        image = #{image,jdbcType=VARCHAR},
      </if>
      <if test="sfjh != null" >
        sfjh = #{sfjh,jdbcType=VARCHAR},
      </if>
      <if test="sfzx != null" >
        sfzx = #{sfzx,jdbcType=VARCHAR},
      </if>
      <if test="sfhf != null" >
        sfhf = #{sfhf,jdbcType=VARCHAR},
      </if>
      <if test="sfpl != null" >
        sfpl = #{sfpl,jdbcType=VARCHAR},
      </if>
      <if test="sffx != null" >
        sffx = #{sffx,jdbcType=VARCHAR},
      </if>
    </set>
    where id = #{id,jdbcType=VARCHAR}
  </update>
  <update id="updateByPrimaryKey" parameterType="test.model.UserDto" >
    update user
    set username = #{username,jdbcType=VARCHAR},
      password = #{password,jdbcType=VARCHAR},
      email = #{email,jdbcType=VARCHAR},
      name = #{name,jdbcType=VARCHAR},
      sex = #{sex,jdbcType=VARCHAR},
      birthday = #{birthday,jdbcType=VARCHAR},
      address = #{address,jdbcType=VARCHAR},
      tel = #{tel,jdbcType=VARCHAR},
      qq = #{qq,jdbcType=VARCHAR},
      image = #{image,jdbcType=VARCHAR},
      sfjh = #{sfjh,jdbcType=VARCHAR},
      sfzx = #{sfzx,jdbcType=VARCHAR},
      sfhf = #{sfhf,jdbcType=VARCHAR},
      sfpl = #{sfpl,jdbcType=VARCHAR},
      sffx = #{sffx,jdbcType=VARCHAR}
    where id = #{id,jdbcType=VARCHAR}
  </update>
</mapper>

接下来就可以将这三个目录拷贝到对应项目的目录中,如果需要新增自己的方法可以修改dao类。

MyBatis学习4---使用MyBatis_Generator生成Dto、Dao、Mapping

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/179767.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Lua使用心得(1)

    这几天研究了一下lua,主要关注的是lua和vc之间的整合,把代码都写好放在VC宿主程序里,然后在lua里调用宿主程序的这些代码(或者叫接口、组件,随便你怎么叫),希望能用脚本来控制主程序的行为。这实

    2021年12月25日
    48
  • 6种不同画法画平行线_9.2 平行线和它的画法(练习)-2019-2020学年七年级数学下册同步精品课堂(青岛版)…[通俗易懂]

    6种不同画法画平行线_9.2 平行线和它的画法(练习)-2019-2020学年七年级数学下册同步精品课堂(青岛版)…[通俗易懂]资料简介:第九章平行线9.2平行线和它的画法精选练习答案一.选择题(共4小题)1.(2018春•沧州期中)在同一平面内,不重合的两条直线的位置关系是(  )A.平行B.相交C.平行或相交D.平行、相交或垂直【答案】C【详解】解:在同一平面内,不重合的两条直线只有两种位置关系,是平行或相交,所以在同一平面内,不重合的两条直线的位置关系是:平行或相交.故选:C.2.(2019春•铁西区校级月考)下列…

    2022年9月20日
    3
  • PDAF原理_pfc作用

    PDAF原理_pfc作用PDAF原理:参考链接:https://www.cnblogs.com/sunny-li/p/9131017.htmlPDAF今天来讲一讲PDAF(相位对焦)的基本原理。在自动对焦的时候总是有一个困惑,知道图像是不清楚的,但是lens应该向前还是向后移动呢?总是要前后移动lens一下才知道,普通的反差法对焦就是这么做的,爬山嘛。PDAF的出现就是为了解决这个lens移动的问题…

    2022年9月7日
    2
  • SSL之CA证书颁发机构安装图文详解[通俗易懂]

    SSL之CA证书颁发机构安装图文详解[通俗易懂]上一节我们说到,在验证公钥安全性时,是在CA机构颁发的包含用户的公钥及其身份信息的数字证书,数字证书由权威机构——CA签发。这个CA权威机构可以是自己的服务器也可以是国际公认的CA权威机构。下面我就来

    2022年8月5日
    6
  • 谷歌为什么被中国赶出去_护士失误事件

    谷歌为什么被中国赶出去_护士失误事件

    腾讯科技讯(中涛)北京时间12月22日消息,美国知名IT杂志《eWeek》网络版今天刊文称,虽然谷歌多项产品在2010年期间取得了市场成功,但同样也出现了不少市场失误。不仅如此,由于谷歌知名度的提高,该公司还遭到了欧盟等监管部门的反垄断调查。《eWeek》为此评出了谷歌2010年十大产品失误和开局不利事件,其中包括谷歌街景收集用户上网隐私信息受指责、Buzz社交网络服务遭批评、没能成功收购美国团购网站Groupon等等。
    《eWeek》认为,在谷歌创建以来的12年当中,20

    2022年10月9日
    3

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号