MyBatis基本使用

2018-10-19  本文已影响0人  蓝Renly

一.介绍

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类中对应的属性名;
上一篇下一篇

猜你喜欢

热点阅读