目录
前言
开始逆向工程前,我们需要先 搭建mybatis项目
一、提供逆向工程配置文件
在resources文件夹创立generatorConfig.xml
记得修改数据库信息(库名、用户名、密码)
// 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/dishorder" userId="java"
password="123456">
<property name="nullCatalogMeansCurrent" value="true"></property>
</jdbcConnection>
<!-- 默认false,把JDBC DECIMAL 和 NUMERIC 类型解析为 Integer,为 true时把JDBC DECIMAL 和
NUMERIC 类型解析为java.math.BigDecimal -->
<javaTypeResolver>
<property name="forceBigDecimals" value="false" />
</javaTypeResolver>
<!-- targetProject:生成Java类的位置 employment -->
<javaModelGenerator targetPackage="com.gec.bean"
targetProject="C:/Users/上官-梓梓梓梓芸/IdeaProjects/mybatisGenerator/src">
<!-- enableSubPackages:是否让schema作为包的后缀 -->
<property name="enableSubPackages" value="false" />
<!-- 从数据库返回的值被清理前后的空格 -->
<property name="trimStrings" value="true" />
</javaModelGenerator>
<!-- targetProject:mapper映射文件生成的位置 -->
<sqlMapGenerator targetPackage="com.gec.mapper"
targetProject="C:/Users/上官-梓梓梓梓芸/IdeaProjects/mybatisGenerator/src">
<!-- enableSubPackages:是否让schema作为包的后缀 -->
<property name="enableSubPackages" value="false" />
</sqlMapGenerator>
<!-- targetPackage:mapper接口生成的位置 -->
<javaClientGenerator type="XMLMAPPER"
targetPackage="com.gec.mapper"
targetProject="C:/Users/上官-梓梓梓梓芸/IdeaProjects/mybatisGenerator/src">
<!-- enableSubPackages:是否让schema作为包的后缀 -->
<property name="enableSubPackages" value="false" />
</javaClientGenerator>
<!-- 指定数据库表 -->
<table tableName="user" ></table>
<!-- <table tableName="personFiles" ></table>-->
<!-- 有些表的字段需要指定java类型
<table schema="" tableName="">
<columnOverride column="" javaType="" />
</table> -->
</context>
</generatorConfiguration>
需要修改的地方:
1.数据库信息
2.包名和文件生成的地方
3.数据库表名的指定
指定哪一个表,就生成哪一个表的操作方法,例如:指定user
表
二、提供main程序生成代码
在src文件夹建立GeneratorSqlmap.java
【我们需要一个程序来运行我们的操作】
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;
public class GeneratorSqlmap {
public void generator() throws Exception{
List<String> warnings = new ArrayList<String>();
boolean overwrite = true;
//指定 逆向工程配置文件(使用绝对路径)///
File configFile = new File("C:\\Users\\上官-梓梓梓梓芸\\IdeaProjects\\mybatisGenerator\\resources\\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.修改配置文件路径
修改为xml的绝对路径
三、如何使用逆向工程生成的代码?
逆向工程生成的UserMapper.xml中包含了常用的sql语句,根据所需功能不同选择不同的功能函数来运行
1.在com.gec
建立test
文件夹
2.建立Test.java
package com.gec.test;
import com.gec.bean.User;
import com.gec.bean.UserExample;
import com.gec.mapper.UserMapper;
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 java.io.IOException;
import java.io.InputStream;
import java.util.List;
public class Test {
public static void main(String[] args) throws IOException {
//1、加载mybatis的全局配置文件
InputStream is = Resources.getResourceAsStream("mybatis-config.xml");
//2、生成sqlsessionfactory【会话的工厂类】【用于生成session会话】
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(is);
//3、通过sqlsessionfactory来得到生成sqlsession会话对象
SqlSession session = sqlSessionFactory.openSession();
//4、通过会话对象得到mapper接口对象
UserMapper userMapper = session.getMapper(UserMapper.class);
//通过mapper对象执行操作方法
User user = new User();
user.setId(6);
user.setUsername("tom6");
user.setPassword("12666");
user.setIdcard("123");
功能函数段///
// 1 - insert()插入表中的所有字段
// int result = userMapper.insert(user);
// 2 - insertSelective()有选择性的插入字段【不为空的】
//int result = userMapper.insertSelective(user);
// 3 - 根据主键(id)修改 updateByPrimaryKey()
// int result = userMapper.updateByPrimaryKeySelective(user);
// 4 - 根据主键(id)删除
// int result = userMapper.deleteByPrimaryKey(6);
// 5 - 根据模板进行操作
// 5.1 - 删除操作
// UserExample example = new UserExample();
//使用example中的内部类来添加操作条件
// example.createCriteria().andUsernameEqualTo("tom");
// int result = userMapper.deleteByExample(example);
// 5.2 - 更新操作
UserExample example = new UserExample();
//使用example中的内部类来添加操作条件
example.createCriteria().andUsernameEqualTo("tom6");//修改username=tom6的数据
// 第一个参数表示为要修改对象的数据 第二个参数表示为修改的条件
int result = userMapper.updateByExampleSelective(user,example);
//尾部/
System.out.println(result);
//添加删除修改要提交事务
session.commit();
}
}
可以尝试一下以上对于userMapper的运用(将功能函数段分别使用、运行,并观察数据库表的数据变化来判定是否正确引用)
动手实现以下功能:
tips:上面的代码已经给出了答案
- insert( )插入表中的所有字段
- insertSelective( )有选择性的插入字段【不为空的】
- 根据主键( id )修改
- 根据主键( id )删除
- 根据模板进行操作 - 删除
- 根据模板进行操作 - 更新
查询方法的实现
在test
目录创建TestFind.java
,代码如下
package com.gec.test;
import com.gec.bean.User;
import com.gec.bean.UserExample;
import com.gec.mapper.UserMapper;
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 java.io.IOException;
import java.io.InputStream;
import java.util.List;
public class TestFind {
public static void main(String[] args) throws IOException {
//1、加载mybatis的全局配置文件
InputStream is = Resources.getResourceAsStream("mybatis-config.xml");
//2、生成sqlsessionfactory【会话的工厂类】【用于生成session会话】
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(is);
//3、通过sqlsessionfactory来得到生成sqlsession会话对象
SqlSession session = sqlSessionFactory.openSession();
//4、通过会话对象得到mapper接口对象
UserMapper userMapper = session.getMapper(UserMapper.class);
// 1 - 根据主键查询
// User user=userMapper.selectByPrimaryKey(6);
// System.out.println(user);
// 2 - 查询所有
// List<User>list=userMapper.selectByExample(new UserExample());
// System.out.println(list);
// 3 - 根据条件查询【example】
UserExample example =new UserExample();
//查询条件 name=tom6
example.createCriteria().andUsernameEqualTo("tom6");
List<User>list=userMapper.selectByExample(example);
System.out.println(list);
//添加删除修改要提交事务
session.commit();
}
}
试一试实现查询功能
tips:上面的代码已经给出了答案
- 根据主键查询
- 查询所有
- 根据条件查询【example】
总结
通过以上的步骤我们已经通过mybatis
实现了对数据库的逆向工程建立方法类,并实现了对数据库的增删改查