使用Mybatis的反向工程

使用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());
    });

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值