使用Mybatis的反向工程(自动生成:实体类、接口、sql映射文件)
一、实现mybatis的反向工程的步骤:
1、在pom文件中导入mybatis自动生成的jar包(mybatis-generator-core)
<!--mybatis自动生成的依赖包-->
<dependency>
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator-core</artifactId>
<version>1.3.3</version>
</dependency>
2、在工程中编写mybatis自动生成的配置文件(generator.xml)
注意:放在resources目录中
<?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>
<!--数据库驱动-->
<!-- location写的是mysql驱动包本地路径 -->
<classPathEntry location="D:\MySQL\mysql-connector-java-5.1.0-bin.jar" />
<context id="Mysql2Tables" targetRuntime="MyBatis3">
<commentGenerator>
<property name="suppressDate" value="true"></property>
<property name="suppressAllComments" value="true"></property>
</commentGenerator>
<!--数据库链接 地址账号密码-->
<jdbcConnection driverClass="com.mysql.jdbc.Driver"
connectionURL="jdbc:mysql://localhost:3306/数据库名"
userId="账号"
password="密码">
</jdbcConnection>
<javaTypeResolver >
<property name="forceBigDecimals" value="false" />
</javaTypeResolver>
<!--生成实体类存放位置(javaModelGenerator)
注意:
如果项目是创建的工程 targetProject=”src/main/java”
如果项目是创建的模块 targetProject=”模块项目名称/ src/main/java”-->
<javaModelGenerator targetPackage="com.team.entity" targetProject="mybatis03/src/main/java">
<property name="enableSubPackages" value="true" />
<property name="trimStrings" value="true" />
</javaModelGenerator>
<!--指定sql映射文件的位置(sqlMapGenerator)-->
<sqlMapGenerator targetPackage="com.team.dao" targetProject="mybatis03/src/main/java">
<property name="enableSubPackages" value="true" />
</sqlMapGenerator>
<!--指定接口存放的位置-->
<javaClientGenerator type="XMLMAPPER" targetPackage="com.team.dao" targetProject="mybatis03/src/main/java">
<property name="enableSubPackages" value="true" />
</javaClientGenerator>
<!--生成需要添加反向工程的表-->
<!-- tableName 的属性必须和数据库中的表名一致-->
<!-- domainObjectName="Grade" 可以省略 给生成的类取名字 不写 默认类名跟数据库表名一样-->
<table tableName="grade" domainObjectName="Grade" enableCountByExample="false" enableUpdateByExample="false"
enableDeleteByExample="false" enableSelectByExample="false" selectByExampleQueryId="false">
</table>
<!--tableName和domainObjectName分别代表数据库表名和生成的实体类名,其余的可以自定义去选择(一般情况下均为false)-->
<table tableName="student" enableCountByExample="true" enableUpdateByExample="true"
enableDeleteByExample="true" enableSelectByExample="true" selectByExampleQueryId="true">
</table>
</context>
</generatorConfiguration>
3、运行自动生成的工具类(MybatisGeneratorUtil.java)
package com.team.utils;
import org.mybatis.generator.api.MyBatisGenerator;
import org.mybatis.generator.config.Configuration;
import org.mybatis.generator.config.xml.ConfigurationParser;
import org.mybatis.generator.exception.InvalidConfigurationException;
import org.mybatis.generator.exception.XMLParserException;
import org.mybatis.generator.internal.DefaultShellCallback;
import java.io.File;
import java.io.IOException;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
public class MybatisGeneratorUtil {
public static void main(String[] args) {
try {
System.out.println("start generator ...");
List<String> warnings = new ArrayList<String>();
boolean overwrite = true;
File configFile = new File(MybatisGeneratorUtil.class.getResource("/generator.xml").getFile());
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);
System.out.println("end generator!");
} catch (IOException e) {
e.printStackTrace();
} catch (XMLParserException e) {
e.printStackTrace();
} catch (InvalidConfigurationException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
4、修改mybatis的配置文件,加载所有的sql映射文件
<!-- 加载sql映射文件-->
<mappers>
<!--添加映射文件
<mapper resource="com/kgc/mapper/GradeMapper.xml"></mapper>
<mapper resource="com/kgc/mapper/StudentMapper.xml"></mapper>
-->
<!--加载某个包下所有sql映射文件-->
<package name="com.kgc.mapper"></package>
</mappers>
二、 利用反向工程的selectByExample方法进行查询(条件查询)
1、 修改自动生成的配置文件,将以下开关打开,启动selectByExample
<table tableName="grade" enableCountByExample="false" enableUpdateByExample="false"
enableDeleteByExample="false" enableSelectByExample="true" selectByExampleQueryId="false">
</table>
2、调用dao层的selectByExample实现查询
public static void main(String[] args) {
//获取sqlSession
SqlSession sqlSession=MyBatisUtil.getSession();
//创建dao层对象
StudentMapper studentMapper=sqlSession.getMapper(StudentMapper.class);
//一、使用selectByExample进行查询所有
//StudentExample studentExample=new StudentExample(); //相当于就是查询语句
//List<Student> list=studentMapper.selectByExample(studentExample);
//二、使用selectByExample进行条件查询
StudentExample studentExample=new StudentExample(); //相当于就是查询语句
//添加查询条件
StudentExample.Criteria criteria=studentExample.createCriteria();
criteria.andAgeLessThan(new Byte("30")); //拼sql
criteria.andNameLike("%王%");
List<Student> list=studentMapper.selectByExample(studentExample);
//关闭sqlSession
MyBatisUtil.closeSession();
//显示结果
System.out.println("学号\t姓名\t年龄\t性别\t生日\t年级");
list.forEach(s -> {
System.out.println(s.getXh()+"\t"+s.getName()+"\t"+s.getAge()+"\t"+s.getSex()+"\t"+s.getBirthday()+"\t"+s.getGid());
});
}