Mybatis骚操作之逆向工程

版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/QQ727338622/article/details/84640547

前言

每天进步一点点,今天又学到一个骚操作,来做个记录,关闭Mybatis的,代码生成器,可以帮助我们生成pojo以及mapper文件,真的是又减少了代码量,懒人必备。
本文DEMO下载:戳我前往

1.准备工作

1) 准备jar包。
Mybatis-Generator的,我在Git上拿的,地址https://github.com/mybatis/generator/releases
其他包,我是在Maven仓库下载的:https://mvnrepository.com/
在这里插入图片描述
2)准备逆向的配置文件,见代码,命名为Config.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/test"
			userId="root"
			password="root">
		</jdbcConnection>
		
		<!-- 默认false,把JDBC DECIMAL 和 NUMERIC 类型解析为 Integer,
			为 true时把JDBC DECIMAL 和 NUMERIC 类型解析为java.math.BigDecimal -->
		<javaTypeResolver>
			<property name="forceBigDecimals" value="false" />
		</javaTypeResolver>

		<!-- targetProject:生成POJO类的位置 -->
		<javaModelGenerator  targetPackage="cc.buyfree.pojo"
			targetProject=".\src">
			<!-- enableSubPackages:是否让schema作为包的后缀 -->
			<property name="enableSubPackages" value="false" />
			<!-- 从数据库返回的值被清理前后的空格 -->
			<property name="trimStrings" value="true" />
		</javaModelGenerator>
		
		 <!-- targetProject:mapper映射文件生成的位置 -->
		<sqlMapGenerator targetPackage="cc.buyfree.mapper" 
			targetProject=".\src">
			<!-- enableSubPackages:是否让schema作为包的后缀 -->
			<property name="enableSubPackages" value="false" />
		</sqlMapGenerator>
		<!-- targetPackage:mapper接口生成的位置 -->
		<javaClientGenerator type="XMLMAPPER"
			targetPackage="cc.buyfree.mapper" 
			targetProject=".\src">
			<!-- enableSubPackages:是否让schema作为包的后缀 -->
			<property name="enableSubPackages" value="false" />
		</javaClientGenerator>
		<!-- 指定数据库表,生成几个写几个 -->
		<table schema="" tableName="orders"></table>
		<table schema="" tableName="users"></table>	
		
	</context>
</generatorConfiguration>

3)准备java文件,创建新web工程,将刚刚的config文件,放到项目路径下,然后右击运行java文件即可生成,为防止控制台一片空白,控制台会出现“OJBK”字样,运行后刷新项目(如果是项目需要,只要把两个包拷贝走即可)

import java.io.File;
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.internal.DefaultShellCallback;

/**
 * 逆向生成  pojo和mapper
 */
public class GeneratorSqlmap {

	/**
	 * 生成的方法
	 */
	public void generator() throws Exception{
		List<String> warnings = new ArrayList<String>();
		boolean overwrite = true;
		//指定 逆向工程配置文件
		File configFile = new File("config.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();
			System.out.println("OJBK");
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}

2.测试效果

1) 运行成功后,一定要刷新项目(F5),不然不会显示。刷新后的目录,如下:
在这里插入图片描述
2) 测试效果,看看是不是和自己写的一样。(新建测试类,导入mybatis配置文件,以及jdbc的外部文件)

import java.io.IOException;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.junit.Before;
import org.junit.Test;
import cc.buyfree.mapper.UsersMapper;
import cc.buyfree.pojo.Users;

public class UserTest {
	
	private SqlSessionFactory factory;
	
	@Before
	public void Before() throws IOException {
		factory = new SqlSessionFactoryBuilder().build(Resources.getResourceAsStream("SqlMapConfig.xml"));
	}
	
	/**
	 * 通过ID查找
	 */
	@Test
	public void selectById() {
		SqlSession session = factory.openSession();
		UsersMapper mapper = session.getMapper(UsersMapper.class);
		//查询ID为50的用户,相当于select * from users where id=50
		Users u = mapper.selectByPrimaryKey(50);
		//生成的pojo没有toString方法,需要的话可以去对应类加一个
		System.out.println(u);
	}
}

控制台输出:
在这里插入图片描述

3.XxxExample实例测试

1) XxxExample文件,手写的时候重来都没有写过这个文件,里面有三个字段,最有意思的是oredCriteria字段,自定义查询。
在这里插入图片描述

2)关于oredCriteria的操作演示:
相比较于上面的那个查询,他俩是一样的,上面那个使用mapper接口里面的方法,这个使用XxxExample类中方法,大多都相同。
在这里插入图片描述

4.Mapper接口方法解析

其实,我对那几个BLOS的方法,并不是很了解,望大佬指点。

方法 功能
long countByExample(UsersExample example) 按条件计数
int deleteByExample(UsersExample example) 按条件删除
int deleteByPrimaryKey(Integer id) 按主键删除
int insert(Users record) 插入全部字段
int insertSelective(Users record) 选择性插入
List selectByExampleWithBLOBs(UsersExample example) 按条件查询(含BLOB字段)
List selectByExample(UsersExample example) 按条件查询
Users selectByPrimaryKey(Integer id) 按主键查询
int updateByExampleSelective(@Param(“record”) Users record, @Param(“example”) UsersExample example) 按条件更新不为null字段
int updateByExampleWithBLOBs(@Param(“record”) Users record, @Param(“example”) UsersExample example) 按条件更新(含BLOB字段)
int updateByExample(@Param(“record”) Users record, @Param(“example”) UsersExample example) 按条件更新
int updateByPrimaryKeySelective(Users record) 按主键更新不为null字段
int updateByPrimaryKeyWithBLOBs(Users record) 按主键更新(含BLOB字段)
int updateByPrimaryKey(Users record) 按主键更新

5.XxxxExample实例解析

在这里插入图片描述

展开阅读全文

没有更多推荐了,返回首页