一.介绍
1.1.简介
MyBatis支持普通的SQL查询,存储过程,和高级映射的优秀==持久层框架==.MyBatis了几乎所有的JDBC和参数的手工设置以及对结果集的检索封装.MyBatis可以使用简单的==XML或注解==用于配置和原始映射,将接口和Java的POJO(Plain Old Java Objects,普通的Java对象)映射成数据库中的记录;
1.2.MyBatis和Hibernate
MyBatis:灵活性更高,因为可以自定义写sql语句,对需求变化应对的较好;数据库练习紧密;
Hibernate:自动化程序高,数据库无关性较高;
二.MyBatis的逆向工程
2.1.在java中的src下创建如下注入类GeneratorSqlmap
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import org.mybatis.generator.api.MyBatisGenerator;
import org.mybatis.generator.config.Configuration;
import org.mybatis.generator.config.xml.ConfigurationParser;
import org.mybatis.generator.exception.XMLParserException;
import org.mybatis.generator.internal.DefaultShellCallback;
public class GeneratorSqlmap {
public void generator() throws Exception{
List<String> warnings = new ArrayList<String>();
boolean overwrite = true;
//指定 逆向工程配置文件,要写generatorConfig.xml文件在工程中的本地路径
File configFile = new File("D:\\Workspace\\mybatis\\CustomerMybatisGenerator\\generatorConfig.xml");
ConfigurationParser cp = new ConfigurationParser(warnings);
Configuration config = cp.parseConfiguration(configFile);
DefaultShellCallback callback = new DefaultShellCallback(overwrite);
MyBatisGenerator myBatisGenerator = new MyBatisGenerator(config,
callback, warnings);
myBatisGenerator.generate(null);
}
public static void main(String[] args) throws Exception {
try {
GeneratorSqlmap generatorSqlmap = new GeneratorSqlmap();
generatorSqlmap.generator();
} catch (Exception e) {
e.printStackTrace();
}
}
}
2.2.配置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>
<context id="testTables" targetRuntime="MyBatis3">
<plugin type="org.mybatis.generator.plugins.SerializablePlugin"></plugin>
<commentGenerator>
<!-- 是否去除自动生成的注释 true:是 : false:否 -->
<property name="suppressAllComments" value="true"/>
</commentGenerator>
<!--数据库连接的信息:驱动类、连接地址、用户名、密码 -->
<jdbcConnection driverClass="com.mysql.jdbc.Driver"
connectionURL="jdbc:mysql://localhost:3306/mybatis"
userId="root"
password="123">
</jdbcConnection>
<!-- 默认false,把JDBC DECIMAL 和 NUMERIC 类型解析为 Integer,为 true时把JDBC DECIMAL 和
NUMERIC 类型解析为java.math.BigDecimal
-->
<javaTypeResolver>
<property name="forceBigDecimals" value="false"/>
</javaTypeResolver>
<!-- targetProject:生成PO类的位置 -->
<javaModelGenerator targetPackage="pers.lansir.mybatis.pojo"
targetProject=".\src">
<!-- enableSubPackages:是否让schema作为包的后缀 -->
<property name="enableSubPackages" value="false"/>
<!-- 从数据库返回的值被清理前后的空格 -->
<property name="trimStrings" value="true"/>
</javaModelGenerator>
<!-- targetProject:mapper映射文件生成的位置 -->
<sqlMapGenerator targetPackage="pers.lansir.mybatis.mapper"
targetProject=".\src">
<!-- enableSubPackages:是否让schema作为包的后缀 -->
<property name="enableSubPackages" value="false"/>
</sqlMapGenerator>
<!-- targetPackage:mapper接口生成的位置 -->
<javaClientGenerator type="XMLMAPPER"
targetPackage="pers.lansir.mybatis.mapper"
targetProject=".\src">
<!-- enableSubPackages:是否让schema作为包的后缀 -->
<property name="enableSubPackages" value="false"/>
</javaClientGenerator>
<!-- 指定数据库表 注:可以在tableName后面指定需要的表名 -->
<table schema="" tableName="%"></table>
</context>
</generatorConfiguration>
2.3.注意事项
2.3.1.前提是已经在数据库中定义好了表的字段;
2.3.2.在运行逆向工程前,要把包中(src下的)全部删除,不然可能存在问题;
2.3.3.一旦逆向工程生成之后,包名就不能再修改,因此生成之前需要定义好;
2.3.4.逆向工程只能生成单表,也就是无关联的,如果要关联需要自己手动进行关联;
三.自定义方法
3.1.在需要定义的pojo类中定义方法名(以及返回值类型和参数类型;
3.2.在pojo类对应的xml文件中通过sql语句对应着实现pojo中类的方法;
<select id=""></select>:查找数据相关操作使用的标签;
<update id=""></update>:更新数据相关操作使用的标签;
<insert id=""></insert>:插入数据相关操作使用的标签;
<delete id=""></delete>:删除数据相关操作使用的标签;
id:必须和自定义的方法名一致!
以下面为例说明;
<update id="updateByPrimaryKey" resultTtpe="string" parameterType="pers.lansir.pojo.User" >
update user
set username = #{username,jdbcType=VARCHAR},
birthday = #{birthday,jdbcType=DATE},
sex = #{sex,jdbcType=CHAR},
address = #{address,jdbcType=VARCHAR}
where id = #{id,jdbcType=INTEGER}
</update>
1.标签中写sql语句;
2.resultTtpe/parameterType:返回值/参数类型;
注意:
1).如果是基本数据类型/string,不分大小写;
2).如果是List<Integer>这种集合类型,只写泛型类型即可;
3).如果是bean,需要写bean所在的包名;
4).id = #{id,jdbcType=INTEGER},如果传入的参数是基本数据类型{}内可以随意写,如果传入的参数 是bean类,必须写该bean类中对应的属性名;