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);

   }

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

  1. mybatis 高级映射和spring整合之逆向工程(7)

    mybatis 高级映射和spring整合之逆向工程(7) 4.0 逆向工程 4.1 mybatis需要程序员自己编写sql语句,mybatis官方提供逆向工程,可以针对单表自动生成mybatis执行 ...

  2. 【Mybatis高级映射】一对一映射、一对多映射、多对多映射

    前言 当我们学习heribnate的时候,也就是SSH框架的网上商城的时候,我们就学习过它对应的高级映射,一对一映射,一对多映射,多对多映射.对于SSM的Mybatis来说,肯定也是差不多的.既然开了 ...

  3. Stm32高级定时器(四)

    Stm32高级定时器(四) 1 编码器接口模式 1.1 编码器原理 什么是正交?如果两个信号相位相差90度,则这两个信号称为正交.由于两个信号相差90度,因此可以根据两个信号哪个先哪个后来判断方向.根 ...

  4. MyBatis高级篇之整合ehcache缓存框架

    MyBatis高级篇之整合ehcache缓存框架  2017-09-01  0 Comments  1,671 Views  0 Times 一.前言 MyBatis为我们提供了Cache接口,也提供 ...

  5. mybatis 高级映射和spring整合之高级映射(4)

    mybatis 高级映射和spring整合之高级映射 ----------------学习结构-------------------- 0.0 对订单商品数据模型进行分析 1.0 高级映射 1.1 一 ...

  6. JavaWeb_(Mybatis框架)关联查询_六

    系列博文: JavaWeb_(Mybatis框架)JDBC操作数据库和Mybatis框架操作数据库区别_一 传送门 JavaWeb_(Mybatis框架)使用Mybatis对表进行增.删.改.查操作_ ...

  7. MyBatis 高级查询环境准备(八)

    MyBatis 高级查询 之前在学习 Mapper XML 映射文件时,说到 resultMap 标记是 MyBatis 中最重要最强大也是最复杂的标记,而且还提到后面会详细介绍它的高级用法. 听到高 ...

  8. MyBatis学习 之 四、MyBatis配置文件

    目录(?)[-] 四MyBatis主配置文件 properties属性 settings设置 typeAliases类型别名 typeHandlers类型句柄 ObjectFactory对象工厂 pl ...

  9. 【转】MyBatis学习总结(四)——解决字段名与实体类属性名不相同的冲突

    [转]MyBatis学习总结(四)——解决字段名与实体类属性名不相同的冲突 在平时的开发中,我们表中的字段名和表对应实体类的属性名称不一定都是完全相同的,下面来演示一下这种情况下的如何解决字段名与实体 ...

随机推荐

  1. Java ERROR JDWP Unable to get JNI 1.2 environment, jvm

    Java: ERROR: JDWP Unable to get JNI 1.2 environment, jvm->GetEnv() return code = -2 DWP exit erro ...

  2. 一月七笔千万美元投资!国内VR行业在刮什么风?

    虽然直到现在仍然没有一款真正能够彻底普及并改变大众操控方式的虚拟现实设备出现,但其已经被认定是未来人类社会中不可或缺的重要组成部分和工作.生活.娱乐.休闲载体.而虚拟现实设备.内容在今年年初CES展会 ...

  3. C++走向远洋——68(十六周、文件)

    */ * Copyright (c) 2016,烟台大学计算机与控制工程学院 * All rights reserved. * 文件名:text.cpp * 作者:常轩 * 微信公众号:Worldhe ...

  4. 一步到位datatabls中文化

    #一步到位datatabls中文化 加入以下代码 $(document).ready(function () { $('#declarationList').DataTable({ destroy:t ...

  5. git指令-工作区和暂存区

    #git指令-工作区和暂存区 工作区(Working Directory):就是平常电脑可以看到的文件夹目录 版本库(Repository):存放git内容的文件夹例如: Git的版本库里存了很多东西 ...

  6. 54-with管理文件操作上下文

    目录 with管理文件操作上下文 with管理文件操作上下文 之前我们使用open()方法操作文件,但是open打开文件后我们还需要手动释放文件对操作系统的占用.其实我们可以更方便的打开文件,即Pyt ...

  7. 7-46 jmu-python-求单词长度 (10 分)

    输入n个单词,计算每个单词长度.对单词长度排序,分行输出单词长度及其单词. 输入格式: 行1:单词个数n 分行输入n个单词 输出格式: 分行输出单词长度及其单词.(单词长度,单词)用元组表示 输入样例 ...

  8. 002-DOM事件实例-实现一个可以拖拽的登陆窗口

    前言:这是跟着慕课网一个老师的视频做的,这几天在重新的梳理自己,写完这个例子要系统的学一下jQuery,我司现在用的还是比较多,毕竟用了它不用考虑IE兼容性,可以让开发更有效率. 1.项目需求及基本的 ...

  9. 解决微信小程序视频组件层级过高的问题

    本文首发于我的个人博客:http://www.fogcrane.org 前言 在微信小程序的开发中,总有一些"VIP"组件,他们的层级,高得让人抓狂,总是凌驾于很多其他低层级组件之 ...

  10. LeetCode 278.First Bad Version(E)(P)

    题目: You are a product manager and currently leading a team to develop a new product. Unfortunately, ...