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. 给a链接跳转后的页面添加class

    $(document).ready(function(){ var test = window.location.href;//获取到当前页面的href // console.log(test); / ...

  2. 牛客网PAT乙级(Basic Level)真题-数素数 (20)

    题目描述 令Pi表示第i个素数.现任给两个正整数M <= N <= 10000,请输出PM到PN的所有素数. 输入描述: 输入在一行中给出M和N,其间以空格分隔. 输出描述: 输出从PM到 ...

  3. 解决Yii2中刷新网页时验证码不刷新的问题

    解决Yii2中刷新网页时验证码不刷新的问题 [ 2.0 版本 ] ljfrocky  2015-05-30 19:39:00  1304次浏览 5条评论 10110 在Yii2框架中,如果在表单中使用 ...

  4. 关于LaTeX公式排版

    [转载请注明出处]http://www.cnblogs.com/mashiqi 2017/10/05 1.居中括号框住多行公式 \begin{equation*} \left\{\begin{alig ...

  5. highcharts 获取不到隐藏容器大小

    1.固定图表大小 2.图表容器div的resize(绑定一个始终显示的,可以影响所有图表的) 影响容器大小改变的: 窗口大小改变 侧边栏切换 滚动条切换

  6. spring-task解决定时问题

    *  spring3以上版本,spring-content自带 spring-task ,来解决工程中的定时问题  基于注解配置spring定时任务 spring配置文件如下: <?xml ve ...

  7. ArcSDE账户频繁被锁定(Oracle显示12560协议适配器错误)

    最近遇到了一个比较奇葩的问题,启动系统的时候无法显示地图服务,查找原因时发现无法连接Oracle.出现以下错误: 之前遇到这种问题,通常是由于同时安装了64位和32位Oracle客户端,且二者的环境变 ...

  8. 关于JVM的一些冷知识

    (1) Java加载类的一般顺序: 1.静态属性,静态方法声明,静态块. 2.动态属性,普通方法声明,构造块. 3.构造方法. 当加载一个类时,JVM会根据属性的数据类型第一时间赋默认值(一举生成的) ...

  9. 国内优秀MVC开源框架jfinal简介

    JFinal简介 JFinal 项目开发始于2011年初,作者詹波(James Zhan)曾任搜格信息技术有限公司Java架构师,北京信息管理科学研究所CTO,现任微格网际(北京)科技有限公司联合创始 ...

  10. Spring IOC(四)总结升华篇

    本系列目录 Spring IOC(一)概览 Spring IOC(二)容器初始化 Spring IOC(三)依赖注入 Spring IOC(四)总结升华 =============正文分割线===== ...