mybatis高级应用四_逆向工程

1 逆向工程

源码请参考:云盘下工程 generatorSqlmapCustom

1.1     什么是逆向工程

mybaits需要程序员自己编写sql语句,mybatis官方提供逆向工程 可以针对单表自动生成mybatis执行所需要的代码(mapper.java,mapper.xml、po..)

企业实际开发中,常用的逆向工程方式: 由数据库的表生成java代码。

1.2     下载逆向工程

jar包 mybatis-generator-core-1.3.2.jar

 

1.3     使用方法(会用)--新知识:读取index.html

1.3.1     运行逆向工程

  建议使用java程序方式,不依赖开发工具。

1.3.2     生成代码配置文件 generatorConfig.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">

      <commentGenerator>

         <!-- 是否去除自动生成的注释 true:是 : false:否 -->

         <property name="suppressAllComments" value="true" />

      </commentGenerator>

      <!--数据库连接的信息:驱动类、连接地址、用户名、密码 -->

      <jdbcConnection driverClass="com.mysql.jdbc.Driver"

         connectionURL="jdbc:mysql://localhost:3306/mybatis" userId="root"

         password="mysql">

      </jdbcConnection>

      <!-- <jdbcConnection driverClass="oracle.jdbc.OracleDriver"

         connectionURL="jdbc:oracle:thin:@127.0.0.1:1521:yycg"

         userId="yycg"

         password="yycg">

      </jdbcConnection> -->

      <!-- 默认false,把JDBC DECIMAL 和 NUMERIC 类型解析为 Integer,为 true时把JDBC DECIMAL 和

         NUMERIC 类型解析为java.math.BigDecimal -->

      <javaTypeResolver>

         <property name="forceBigDecimals" value="false" />

      </javaTypeResolver>

      <!-- targetProject:生成PO类的位置 -->

      <javaModelGenerator targetPackage="cn.itcast.ssm.po"

         targetProject=".\src">

         <!-- enableSubPackages:是否让schema作为包的后缀 -->

         <property name="enableSubPackages" value="false" />

         <!-- 从数据库返回的值被清理前后的空格 -->

         <property name="trimStrings" value="true" />

      </javaModelGenerator>

        <!-- targetProject:mapper映射文件生成的位置 -->

      <sqlMapGenerator targetPackage="cn.itcast.ssm.mapper"

         targetProject=".\src">

         <!-- enableSubPackages:是否让schema作为包的后缀 -->

         <property name="enableSubPackages" value="false" />

      </sqlMapGenerator>

      <!-- targetPackage:mapper接口生成的位置 -->

      <javaClientGenerator type="XMLMAPPER"

         targetPackage="cn.itcast.ssm.mapper"

         targetProject=".\src">

         <!-- enableSubPackages:是否让schema作为包的后缀 -->

         <property name="enableSubPackages" value="false" />

      </javaClientGenerator>

      <!-- 指定数据库表 -->

      <table tableName="items"></table>

      <table tableName="orders"></table>

      <table tableName="orderdetail"></table>

      <table tableName="user"></table>

   </context>

</generatorConfiguration>

1.3.3     执行生成程序  GeneratorSqlmap.java

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;
        //指定 逆向工程配置文件
        File configFile = new File("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();
        }

    }

}

生成后的代码:

1.3.4     使用生成的代码

需要将生成工程中所生成的代码拷贝到自己的工程中。

测试ItemsMapper中的方法

//自定义条件查询

   @Test

   public void testSelectByExample() {

      ItemsExample itemsExample = new ItemsExample();

      //通过criteria构造查询条件

      ItemsExample.Criteria criteria = itemsExample.createCriteria();

      criteria.andNameEqualTo("笔记本3");

      //可能返回多条记录

      List<Items> list = itemsMapper.selectByExample(itemsExample);

      System.out.println(list);

   }

   //根据主键查询

   @Test

   public void testSelectByPrimaryKey() {

      Items items = itemsMapper.selectByPrimaryKey(1);

      System.out.println(items);

   }

//插入

   @Test

   public void testInsert() {

      //构造 items对象

      Items items = new Items();

      items.setName("手机");

      items.setPrice(999f);

      itemsMapper.insert(items);

   }

//更新数据

   @Test

   public void testUpdateByPrimaryKey() {

      //对所有字段进行更新,需要先查询出来再更新

      Items items = itemsMapper.selectByPrimaryKey(1);

      items.setName("水杯");

      itemsMapper.updateByPrimaryKey(items);

      //如果传入字段不空为才更新,在批量更新中使用此方法,不需要先查询再更新

      //itemsMapper.updateByPrimaryKeySelective(record);

   }
时间: 2024-12-17 17:25:53

mybatis高级应用四_逆向工程的相关文章

Stm32高级定时器(四)

Stm32高级定时器(四) 1 编码器接口模式 1.1 编码器原理 什么是正交?如果两个信号相位相差90度,则这两个信号称为正交.由于两个信号相差90度,因此可以根据两个信号哪个先哪个后来判断方向.根据每个信号脉冲数量的多少及整个编码轮的周长就可以算出当前行走的距离.如果再加上定时器的话还可以计算出速度. 增量式旋转编码器通过内部两个光敏接受管转化其角度码盘的时序和相位关系,得到其角度码盘角度位移量增加(正方向)或减少(负方向). A,B两点对应两个光敏接受管,A,B两点间距为 S2 ,码盘的光

数据结构课程设计题目四_二叉树

本文出自:http://blog.csdn.net/svitter 题目4:二叉树 给出一颗无线的二叉树.树的每一个结点用一整数对标识.二叉树构造如下 树根被标识为(1, 1): 如果一个结点被标识为(a, b), 则其左孩子被标识为(a+b,b),右孩子被标识为(a, a+b).现在给出某一结点(a, b),求树根到该结点的最短路径,并且同时求出从树根出发向左走和向右走的次数.建议完成人数1人. 注:此处使用了STL_stack库函数,是不允许的,我图方便. //===============

Valentino发布2013秋冬高级定制系列_菁华时尚生活,时尚生活电子杂志,Fine Born China

Valentino发布2013秋冬高级定制系列_菁华时尚生活,时尚生活电子杂志,Fine Born China alentino发布2013秋冬高级定制系列 编辑: Mavis 图源于网络 图源于网络       发表时间:2013-07-09 09:28 具传奇色彩的时装大师 Valentino Garavani 于1959年创立了Valentino(华伦天奴),其后不断扩大业务,目前在 70 多个国家设有逾 1,250 个销售点,其中 66 家由公司直接管理经营.Valentino(华伦天奴

java提高篇(四)_理解java的三大特性之多态 转自 http://cmsblogs.com

多态就是指程序中定义 的引用变量所指向的具体类型和通过该引用变量发出的方法调用在编程时并不确定,而是在程序运行期间才确定,即一个引用变量倒底会指向哪个类的实例对象,该 引用变量发出的方法调用到底是哪个类中实现的方法,必须在由程序运行期间才能决定.因为在程序运行时才确定具体的类,这样,不用修改源程序代码,就可以让 引用变量绑定到各种不同的类实现上,从而导致该引用调用的具体方法随之改变,即不修改程序代码就可以改变程序运行时所绑定的具体代码,让程序可以选择多个 运行状态,这就是多态性 一. 向上转型

Mybatis高级教程之数据库分页插件

mybatis分页 mybatis的数据库分页是基于内存实现的,这样不符合我们实际的应用场景,所有我们需要自己实现分页. 刚开始和朋友们争论是使用插件实现,还是使用原生的sql实现,最后公说公有理婆说婆有理,也没有争论出什么来. 但是最后想想我们使用mybatis的初衷不就是抛弃原生jdbc的繁琐,让mybatis替我们做了繁杂的步骤, 那么mybatis的分页必须通过mybatis内部的一些机制来实现才能满足我们的需要. Mybatis高级教程之数据库分页插件

MySQL数据库高级(四)——存储过程

MySQL数据库高级(四)--存储过程 一.存储过程简介 1.存储过程简介 存储过程是一组具有特定功能的SQL语句集组成的可编程的函数,经编译创建并保存在数据库中,用户可通过指定存储过程的名字并给定参数来调用执行.存储过程是数据库管理中常用的技术之一,可以很方便的做些类似数据统计.数据分析等工作,SQL SERVER.ORACLE.MySQL都支持存储过程,但不同的数据库环境语法结构有所区别. 2.存储过程的优点 A.存储过程增强了SQL语言的功能和灵活性.存储过程可以用流控制语句编写,有很强的

Mybatis系列(四)注解

Mybatis系列(四)注解 1.pom.xlm: <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://mave

Spring_总结_04_高级配置(五)_运行时注入值

一.前言 本文承接上一节:Spring_总结_04_高级配置(四)_bean的作用域 当讨论依赖注入的时候,我们通常所讨论的是将一个bean引用注入到另一个bean的属性或者构造参数中.它通常指的是将一个对象与另一个对象进行关联. 但是bean装配的另一个方面指的是将一个值注入到bean的属性或者构造函数中. spring提供了两种在运行时求值的方式: (1)属性占位符 (Property placeholder) (2)Spring表达式语言( SpEL) 原文地址:https://www.c

IDEA - 利用 Mybatis 使用 maven 命令生成逆向工程

IDEA - 利用 Mybatis 使用 maven 命令生成逆向工程 数据库建表 在本地的数据库建立表,然后利用 Mybatis 使用 maven 命令生成逆向工程. 本地使用 maven 建立一个项目 maven 建立项目,pom.xml 文件配置如下: <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0&qu