1.概述

日常中使用MyBatis最为麻烦的就是编写Mapper文件了, 如果数据库增加一张表, 这时通常会复制一个Mapper, 然后改一下namespace, 然后再改resultMap, 改resultType等等, 也忒麻烦了.

有需求就有解决方法, MyBatis Generator横空出世, 那么它有什么绝招呢?

先来看一下官网的介绍

MyBatis Generator (MBG) is a code generator for MyBatis MyBatis and iBATIS. It will generate code for all versions of MyBatis, and versions of iBATIS after version 2.2.0. It will introspect a database table (or many tables) and will generate artifacts that can be used to access the table(s). This lessens the initial nuisance of setting up objects and configuration files to interact with database tables. MBG seeks to make a major impact on the large percentage of database operations that are simple CRUD (Create, Retrieve, Update, Delete). You will still need to hand code SQL and objects for join queries, or stored procedures.

简单说, MBG是一个代码生成器, 自动生成简单的CRUD代码和SQL, 但是你仍然可以手动编写SQL和对象代码.

咦, 突然感觉幸福来的太突然了. 下面来看一下如何使用这个利器吧.

2.依赖

  • 需要jdk1.6或更高版本
  • 需要JDBCdriver实现DatabaseMeteData接口, 尤其是getColumns和getPromaryKeys方法.

3.Maven插件配置

通常我们使用Maven进行使用, 当然也可以使用命令行或者Java代码进行调用等. 可以参考Running MyBatis Generator.

在项目中加入MyBatis Generator插件即可.

<plugins>
<plugin>
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator-maven-plugin</artifactId>
<version>1.3.7</version>
</plugin>
</plugins>

只是加入了插件, 那么如何来配置插件的属性呢?

在插件中指定配置文件的位置

<plugins>
<plugin>
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator-maven-plugin</artifactId>
<version>1.3.7</version>
<configuration>
<configurationFile>src/main/resources/MyBatisGenerator.xml</configurationFile>
</configuration>
</plugin>
</plugins>

这时, 所有的配置只需在MyBatisGenerator.xml中配置即可.

4.配置文件说明

下面是我个人使用的配置文件配置, 我把他们分为两个文件, 一个是MyBatisGenerator.xml, 一个是MyBatisGenerator.properties.

MyBatisGenerator.xml是一般不需要改动的, 只需要改动MyBatisGenerator.properties中的配置即可.

MyBatisGenerator.properties文件

# connector-j jar包位置
mg.jar.location=C:/Users/SnailMaster/.m2/repository/mysql/mysql-connector-java/5.1.40/mysql-connector-java-5.1.40.jar # 数据库连接信息
mg.user=root
mg.password=admin
mg.jdbcUrl=jdbc:mysql://localhost:3306/test?useUnicode=true&amp;characterEncoding=UTF-8
mg.driverClass=com.mysql.jdbc.Driver # 工程目录
mg.targetProject=D:/IdeaProjects/snailCode # model文件路径
mg.package.model=me.snail.web.entity
mg.path.model=src/main/java # xml文件路径
mg.package.xml=me.snail.web.dao
mg.path.xml=src/main/resources # dao文件路径
mg.package.dao=me.snail.web.dao
mg.path.dao=src/main/java # 工程目录下得classpath路径, Maven项目通常是 /src/main/java
mg.path.src=src/main/java # 要生成实体的数据库表名
mg.tableName=employee

MyBatisGenerator.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> <properties resource="MyBatisGenerator.properties"/> <!-- 数据库连接驱动jar包 -->
<classPathEntry location="${mg.jar.location}" /> <context id="MySQLTables" targetRuntime="MyBatis3"> <!-- 生成的Java文件的编码 -->
<!--<property name="javaFileEncoding" value="UTF-8"/>--> <commentGenerator>
<property name="suppressAllComments" value="true" />
<property name="addRemarkComments" value="true" />
</commentGenerator> <!-- 数据库连接信息 -->
<jdbcConnection driverClass="${mg.driverClass}"
connectionURL="${mg.jdbcUrl}"
userId="${mg.user}"
password="${mg.password}">
</jdbcConnection> <!-- java类型处理器 -->
<javaTypeResolver>
<!--
true:使用BigDecimal对应DECIMAL和 NUMERIC数据类型
false:默认,
scale>0;length>18:使用BigDecimal;
scale=0;length[10,18]:使用Long;
scale=0;length[5,9]:使用Integer;
scale=0;length<5:使用Short;
-->
<property name="forceBigDecimals" value="false" />
</javaTypeResolver> <!-- java模型创建器,是必须要的元素 -->
<javaModelGenerator targetPackage="${mg.package.model}"
targetProject="${mg.targetProject}/${mg.path.model}">
<!--
在targetPackage的基础上,根据数据库的schema再生成一层package,
最终生成的类放在这个package下,默认为false
-->
<property name="enableSubPackages" value="true" />
<!-- 设置是否在getter方法中,对String类型字段调用trim()方法 -->
<property name="trimStrings" value="false" />
</javaModelGenerator> <sqlMapGenerator targetPackage="${mg.package.xml}"
targetProject="${mg.targetProject}/${mg.path.xml}">
<property name="enableSubPackages" value="true" />
</sqlMapGenerator> <javaClientGenerator type="XMLMAPPER"
targetPackage="${mg.package.dao}"
targetProject="${mg.targetProject}/${mg.path.dao}">
<property name="enableSubPackages" value="true" />
</javaClientGenerator> <table tableName="${mg.tableName}"></table> </context>
</generatorConfiguration>

5.运行

配置完成之后, 直接运行插件的mybatis-generator:generate即可自动生成代码, 爽歪歪.

如果有问题的话, 在运行时可以加入 -X 参数运行, 查看错误信息.

6.总结

这里是改插件的官方文档: http://www.mybatis.org/generator/configreference/xmlconfig.html

学习一个新技术最好的方法就是看官方文档, 然后不断的写demo.

浅谈MyBatisGenerator的使用的更多相关文章

  1. 浅谈 Fragment 生命周期

    版权声明:本文为博主原创文章,未经博主允许不得转载. 微博:厉圣杰 源码:AndroidDemo/Fragment 文中如有纰漏,欢迎大家留言指出. Fragment 是在 Android 3.0 中 ...

  2. 浅谈 LayoutInflater

    浅谈 LayoutInflater 版权声明:本文为博主原创文章,未经博主允许不得转载. 微博:厉圣杰 源码:AndroidDemo/View 文中如有纰漏,欢迎大家留言指出. 在 Android 的 ...

  3. 浅谈Java的throw与throws

    转载:http://blog.csdn.net/luoweifu/article/details/10721543 我进行了一些加工,不是本人原创但比原博主要更完善~ 浅谈Java异常 以前虽然知道一 ...

  4. 浅谈SQL注入风险 - 一个Login拿下Server

    前两天,带着学生们学习了简单的ASP.NET MVC,通过ADO.NET方式连接数据库,实现增删改查. 可能有一部分学生提前预习过,在我写登录SQL的时候,他们鄙视我说:“老师你这SQL有注入,随便都 ...

  5. 浅谈WebService的版本兼容性设计

    在现在大型的项目或者软件开发中,一般都会有很多种终端, PC端比如Winform.WebForm,移动端,比如各种Native客户端(iOS, Android, WP),Html5等,我们要满足以上所 ...

  6. 浅谈angular2+ionic2

    浅谈angular2+ionic2   前言: 不要用angular的语法去写angular2,有人说二者就像Java和JavaScript的区别.   1. 项目所用:angular2+ionic2 ...

  7. iOS开发之浅谈MVVM的架构设计与团队协作

    今天写这篇博客是想达到抛砖引玉的作用,想与大家交流一下思想,相互学习,博文中有不足之处还望大家批评指正.本篇博客的内容沿袭以往博客的风格,也是以干货为主,偶尔扯扯咸蛋(哈哈~不好好工作又开始发表博客啦 ...

  8. Linux特殊符号浅谈

    Linux特殊字符浅谈 我们经常跟键盘上面那些特殊符号比如(?.!.~...)打交道,其实在Linux有其独特的含义,大致可以分为三类:Linux特殊符号.通配符.正则表达式. Linux特殊符号又可 ...

  9. 浅谈Angular的 $q, defer, promise

    浅谈Angular的 $q, defer, promise 时间 2016-01-13 00:28:00  博客园-原创精华区 原文  http://www.cnblogs.com/big-snow/ ...

随机推荐

  1. mysql中有关查询的技巧方法

    * 查最高值或者最低值对应行的数据: 查询Score表中的最高分的学生学号和课程号: 两种方法(子查询或者排序): 子查询法:select sno,cno from score where degre ...

  2. 手把手教你用git

    一.如何安装git 下载地址: https://git-scm.com/download/win 根据自己的电脑选择是32位的还是64位的.下载完后直接运行,之后一直next就好了.安装成功后,会有这 ...

  3. Locust 集合点

    直接编写接口事务脚本对后台接口进行测试:有时测试需要让所有并发用户完成初始化后再进行压力测试,这就需要类似于LoadRunner中的集合点的概念,由于框架本身没有直接封装,有如下办法实现: from ...

  4. web(六)css的基本语法、取值与单位

    css语法包含如下部分: 选择器:用于选择需要添加样式的元素. 属性(property):样式的属性名称,例如color代表颜色. 取值与单位:属性对应的值以及单位. 语法规则:css的某些固定语法. ...

  5. gitlab修改默认端口

    部署gitlab的时候,一启动,发现80和8080端口已经被占用,无奈,只得先将监听80端口的nginx和监听8080端口的jenkins停止.这会儿有空,琢磨一下如何修改gitlab的默认端口. 修 ...

  6. 微信小程序传值以及获取值方法

    http://www.51xuediannao.com/xiaochengxu/xiaochengxu-chuanzhi.html

  7. 绑定属性 - v-bind

    未绑定 <!DOCTYPE html><html><head>    <meta charset="utf-8">    <t ...

  8. 解决使用C/C++配置ODBC链接使用SQLConnect返回-1

    VS中建立空项目使用ODBC连接时,SQLConnect函数总是返回-1,mysql和命令行连接数据库都是没问题的 retcode = SQLConnect(hdbc, (SQLCHAR*)" ...

  9. 关于java类加载的那些事

    首先,类加载的定义: 类加载(Class Loading)是一种机制,他描述的是将字节码以文件形式加载到内存再经过连接.初始化后,最终形成可以被虚拟机直接使用的Java类型地过程. 其次,类加载器的分 ...

  10. too many open files(打开的文件过多)解决方法

    https://blog.csdn.net/roy_70/article/details/78423880 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.n ...