zoukankan      html  css  js  c++  java
  • JavaEE——Mybatis(14)--MyBatis逆向工程

    MyBatis Generator:
    • 简称MBG,是一个专门为MyBatis框架使用者定制的代码生成器,可以快速的根据表生成对应的映射文件,接口,以及bean类。支持基本的增删改查,以及QBC风格的条件查询。但是表连接、存储过程等这些复杂sql的定义需要我们手工编写
    • 官方文档地址
    http://www.mybatis.org/generator/
    • 官方工程地址
    https://github.com/mybatis/generator/releases

    导入

    中找到如何使用

    在XML Configuration File Reference中有实例

     mbg.xml

    targetRuntime="MyBatis3Simple":生成简单版的CRUD
    MyBatis3:豪华版

    <?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>
        <!--<classPathEntry location="/Program Files/IBM/SQLLIB/java/db2java.zip" />-->
    
        <context id="DB2Tables" targetRuntime="MyBatis3Simple">
            <!--jdbcConnection:指定如何连接到目标数据库-->
            <jdbcConnection driverClass="com.mysql.jdbc.Driver"
                            connectionURL="jdbc:mysql://localhost:3306/db_person"
                            userId="root"
                            password="1234">
            </jdbcConnection>
    
            <javaTypeResolver >
                <property name="forceBigDecimals" value="false" />
            </javaTypeResolver>
    
            <!--javaModelGenerator:指定JavaBean的生成策略
            targetPackage="test.model":目标包名
    	    targetProject="MBGTestProjectsrc":目标工程,生成的是bean.Student类-->
            <javaModelGenerator targetPackage="bean"
                                targetProject=".src">
                <property name="enableSubPackages" value="true" />
                <property name="trimStrings" value="true" />
            </javaModelGenerator>
    
            <!--sqlMapGenerator: sql映射生成策略,生成的是conf/dao/StudentMapper.xml-->
            <sqlMapGenerator targetPackage="dao"
                             targetProject=".srcconf">
                <property name="enableSubPackages" value="true" />
            </sqlMapGenerator>
    
            <!--javaClientGenerator:指定mapper接口所在的位置,生成的是dao.StudentMapper接口-->
            <javaClientGenerator type="XMLMAPPER" targetPackage="dao"
                                 targetProject=".src">
                <property name="enableSubPackages" value="true" />
            </javaClientGenerator>
    
            <!--指定要逆向分析哪些表:根据表要创建JavaBean-->
            <table tableName="student" domainObjectName="Student"></table>
            <table tableName="grade" domainObjectName="Grade"></table>
            
        </context>
    </generatorConfiguration>
    

      

      

    运行mbg

    @Test
        public void testMbg() throws Exception {
            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);
        }
    

      

     生成结果:

    测试:

    package test;
    
    import bean.Student;
    import dao.StudentMapper;
    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 org.junit.jupiter.api.Test;
    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;
    
    import java.io.File;
    import java.io.IOException;
    import java.io.InputStream;
    import java.util.ArrayList;
    import java.util.List;
    
    
    public class Mybatis_mbgTest {
    
    
        public SqlSessionFactory getSqlSessionFactory() throws IOException {
            String resource = "conf/mybatis_config.xml";
            InputStream inputStream = Resources.getResourceAsStream(resource);
            return new SqlSessionFactoryBuilder().build(inputStream);
        }
    
        @Test
        public void testMbg() throws Exception {
            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);
        }
    
        @Test
        public void testSimple() throws IOException {
            SqlSessionFactory sqlsessionFactory = getSqlSessionFactory();
            SqlSession openSession = sqlsessionFactory.openSession();
    
            try{
                StudentMapper studentMapper = openSession.getMapper( StudentMapper.class );
                List<Student> students = studentMapper.selectAll();
                for(Student student : students){
                    System.out.println(student.getId());
                }
            }finally {
                openSession.close();
            }
        }
    }
    

      

    其中conf/mybatis_config.xml

    <?xml version="1.0" encoding="UTF-8" ?>
    <!DOCTYPE configuration
            PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
            "http://mybatis.org/dtd/mybatis-3-config.dtd">
    <configuration>
    
        <!--引入外部properties配置文件-->
        <properties resource="confdbconfig.properties"></properties>
    
        <environments default="development">
            <environment id="development">
                <transactionManager type="JDBC"/>
                <dataSource type="POOLED">
                    <property name="driver" value="${jdbc.driver}"/>
                    <property name="url" value="${jdbc.url}"/>
                    <property name="username" value="${jdbc.username}"/>
                    <property name="password" value="${jdbc.password}"/>
                </dataSource>
            </environment>
        </environments>
        <mappers>
            <mapper resource="confdaoStudentMapper.xml"/>
        </mappers>
    </configuration>
    

      

    conf/dbconfig.properties

    jdbc.driver=com.mysql.jdbc.Driver
    jdbc.url=jdbc:mysql://127.0.0.1:3306/db_person
    jdbc.username=root
    jdbc.password=1234
    

      

    带条件复杂查询

    @Test
    	public void testMyBatis3() throws IOException{
    		SqlSessionFactory sqlSessionFactory = getSqlSessionFactory();
    		SqlSession openSession = sqlSessionFactory.openSession();
    		try{
    			EmployeeMapper mapper = openSession.getMapper(EmployeeMapper.class);
    			//xxxExample就是封装查询条件的
    			//1、查询所有
    			//List<Employee> emps = mapper.selectByExample(null);
    			//2、查询员工名字中有e字母的,和员工性别是1的
    			//封装员工查询条件的example
    			EmployeeExample example = new EmployeeExample();
    			//创建一个Criteria,这个Criteria就是拼装查询条件
    			//select id, last_name, email, gender, d_id from tbl_employee 
    			//WHERE ( last_name like ? and gender = ? ) or email like "%e%"
    			Criteria criteria = example.createCriteria();
    			criteria.andLastNameLike("%e%");
    			criteria.andGenderEqualTo("1");
    			
    			Criteria criteria2 = example.createCriteria();
    			criteria2.andEmailLike("%e%");
    			example.or(criteria2);
    			
    			List<Employee> list = mapper.selectByExample(example);
    			for (Employee employee : list) {
    				System.out.println(employee.getId());
    			}
    			
    		}finally{
    			openSession.close();
    		}
    	}
    

      

  • 相关阅读:
    第2章 类模板:2.3 类模板的局部使用
    第2章 类模板:2.2 类模板Stack的使用
    第2章 类模板:2.1 类模板Stack的实现
    第1章 函数模板:1.6 但是,我们不应该…?
    第1章 函数模板:1.5 重载函数模板
    第1章 函数模板:1.4 默认模板参数
    第1章 函数模板:1.3 多模板参数
    第1章 函数模板:1.2 模板参数的推导
    第1章 函数模板:1.1 初识函数模板
    第31课 std::atomic原子变量
  • 原文地址:https://www.cnblogs.com/SkyeAngel/p/8449712.html
Copyright © 2011-2022 走看看