Mybatis逆向工程创建和使用

官方文档:http://mybatis.org/generator/

正向工程:先设计实体类及实体之间的关系,再创建数据库并设计表之间的关系。

逆向工程:先设计数据库表,再通过数据库表关系,之后生成实体类及映射文件和接口。
~
~
~
mybatis官网提供了mybatis-generator项目,可以针对单表生成pojo,mapper接口及mapper映射文件,他提供了一套单表的crud的操作。
~
~
~
~
~

搭建逆向工程

~
实际开发过程中逆向工程不直接搭建在正式项目中,要单独创建一个项目,作为我们的逆向工程项目。
~
·
~

①添加依赖包

~
Mybatis-Generator依赖包
~
Maven仓库下载依赖包地址:https://mvnrepository.com/artifact/org.mybatis.generator/mybatis-generator-core
~
~
~
添加依赖包到项目中,并添加到构建路径中。
~
~
~

②创建一个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>

   <!-- 定义逆向工程内容
 		id:默认id
		targetRuntime:目标运行的mybatis
	-->
  <context id="DB2Tables" targetRuntime="MyBatis3">
      <!-- 配置数据库连接信息 -->
    <jdbcConnection driverClass="com.mysql.cj.jdbc.Driver"
        connectionURL="jdbc:mysql://127.0.0.1:3306/stand?serverTimezone=UTC&nullCatalogMeansCurrent=true"
        userId="root"
        password="123456">
    </jdbcConnection>

      <!--配置Java类型解析器 -->
    <javaTypeResolver >
      <property name="forceBigDecimals" value="false" />
    </javaTypeResolver>

      <!--配置pojo的生成位置
 			targetPackage:生成的pojo所在的包,不需要写类名
			targetProject:生成的默认位置
		-->
    <javaModelGenerator targetPackage="com.pojo" targetProject=".\src">
      <property name="enableSubPackages" value="true" />
      <property name="trimStrings" value="true" />
    </javaModelGenerator>

      <!-- 用于配置映射文件的生成位置
 		targetPackage:生成的xml所在的包,不需要写类名
		targetProject:生成的默认位置
		-->
    <sqlMapGenerator targetPackage="com.mapper"  targetProject=".\src">
      <property name="enableSubPackages" value="true" />
    </sqlMapGenerator>

      <!-- 用于配置接口文件的生成位置
		targetPackage:生成的interface所在的包,不需要写类名
		targetProject:生成的默认位置
	-->
    <javaClientGenerator type="XMLMAPPER" targetPackage="com.mapper"  targetProject=".\src">
      <property name="enableSubPackages" value="true" />
    </javaClientGenerator>

      <!-- 配置当前连接的数据库需要逆向工程的表
 			schema:指定数据库名称
			tableName:指定表名称
			
		-->
    <table schema="stand" tableName="t_user" >
    </table>

  </context>
</generatorConfiguration>

~
~
~
如果出现串库等生成内容异常情况出现,解决方法:
~
在连接数据库url中加入参数:

connectionURL="jdbc:mysql://127.0.0.1:3306/stand?serverTimezone=UTC&nullCatalogMeansCurrent=true"

~
~
~
~
~

③Java类中执行的代码

~

public class Generator { 

	public static void main(String[] args) throws Exception{ 

		List<String> warnings = new ArrayList<String>(); 

		boolean overwrite = true; 

		//file中的url需要绝对路径 

		File configFile = new File("这里写上面xml文件的绝对路径"); 
        //如:"D://Users/Mac/eclipse-20200423/mybatis- 1098z-5-2/src/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); 

	} 

}

注意:导包要导mybatis下的包。
~
~
~
执行上面的Java代码后就会自动生成下方图片所指的一些文件。
在这里插入图片描述

~
CRUD(增删查改)
~
~
~

逆向工程的使用

~

insert插入

方法名描述
insert(Obj pojo)insert后的字段列表为所有列,一般在开发时需要修改(自增主键存在问题)
insertSelective(Obj pojo)进行insert操作时只会插入不为空的字段

~

update更新

方法名描述
updateByExample(Obj pojo,Example example)根据example定义的查询条件更新所有字段
updateByExampleSelective(Obj pojo,Example exmpale)根据example定义的查询条件更新不为空的字段
updateByPrimaryKey(Obj pojo)根据主键更新所有字段
updateByPrimaryKeySelective(Obj pojo)根据主键只更新不为空的字段

~

delete删除

方法名描述
deleteByExample根据查询条件删除
deleteByPrimaryKey根据主键删除

返回int类型为数据库影响行数。

~

select查询

方法名描述
selectByPrimaryKey根据主键查询数据(返回pojo类型)
selectByExample根据自定义条件查询(返回集合类型)
countByExample根据查询条件返回总行数(返回long类型)

~

自定义查询条件

~

创建自定义查询条件
如:SUserExample example = new SUserExample();

~

保存查询条件
Criteria criteria = example.createCriteria();

~

区间查询
criteria.adnIdBetween(value1,value2);
//查询id在value1到value2区间的值

~

等值查询
criteria.andIdEqualTo(20);
//查询id等于20

~

查询大于给定的值
criteria.andIdGreaterThan(20);
//查询id大于20

~

查询小于给定的值
criteria.andIdLessThan(100);
//查询id小于100

~

生成in子句
criteria.andIdIn(value);
//这里value放集合类型

~

查询字段非空的数据
criteria.andIdIsNotNull();

~

查询不等于给定的值

注意:在映射文件中不能写<>,写!=

criteria.andIdNotEqualTo(1);
//查询id不等于1的数据

~

查询不在in子句中的数据
criteria.andIdNotIn(values);
//翻译过来就是not in

~

模糊查询 like
criteria.andUsernameLike("%a%");

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

二饭

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值