精华内容
下载资源
问答
  • MyBatis框架的学习(七)——MyBatis逆向工程自动生成代码什么是逆向工程MyBatis的一个主要的特点就是需要程序员自己编写sql,那么如果表太多的话,难免会很麻烦,所以mybatis官方提供了一个逆向工程,可以针对单表...

    什么是逆向工程?

    MyBatis一个主要的特点就是需要程序员自己编写SQL,那么如果表太多的话,难免会很麻烦,所以MyBatis官方提供了一个逆向工程,可以针对单表自动生成MyBatis执行所需要的代码(包括po类,mapper.xml映射文件和Mapper接口等)。一般在实际开发中,常用的逆向工程方式是通过数据库的表生成代码。

    使用逆向工程

    使用MyBatis的逆向工程,需要导入逆向工程的jar包,这里,笔者使用的是mybatis-generator-core-1.3.2.jar,下面开始总结一下MyBatis逆向工程的使用步骤。

    新建一个Java工程(重要)

    我们要新建一个Java工程,这个工程专门用于使用逆向工程生成代码。有些人可能会问,为什么要新建一个工程呢?直接在原来的工程中你想生成不就可以了么?确实是这样,可以在原来的工程中生成,但是有风险,因为MyBatis是根据配置文件来生成的(下面会说到),如果生成的路径中有相同的文件,那么就会覆盖原来的文件,这就是风险。所以开发中一般都会新建一个Java工程来生成,然后将生成的文件拷贝到自己的工程中,这也不麻烦,而且很安全。
    在这里插入图片描述
    从上图中可以清楚地看到:

    • ①就是要执行的Java代码,执行它即可生成我们需要的代码;
    • ②是执行过程中新建的包,这个包都可以在④的配置文件中指定,最好是跟我们自己项目的包名一致,后面就可以直接拷贝了,也就不需要修改包名了;
    • ③就是jar包咯;
    • ④是配置文件,下面我会对它详细分析。

    读者如若需要MyBatis的逆向工程,即generatorSqlmapCustom,可点击 MyBatis的逆向工程——generatorSqlmapCustom 进行下载!

    配置逆向工程的配置文件

    MyBatis逆向工程生成代码需要有一个配置文件,名字随便起,例如generatorConfig.xml。然后MyBatis会根据这个配置文件中的配置,生成相应的代码。mybatis-generator-core-1.3.2.jar这个jar包里面有帮助文档,打开后里面有配置文件的模板,这里就不再赘述了,下面先把配置文件写好。

    <?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="liayun">
    		</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="com.meimeixia.ssm.po"
    			targetProject=".\src">
    			<!-- enableSubPackages:是否让schema作为包的后缀 -->
    			<property name="enableSubPackages" value="false" />
    			<!-- 从数据库返回的值被清理前后的空格 -->
    			<property name="trimStrings" value="true" />
    		</javaModelGenerator>
            <!-- targetProject:mapper映射文件生成的位置 -->
    		<sqlMapGenerator targetPackage="com.meimeixia.ssm.mapper" 
    			targetProject=".\src">
    			<!-- enableSubPackages:是否让schema作为包的后缀 -->
    			<property name="enableSubPackages" value="false" />
    		</sqlMapGenerator>
    		<!-- targetPackage:mapper接口生成的位置 -->
    		<javaClientGenerator type="XMLMAPPER"
    			targetPackage="com.meimeixia.ssm.mapper" 
    			targetProject=".\src">
    			<!-- enableSubPackages:是否让schema作为包的后缀 -->
    			<property name="enableSubPackages" value="false" />
    		</javaClientGenerator>
    		<!-- 指定数据库表 -->
    		<table schema="" tableName="user"></table>
    		<table schema="" tableName="order"></table>
    		
    		<!-- 有些表的字段需要指定java类型
    		 <table schema="" tableName="">
    			<columnOverride column="" javaType="" />
    		</table> -->
    	</context>
    </generatorConfiguration>
    

    从上面配置文件的内容中可以看出,配置文件主要做的几件事是:

    1. 连接数据库,这是必须的,要不然怎么根据数据库中的表生成相应的代码呢?
    2. 指定要生成代码的位置,要生成的代码包括po类,mapper.xml映射文件和Mapper接口;
    3. 指定数据库中想要生成哪些表。

    执行逆向工程生成代码

    配置文件搞好了,然后就可以执行以下程序来生成相应的代码了,生成的Java程序在下载的逆向工程文档中都有示例,下面我直接给出了一个这样的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();
    		}
    		
    	}
    
    }
    

    运行一下以上程序即可,运行完了后刷新一下工程,就可以看到最新生成的代码了。
    在这里插入图片描述
    这里可以看出有个细节,每个po类多了一个东西,就是XxxExample.java,这个类是给用户自定义SQL使用的,后面我会提到。到这里就生成好了,下面我们就要把生成的代码拷贝到自己的工程中使用了。

    逆向工程测试

    在这里我把上面生成的代码拷贝到上文《MyBatis快速入门第七讲——MyBatis整合Spring》的工程案例中,如下图所示。
    在这里插入图片描述
    接着在Spring核心配置文件(即applicationContext.xml)添加如下配置。

    <!-- 动态代理配置的第二种方式:配置包扫描器(推荐使用这种开发方式) -->
    <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
    	<!-- basePackage属性配置要扫描的包,多个包之间可用","进行分隔 -->
    	<!-- <property name="basePackage" value="com.meimeixia.mybatis.mapper" /> -->
    	<property name="basePackage" value="com.meimeixia.ssm.mapper" />
    </bean>
    

    最后,针对以上UserMapper接口编写一个UserMapperGTest单元测试类,该单元测试类处于工程中的如下图所示的位置。
    在这里插入图片描述
    以上单元测试类的内容如下所示:

    package com.meimeixia.mybatis.test;
    
    import static org.junit.Assert.*;
    
    import java.util.List;
    
    import org.junit.Before;
    import org.junit.Test;
    import org.springframework.context.ApplicationContext;
    import org.springframework.context.support.ClassPathXmlApplicationContext;
    
    import com.meimeixia.ssm.mapper.UserMapper;
    import com.meimeixia.ssm.po.User;
    import com.meimeixia.ssm.po.UserExample;
    import com.meimeixia.ssm.po.UserExample.Criteria;
    
    public class UserMapperGTest {
    	
    	private ApplicationContext applicationContext;
    	
    	@Before
    	public void init() {
    		applicationContext = new ClassPathXmlApplicationContext("classpath:applicationContext.xml");
    	}
    
    	@Test
    	public void testInsertSelective() {
    		UserMapper userMapper = applicationContext.getBean(UserMapper.class);
    		User user = new User();
    		user.setUsername("诸葛亮");
    		user.setAddress("广州萝岗");
    		user.setSex("1");
    		userMapper.insertSelective(user);
    	}
    
    	@Test
    	public void testSelectByExample() {
    		UserMapper userMapper = applicationContext.getBean(UserMapper.class);
    		//UserExample类是用来拼装查询条件用的
    		UserExample example = new UserExample();
    		//创建一个Criteria对象(Criteria类是UserExample类里面的内部类,Criteria类是干什么用的呢?它是专门用于封装自定义查询条件的)
    		Criteria criteria = example.createCriteria();
    		//设置查询条件
    		criteria.andUsernameLike("%范%");
    		criteria.andSexEqualTo("2");
    		//执行查询
    		List<User> list = userMapper.selectByExample(example);
    		for (User user : list) {
    			System.out.println(user);
    		}
    	}
    
    	@Test
    	public void testSelectByPrimaryKey() {
    		UserMapper userMapper = applicationContext.getBean(UserMapper.class);
    		User user = userMapper.selectByPrimaryKey(30);
    		System.out.println(user);
    	}
    
    	@Test
    	public void testUpdateByPrimaryKeySelective() {
    		fail("Not yet implemented");
    	}
    
    }
    

    可以看出,逆向工程生成的代码,基本上和之前使用的差不多,只不过它更规范一点,而且还多了自定义查询条件的Java类,用起来还是挺方便的。关于MyBatis的逆向工程就总结到这吧!

    展开全文
  • 自动生成代码工具 自定义异常

    万次阅读 2019-09-20 15:59:30
    自动生成代码工具 自定义异常 /** * @author InJavaWeTrust */ public class JavaTypeException extends Exception { /** * */ private static final long serialVersionUI...

                                            自动生成代码工具 自定义异常

    /**
     * @author InJavaWeTrust
     */
    public class JavaTypeException extends Exception {
    
    	/**
    	 * 
    	 */
    	private static final long serialVersionUID = 1L;
    	
    	public JavaTypeException() {
    		super();
    	}
    	
    	public JavaTypeException(String errMsg) {
    		super(errMsg);
    	}
    
    }
    /**
     * @author InJavaWeTrust
     */
    public class MybatisTypeException extends Exception {
    
    	/**
    	 * 
    	 */
    	private static final long serialVersionUID = 1L;
    
    	public MybatisTypeException() {
    		super();
    	}
    
    	public MybatisTypeException(String errMsg) {
    		super(errMsg);
    	}
    
    }
    /**
     * @author InJavaWeTrust
     */
    public class XMLParserException extends Exception {
    
    	private static final long serialVersionUID = 454584013503274703L;
    
    	public XMLParserException() {
    		super();
    	}
    
    	public XMLParserException(String errMsg) {
    		super(errMsg);
    	}
    
    }

     

    展开全文
  • 自动生成代码工具 bean类

    万次阅读 2019-09-20 15:59:30
    自动生成代码工具 bean类 /** * @author InJavaWeTrust */ public class DataSource { private String driver; private String url; private String username; priv...

                                                 自动生成代码工具 bean类

    /**
     * @author InJavaWeTrust
     */
    public class DataSource {
    	
    	private String driver;
    	private String url;
    	private String username;
    	private String password;
    	
    	public String getDriver() {
    		return driver;
    	}
    	public void setDriver(String driver) {
    		this.driver = driver;
    	}
    	public String getUrl() {
    		return url;
    	}
    	public void setUrl(String url) {
    		this.url = url;
    	}
    	public String getUsername() {
    		return username;
    	}
    	public void setUsername(String username) {
    		this.username = username;
    	}
    	public String getPassword() {
    		return password;
    	}
    	public void setPassword(String password) {
    		this.password = password;
    	}
    }
    /**
     * @author InJavaWeTrust
     */
    public class Global {
    	
    	private String osdir;
    	private String javapackage;
    	private String author;
    	private String project;
    	
    	public String getOsdir() {
    		return osdir;
    	}
    	public void setOsdir(String osdir) {
    		this.osdir = osdir;
    	}
    	public String getJavapackage() {
    		return javapackage;
    	}
    	public void setJavapackage(String javapackage) {
    		this.javapackage = javapackage;
    	}
    	public String getAuthor() {
    		return author;
    	}
    	public void setAuthor(String author) {
    		this.author = author;
    	}
    	public String getProject() {
    		return project;
    	}
    	public void setProject(String project) {
    		this.project = project;
    	}
    }
    
    /**
     * @author InJavaWeTrust
     */
    public class Table {
    	
    	private String tableName;
    	
    	public String getTableName() {
    		return tableName;
    	}
    	
    	public void setTableName(String tableName) {
    		this.tableName = tableName;
    	}
    	
    }

     

    展开全文
  • 自动生成代码工具 其他类

    万次阅读 2019-09-20 15:59:30
    自动生成代码工具 其他类 /** * @author InJavaWeTrust */ @FunctionalInterface public interface XMLElement<T, E> { /** * 获取配置文件中的元素 * @param t * @return ...

                                          自动生成代码工具 其他类

     

    /**
     * @author InJavaWeTrust
     */
    @FunctionalInterface
    public interface XMLElement<T, E> {
    	
    	/**
    	 * 获取配置文件中的元素
    	 * @param t
    	 * @return
    	 */
    	E getElement(T t);
    
    }
    import com.ijwt.util.UtilXML;
    
    /**
     * @author InJavaWeTrust
     */
    public class Constants {
    	
    	private Constants() {}
    	
    	public static final String DRIVER   = UtilXML.INSTANCE.getDataSource().getDriver();
    	public static final String URL      = UtilXML.INSTANCE.getDataSource().getUrl();
    	public static final String USER     = UtilXML.INSTANCE.getDataSource().getUsername();
    	public static final String PASSWORD = UtilXML.INSTANCE.getDataSource().getPassword();
    	
    	public static final String GLOBAL     = "global";
    	public static final String DATASOURCE = "dataSource";
    	public static final String TABLELIST  = "tableList";
    }

     

    展开全文
  • Python自动生成代码 - 通过tkinter图形化输入并生成代码框架背景脚本代码Demo_CodeGenerator.pydisplay.pyFileHandler.py:脚本运行结果:脚本代码目录 背景 在写代码过程中,如果有频繁重复性的编码操作,或者可以...
  • 自动生成代码工具 maven pom

    万次阅读 2019-09-20 15:59:30
    自动生成代码工具 maven pom <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http:...
  • 自动生成代码工具 配置文件

    万次阅读 2019-09-20 15:59:31
    自动生成代码工具 配置文件 <?xml version="1.0" encoding="UTF-8" ?> <config> <global> <osdir value="E:\workspace\ijwt-ftl\src\main\resource...
  • SpringBoot JPA 自动生成代码 (一) 生成实体类

    万次阅读 多人点赞 2019-09-28 10:15:31
    之前做SSM项目时,一直使用的是Mybatis的Generator自动生成代码工具,也是蛮好使的。现在换了SpringBoot,自动生成代码使用的是人人开源项目修改来的,可以直接生成简单的CRUD代码和HTML页面。 一次偶然的机会,帮群...
  • 自动生成代码工具 模板文件

    万次阅读 2019-09-20 15:59:31
    自动生成代码工具 模板文件 package ${javapackage}.po; /** * <p>${title}</p> * 类名:${className}PO<br> * 创建人:${author}<br> * 创建时间:${.now?string(...
  • 自动生成代码工具 模板工具类

    万次阅读 2019-09-20 15:59:31
    自动生成代码工具 模板工具类 import java.io.BufferedWriter; import java.io.FileOutputStream; import java.io.OutputStreamWriter; import java.util.ArrayList; i...
  • 自动生成代码工具类

    千次阅读 2019-06-10 19:26:09
    自动生成代码工具自动生成代码的思路代码结构生成代码主要步骤生成实体模板开始生成代码最终生成的实体service层接口 这是我在工作之余自己写的一个Java代码生成工具,虽然网上有不少代码自动生成的工具,但是原理都...
  • 自动生成代码工具 数据库工具类

    万次阅读 2019-09-20 15:59:31
    自动生成代码工具 数据库工具类 import java.sql.Connection; import java.sql.DatabaseMetaData; import java.sql.DriverManager; import java.sql.PreparedStatement; i...
  • 自动生成代码工具 文件工具类

    万次阅读 2019-09-20 15:59:31
    自动生成代码工具 文件工具类 import java.io.File; import java.util.List; import java.util.Map; import org.apache.commons.lang.StringUtils; import org.slf4j.Lo...
  • 自动生成代码工具 log4j

    万次阅读 2019-09-20 15:59:31
    自动生成代码工具 log4j log4j.rootLogger=INFO,Console,FILE #输出到控制台 log4j.appender.Console=org.apache.log4j.ConsoleAppender log4j.appender.Console.layout=org.apa...
  • 自动生成代码工具 字符串工具类

    万次阅读 2019-09-20 15:59:31
    自动生成代码工具 字符串工具类 import org.apache.commons.lang.StringUtils; import com.ijwt.exception.JavaTypeException; import com.ijwt.exception.MybatisTypeException; /** * @...
  • 自动生成代码工具 配置文件工具类

    万次阅读 2019-09-20 15:59:31
    自动生成代码工具 配置文件工具类 import java.io.IOException; import java.io.InputStream; import java.util.ArrayList; import java.util.List; import org.dom4j.Do...
  • Mybatis——自动生成代码

    千次阅读 2019-06-29 16:57:07
    Mybatis——自动生成代码]() 本篇文章所说的自动生成代码,具体来说是生成maven工程路径src/main/java下的包和实体类以及src/main下的resources文件夹(其中有个映射xml文件),是用于生成动态SQL操作相关的代码。 ...
  • MyBatis可自动生成代码的逆向工程

    千次下载 热门讨论 2015-07-16 09:47:50
    MyBatis可以根据数据库表单自动生成代码的逆向工程
  • mybatis自动生成代码

    千次阅读 2018-12-31 17:08:25
    mybatis自动生成代码有三种方式:命令行、eclipse插件、maven插件。在这里主要介绍比较方便使用的一种方式–maven插件,它可以在eclipse、idea中通用。 在pom.xml文件中配置mybatis-generator插件: &amp;lt;...
  • SpringBoot整合freemarker自动生成代码

    千次阅读 2020-02-11 10:16:48
    SpringBoot整合freemarker自动生成代码mybatis(二)
  • 自动生成代码神器5.0

    千次阅读 2019-06-04 14:38:59
    需求:想设计一个自动生成代码的网页,后续将引用人工智能,轻松写代码。现在功能除了能生成代码,还可以生成数据文档,根据不同模板,可支持md编辑模板。 主要功能就是从数据库查询数据表,从数据表读取字段,...
  • Jooq自动生成代码

    千次阅读 2018-05-30 22:34:32
    这里只说下自动生成代码的功能和一个我踩的坑。 最初的项目结构: 我是用的springboot 框架,主要相关代码都在pom中: &amp;lt;parent&amp;gt; &amp;lt;groupId&amp;gt;org.springframework...
  • AOS 自动生成代码功能实现

    千次阅读 2016-08-12 10:57:39
    来自于AOS的扩展。项目下载地址:https://git.oschina.net/hepeng1/aos实现代码自动生成,只要创建表就可以根据表自动生成相应...Service生成自动生成代码(四) Controller生成自动生成代码(五) Sql VarMapper映射生成自
  • Jeecgboot项目自动生成代码

    千次阅读 2020-07-15 09:48:06
    Jeecgboot项目自动生成代码 Jeecg,英文名称J2EE Code Generation,是一款基于代码生成器的快速开发平台,使用J2EECG可以快速的开发出企业级的web应用系统,在jeecgboot项目整合了J2EECG,具体使用如下: 修改jeecg_...
  • MyBatis-plus+达梦数据库 自动生成代码

    千次阅读 热门讨论 2019-11-12 14:58:13
    Mybatis-plus+达梦数据库 自动生成代码 =。=目录你倒是看呀Mybatis-plus+达梦数据库 自动生成代码先说点什么(配置)POM文件,引入所需要的依赖(配置)达梦的驱动包,配置数据源(配置)application.properties文件...
  • Android APT 自动生成代码实践

    千次阅读 2019-06-14 19:21:38
    有趣的目录Android APT 自动生成代码实践1、工程准备1.1、创建annotation模块1.2、创建processor模块2、见证奇迹的时刻 Android APT 自动生成代码实践 前言:都9102年了,我才接触到apt的东西,之前自己压根儿没往...
  • AOS 自动生成代码(二) Dao生成

    千次阅读 2016-08-11 17:54:34
    AOS 自动生成代码(二) Dao生成
  • AOS 自动生成代码(四) Controller生成

    千次阅读 2016-08-11 19:53:27
    AOS 自动生成代码(四) Controller生成
  • Mybatis是目前主流的ORM框架,相比于hibernate的全自动,它是半自动化需要手写sql语句、接口、实体对象,后来推出的Generator自动生成代码,可以帮我们提高开发效率。 本文目的:SpringBoot 整合 Mybatis Generator...
  • xcode7在oc编码过程中,如果.h接口中声明的实例方法,在实现类.m中没有实现,会提示没有实现接口中的方法,如果是eclipse开发java时,可以自动生成代码,xcode能否自动生成?

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 65,311
精华内容 26,124
关键字:

自动生成代码