MyBatis快速入门第八讲——MyBatis逆向工程自动生成代码

MyBatis快速入门第八讲——MyBatis逆向工程自动生成代码MyBatis框架的学习(七)——MyBatis逆向工程自动生成代码什么是逆向工程MyBatis的一个主要的特点就是需要程序员自己编写sql,那么如果表太多的话,难免会很麻烦,所以mybatis官方提供了一个逆向工程,可以针对单表自动生成mybatis执行所需要的代码(包括mapper.xml、mapper.java、po..)。一般在开发中,常用的逆向工程方式是通过数据库的表生成代码。使用逆向工程

大家好,又见面了,我是你们的朋友全栈君。

什么是逆向工程?

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的逆向工程就总结到这吧!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/150747.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • filezilla下载安装_filezilla默认端口

    filezilla下载安装_filezilla默认端口在进行文件下载时,除了filezilla软件,我还发现其他一款超好用的下载文件的软件:IIS7服务器管理工具IIS7服务器管理工具中的ftp功能和vnc很像,都能支持批量操作,但是ftp比vnc更出

  • java面向对象三大特性「建议收藏」

    java面向对象三大特性「建议收藏」一、面向对象的概念面向对象是一种符合人类思维习惯的编程思想。现实生活中存在各种形态不同的事物,这些事物之间存在着各种各样的联系。在程序中使用对象来映射现实中的事物使用对象的关系来描述事物之间的联系,这种思想就是面向对象。提到面向对象,自然会想到面向过程,面向过程就是分析解决问题所需要的步骤,然后用函数把这些步骤一一实现,使用的时候一个一个依次调用就可以了。面向对象则是把解决的问题按照一定规则划分为多个独立的对象,然后通过调用对象的方法来解决问题。当然,一个应用程序会包含多个对象,通过多个对象的相互配合来

  • 虚拟机VMware下载与安装教程(详细)

    虚拟机VMware下载与安装教程(详细)文章目录虚拟机VMware的下载虚拟机VMware的安装虚拟机VMware的下载虚拟机VMware的安装1.虚拟机VMware的下载官网地址:https://www.vmware.com/cn.html以下为官网界面选择“产品”—>“个人桌面”—>“WorkstationPro”选择“下载”(这里虽然是“试用Workstation15.5Pro”,但是点击“下载”之后,将会跳转到“Workstation16Pro”的下载界面)根据自己电脑的系统,比如你的电脑是Wi

  • 一文带你通俗易懂地了解word2vec原理

    一文带你通俗易懂地了解word2vec原理词向量、Wordembedding、语言模型训练(LanguageModelTraining)、CBOW(ContinuousBagofWords)、Skipgram、NegativeSampling(负采样)、SkipgramwithNegativeSampling(SGNS)、Word2vec训练过程

  • 时滞微分方程求解_泛函微分方程内容设计

    时滞微分方程求解_泛函微分方程内容设计时滞微分方程(DDE)是当前时间的解与过去时间的解相关的常微分方程。该时滞可以固定不变、与时间相关、与状态相关或与导数相关。要开始积分,通常必须提供历史解,以便求解器可以获取初始积分点之前的时间的解。常时滞DDE具有常时滞的微分方程组的形式如下:y′(t)=f(t,y(t),y(t−τ1),…,y(t−τk)).y'(t)=f(t,y(t),y(t−τ_1),…,y(t−τ_k)).y′(t)=f(t,y(t),y(t−τ1​),…,y(t−τk​)).此处,t为自变量,y为因变量的列向量,

  • 服务器端黑盒测试工具JMeter[通俗易懂]

    服务器端黑盒测试工具JMeter[通俗易懂]简介JMeter是针对服务器的黑盒测试工具。可以用于功能测试,负载测试和性能测试。JMeter是ApacheJakarta的子项目,开源免费软件。JMeter的网址:jakarta.apache.org/jmeter/当前版本:2.3安装和使用需要安装JRE。解压缩JMeter的分发包。在bin目录下,运行jmeter.bat。在JMeter窗口中定义测试…

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号