浅谈MyBatisGenerator的使用
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&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的使用的更多相关文章
- 浅谈 Fragment 生命周期
版权声明:本文为博主原创文章,未经博主允许不得转载. 微博:厉圣杰 源码:AndroidDemo/Fragment 文中如有纰漏,欢迎大家留言指出. Fragment 是在 Android 3.0 中 ...
- 浅谈 LayoutInflater
浅谈 LayoutInflater 版权声明:本文为博主原创文章,未经博主允许不得转载. 微博:厉圣杰 源码:AndroidDemo/View 文中如有纰漏,欢迎大家留言指出. 在 Android 的 ...
- 浅谈Java的throw与throws
转载:http://blog.csdn.net/luoweifu/article/details/10721543 我进行了一些加工,不是本人原创但比原博主要更完善~ 浅谈Java异常 以前虽然知道一 ...
- 浅谈SQL注入风险 - 一个Login拿下Server
前两天,带着学生们学习了简单的ASP.NET MVC,通过ADO.NET方式连接数据库,实现增删改查. 可能有一部分学生提前预习过,在我写登录SQL的时候,他们鄙视我说:“老师你这SQL有注入,随便都 ...
- 浅谈WebService的版本兼容性设计
在现在大型的项目或者软件开发中,一般都会有很多种终端, PC端比如Winform.WebForm,移动端,比如各种Native客户端(iOS, Android, WP),Html5等,我们要满足以上所 ...
- 浅谈angular2+ionic2
浅谈angular2+ionic2 前言: 不要用angular的语法去写angular2,有人说二者就像Java和JavaScript的区别. 1. 项目所用:angular2+ionic2 ...
- iOS开发之浅谈MVVM的架构设计与团队协作
今天写这篇博客是想达到抛砖引玉的作用,想与大家交流一下思想,相互学习,博文中有不足之处还望大家批评指正.本篇博客的内容沿袭以往博客的风格,也是以干货为主,偶尔扯扯咸蛋(哈哈~不好好工作又开始发表博客啦 ...
- Linux特殊符号浅谈
Linux特殊字符浅谈 我们经常跟键盘上面那些特殊符号比如(?.!.~...)打交道,其实在Linux有其独特的含义,大致可以分为三类:Linux特殊符号.通配符.正则表达式. Linux特殊符号又可 ...
- 浅谈Angular的 $q, defer, promise
浅谈Angular的 $q, defer, promise 时间 2016-01-13 00:28:00 博客园-原创精华区 原文 http://www.cnblogs.com/big-snow/ ...
随机推荐
- 剑指Offer 17. 树的子结构 (二叉树)
题目描述 输入两棵二叉树A,B,判断B是不是A的子结构.(ps:我们约定空树不是任意一个树的子结构) 题目地址 https://www.nowcoder.com/practice/6e196c44c7 ...
- 1.6 selenium3+firefox环境搭建
1.6 selenium3+firefox环境搭建 有不少小伙伴在安装selenium环境后启动firefox报错,因为现在selenium升级到3.0了,跟2.0的版本还有有一点区别的.(备注:这里 ...
- redis 分布式锁实现
我们实现的分布式锁,使用redis提供的SET NX功能,由于redis server的单线程模型,保证了天然并发安全. https://stackoverflow.com/questions/116 ...
- JavaBasic_12
类 抽象:对象的共性 类:产生对象的模板(对于属性来讲,类规定有没有属性以及属性类型,具体的属性值因对象的不同而不同) 数据类型:数据集及基于这个数据集的操作 类:我们自定义类型(定义成员变量,基于数 ...
- Web服务器之Nginx详解(操作部分)
大纲 一.前言 二.Nginx 安装与配置 三.Nginx 配置文件详解 四.Nginx 命令参数 五.配置Nginx提供Web服务 六.配置Nginx的虚拟主机 七.配置Nginx的用户认证 八.配 ...
- PTA寒假三
抓老鼠啊~亏了还是赚了? (20 分) 某地老鼠成灾,现悬赏抓老鼠,每抓到一只奖励10元,于是开始跟老鼠斗智斗勇:每天在墙角可选择以下三个操作:放置一个带有一块奶酪的捕鼠夹(T),或者放置一块奶酪(C ...
- 在html中做表格以及给表格设置高宽字体居中和表格线的粗细
今天学习了如何用HTML在网页上做表格,对于我这种横列部分的属实有点麻烦,不过在看着表格合并单过格的时候我把整个表格看做代码就容易多了. 对于今天的作业让我学习了更多的代码,对于代码的应用希望更加熟练 ...
- SQLServer调WebService & 错误解决:请求格式无法识别
(sqlServer 2008 + VS2010) 首先,对服务器进行配置. sp_configure ; GO RECONFIGURE; GO sp_configure ; GO RECONFIGU ...
- 什么是pytorch(2Autograd:自动求导)(翻译)
Autograd: 自动求导 pyTorch里神经网络能够训练就是靠autograd包.我们来看下这个包,然后我们使用它来训练我们的第一个神经网络. autograd 包提供了对张量的所有运算自动求导 ...
- zabbix使用微信报警(四)
https://qy.weixin.qq.com/ 企业号注册 http://qydev.weixin.qq.com/wiki/index.php?title=%E9%A6%96%E9%A1%B5 ...