Mybatis逆向工程及生成代码的使用

文章目录

一、逆向工程

1、简介

mybaits需要程序员自己编写sql语句,
mybatis官方提供逆向工程,可以针 对数据库的表 自动生成mybatis执行所需要的代码(mapper.java,mapper.xml、po…)

2、使用步骤

代码生成
  • 第一步:导入jar包,创建好放存放接口、mapper.xml、bean的包
  • 第二步:编写 mbg.xml 逆向工程配置文件(配置文件以src同级)
  • 第三步:运行官方提供的执行入口
代码使用
  • 第一步:配置mybatis主配置文件,指定映射文件位置
  • 第二步:编写mybatis入口代码

3、案例

第一步:jar及导入 及 创建相应包
       <dependency>
            <groupId>org.mybatis.generator</groupId>
            <artifactId>mybatis-generator-core</artifactId>
            <version>1.4.0</version>
        </dependency>

Mybatis逆向工程及生成代码的使用

第二步:mbg.xml配置文件

MyBatis Generator官网:http://mybatis.org/generator/

(看 MyBatis Generator官网 模板改就可以,相应的标签及属性 看官网)

 	mbg.xml   配置文件(指定好数据库、mapper接口、mapper.xml、bean、表等信息)
<?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>
    <!--targetRuntime有多个取值,代表生成的接口方法的复杂度-->
    <context id="testTables" targetRuntime="MyBatis3">

        <commentGenerator>
            <!-- 是否去除自动生成的注释 true:是 : false:否 -->
            <property name="suppressAllComments" value="true" />
            <!--注释中去除日期注释-->
            <property name="suppressDate" value="true"/>
            <!--注释中添加数据库字段备注注释-->
            <property name="addRemarkComments" value="true"/>

        </commentGenerator>

        <!--数据库连接的信息:驱动类、连接地址、用户名、密码 -->
        <jdbcConnection driverClass="com.mysql.cj.jdbc.Driver"
                        connectionURL="jdbc:mysql://localhost:3306/mybatis_damo1?useUnicode=true&amp;characterEncoding=utf8&amp;serverTimezone=GMT%2B8&amp;useSSL=false"
                        userId="root"
                        password="015718">
            <!-- 放在重名问题导致生成重复的内容-->
            <property name="nullCatalogMeansCurrent" value="true" />
        </jdbcConnection>

        <!--选定java类型的解析器:使用默认的就可以 -->
        <!-- 默认false,把JDBC DECIMAL 和 NUMERIC 类型解析为 Integer,为 true时把JDBC DECIMAL 和NUMERIC 类型解析为java.math.BigDecimal -->
        <javaTypeResolver>
            <property name="forceBigDecimals" value="false" />
        </javaTypeResolver>

        <!-- javaBean 的生成策略 -->
        <!--指定我们生成的代码指定目标工程和目标包-->
        <!--
            targetPackage:生成Bean类的位置
            targetProject:目标工程(.\src包下)
        -->
        <javaModelGenerator targetPackage="com.zy.Bean" targetProject=".\src\main\java">
            <!-- enableSubPackages:是否让schema作为包的后缀 -->
            <property name="enableSubPackages" value="true" />
            <!-- 从数据库返回的值被清理前后的空格 -->
            <property name="trimStrings" value="true" />
        </javaModelGenerator>


        <!--映射文件的生成策略 -->
        <!--
                targetProject:mapper映射文件生成的位置
                 targetProject:目标工程(.\resource 包下)
         -->
        <sqlMapGenerator targetPackage="com.zy.Dao"  targetProject=".\src\main\resources">
            <!-- enableSubPackages:是否让schema作为包的后缀 -->
            <property name="enableSubPackages" value="true" />
        </sqlMapGenerator>

        <!--接口文件的生成策略 -->
        <!-- targetPackage:mapper接口生成的位置 -->
        <javaClientGenerator type="XMLMAPPER" targetPackage="com.zy.Dao" targetProject=".\src\main\java">
            <!-- enableSubPackages:是否让schema作为包的后缀 -->
            <property name="enableSubPackages" value="true" />
        </javaClientGenerator>


        <!-- 指定要逆向生成哪些数据库的表 -->
        <!--
            tableName: 指明数据库表
            domainObjectName:指明要生成对应JavaBean的名称
        -->
        <table tableName="user" domainObjectName="User" />

        <!-- <table schema="" tableName="sys_user"></table>
        <table schema="" tableName="sys_role"></table>
        <table schema="" tableName="sys_permission"></table>
        <table schema="" tableName="sys_user_role"></table>
        <table schema="" tableName="sys_role_permission"></table> -->

        <!-- 有些表的字段需要指定java类型
         <table schema="" tableName="">
            <columnOverride column="" javaType="" />
        </table> -->
    </context>
</generatorConfiguration>
第三步:运行MBG入口程序

MyBatis Generator官方提供了很多执行方案:

   1、From the command prompt with an XML configuration
   2、As an Ant task with an XML configuration
   3、As a Maven Plugin
   4、From another Java program with an XML configuration
   5、From another Java program with a Java based configuration
   6、As an Eclipse Feature

我们用第五种代码的方式:

		List<String> warnings = new ArrayList<String>();
		boolean overwrite = true;
		File configFile = new File("mbg.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);

4、注意事项

  1. 注意逆向工程配置文件的位置,最好放在最外层,不放在resources下
  2. 在重新生成的时候,不会替代原来文件,会追加(最好把文件全删再重新生成)
  3. 在编写配置文件的时候,很多属性取值具体看官网
  4. 配置文件指定文件路径的时候,不要弄错

二、生成代码的使用

1、使用方式

当我们在mbg配置文件选择的是 mybatis3 的生成版本、会生成条件查询的方法

  1、看生成的Bean文件: User  和  UserExample

  		User 类是对应数据库的Bean

  		UserExample类是进行封装条件的类
  				该类中有三个属性:
  						String orderByClause;   排序的列
  						boolean distinct;		是否去重
  						List<Criteria> oredCriteria; 拼装的条件
  				该类还有一个内部类:
  						Criteria类  声明条件的一个类

  2、查看生成的接口中的方法 ---->  根据方法的名称可以判断出作用
  		传xxxExample的方法都是按条件查询
  			

  3、怎么使用复发的条件查询??
  		(1)xxxExample就是拼装查询条件的,当条件没有时按全部查询

  		(2)怎么进行条件的封装??
  				创建一个xxxExample对象,在example.createCriteria()得到Criteria对象
  				调用Criteria对象的系列and方法(可根据知道字段进行拼接范围查询条件、模糊查询条件等等)
  				 一个Criteria对象内部的条件为and关系

  		(3)怎么封装条件之间的and和or关系???	
  					在example.createCriteria()得到Criteria对象,在该对象拼接玩条件之后
  							example.or(criteria);   表示该条件以或的方式拼接
  					(一般声明两个Criteria对象)(第一个不用指明or)

2、案例

	@Test
	public void test2()  throws Exception {
		SqlSession sqlSession = new SqlSessionFactoryBuilder().build(Resources.getResourceAsStream("Config.xml")).openSession();
		UserMapper mapper = sqlSession.getMapper(UserMapper.class);

		//1、当传入的查询条件为null,表示没有条件,全部查询
		//select id, username, birthday, sex, address from user
		List<User> users = mapper.selectByExample(null);

		//2、创建查询条件
		// select id, username, birthday, sex, address from user WHERE ( address like ? and sex = ? )
		UserExample example = new UserExample();
			//进行条件拼接
		UserExample.Criteria criteria = example.createCriteria();
			//一个criteria中拼接的条件都是and (可以选择什么字段的范围查询、模糊查询等等)
		criteria.andAddressLike("%山东%");
		criteria.andSexEqualTo("男");
		List<User> users1 = mapper.selectByExample(example);


		//3、or
		//select id, username, birthday, sex, address from user WHERE ( id = ? ) or( id = ? ) 
		UserExample example1 = new UserExample();
		UserExample.Criteria criteria1 = example1.createCriteria();
		criteria1.andIdEqualTo(41);
		
		UserExample.Criteria criteria2 = example1.createCriteria();
		criteria2.andIdEqualTo(42);
		example1.or(criteria2);
		List<User> users2 = mapper.selectByExample(example1);
		
		
		for (User i:users2)
			System.out.println(i.toString());
	}
上一篇:sqlUtils


下一篇:独立云虚拟主机 如何免费配置https加速呢?