zoukankan      html  css  js  c++  java
  • MyBatis入门(七)---逆向工程

    一、逆向工程

    1.1、概述

    mybatis需要程序号自己编写的SQL。

    mybatis官方提供了逆向工程,可以针对单表自动生成mybatis执行所需要的代码

    (mapper,java,maper.xml,po...)

    一般都是由数据库到java代码, 的生成过程

    二、导入jar包

    2.1、mybatis-generator

    三、配置xml

    3.1、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>
        <!--指定数据库jar包 -->
        <classPathEntry location="G:/jar/mysql-connector-java-5.1.37-bin.jar" />
    
        <context id="DB2Tables" targetRuntime="MyBatis3">
            <commentGenerator>
                <!-- 是否去除自动生成的注释 true:是 : false:否 -->
                <property name="suppressAllComments" value="true" />
            </commentGenerator>
    
            <!--JDBC连接配置,driver,url,user,password -->
            <jdbcConnection driverClass="com.mysql.jdbc.Driver"
                connectionURL="jdbc:mysql://localhost:3306/mybatis?character=utf8"
                userId="root" password="root">
            </jdbcConnection>
            <!--默认false,把JDBC DECIMAL 和 NUMERIC 类型解析为 Integer,为 true时把JDBC DECIMAL 
                和 NUMERIC 类型解析为java.math.BigDecimal -->
            <javaTypeResolver>
                <property name="forceBigDecimals" value="false" />
            </javaTypeResolver>
            <!-- targetProject:生成PO类的位置 -->
            <javaModelGenerator targetPackage="com.mybatis.po"
                targetProject=".src">
                <property name="enableSubPackages" value="false" />
                <property name="trimStrings" value="true" />
            </javaModelGenerator>
                    <!-- targetProject:mapper映射文件生成的位置 -->
            <sqlMapGenerator targetPackage="com.pb.mybatis.mapping"
                targetProject=".src">
                <!-- enableSubPackages:是否让schema作为包的后缀 -->
                <property name="enableSubPackages" value="false" />
                <!-- 从数据库返回的值被清理前后的空格 -->
                <property name="trimStrings" value="true" />
            </sqlMapGenerator>
        <!-- targetPackage:mapper接口生成的位置 -->
            <javaClientGenerator type="XMLMAPPER"
                targetPackage="com.pb.mybatis.mapper" targetProject=".src">
                <!-- enableSubPackages:是否让schema作为包的后缀 -->
                <property name="enableSubPackages" value="false" />
            </javaClientGenerator>
            <!--指定要生成的表  -->
            <table tableName="author"></table>
            <table tableName="blog"></table>
            <table tableName="posts"></table>
    
        </context>
    
    </generatorConfiguration>

    四、运行java程序生成

    4.1、java程序

    import java.io.File;
    import java.io.IOException;
    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.exception.XMLParserException;
    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("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();
            }
            
        }
    
    }

    五、测试

    5.1、测试类

    package com.pb.ssm.mapper;
    
    import static org.junit.Assert.fail;
    
    import java.util.Date;
    import java.util.List;
    
    import javax.crypto.Cipher;
    
    import org.junit.Before;
    import org.junit.Test;
    import org.springframework.context.ApplicationContext;
    import org.springframework.context.support.ClassPathXmlApplicationContext;
    
    import com.pb.ssm.po.Author;
    import com.pb.ssm.po.AuthorExample;
    import com.pb.ssm.po.AuthorExample.Criteria;
    
    public class AuthorMapperTest {
        private ApplicationContext applicationContext;
        private AuthorMapper authorMapper;
    
        @Before
        public void setUp() throws Exception {
            applicationContext=new ClassPathXmlApplicationContext("ApplicationContext.xml");
            authorMapper=(AuthorMapper) applicationContext.getBean("authorMapper");
        }
        
        //根据条件查询记录数
        @Test
        public void testCountByExample() {
            AuthorExample example=new AuthorExample();
            //可以加条件,不加条件默认查询全部
            Criteria criteria=example.createCriteria();
            //加条件,介绍不是空的
            criteria.andAuthorBioIsNotNull();
            int num=authorMapper.countByExample(example);
            System.out.println("num="+num);
        }
        
        //根据条件删除
        @Test
        public void testDeleteByExample() {
            AuthorExample example=new AuthorExample();
            //可以加条件,不加条件默认查询全部
            Criteria criteria=example.createCriteria();
            criteria.andAuthorUsernameEqualTo("程序员");
            int num=authorMapper.deleteByExample(example);
            System.out.println("num="+num);
            
        }
        
        //根据主键ID删除
        @Test
        public void testDeleteByPrimaryKey() {
            int num=authorMapper.deleteByPrimaryKey(18);
            System.out.println("num="+num);
        }
        //插入
        @Test
        public void testInsert() {
            
            Author author=new Author();
            author.setAuthorUsername("再测试一下");
            author.setAuthorPassword("admin123");
            author.setAuthorEmail("admin1234@qq.com");
            
            
            int num=authorMapper.insert(author);
            System.out.println("num="+num);
            //这个方法插入,默认不会把数据库自增加ID返回,如果需要,可以手动增加
            System.out.println("插入后的ID"+author.getAuthorId());
            
        }
        //插入
        @Test
        public void testInsertSelective() {
            Author author=new Author();
            author.setAuthorUsername("再测试一下");
            author.setAuthorPassword("admin123");
            author.setAuthorEmail("admin1234@qq.com");
            author.setRegisterTime(new Date());
            
            
            int num=authorMapper.insert(author);
            System.out.println("num="+num);
            //这个方法插入,默认不会把数据库自增加ID返回,如果需要,可以手动增加
            System.out.println("插入后的ID"+author.getAuthorId());
            
        }
        //自定义 条件查询
        @Test
        public void testSelectByExample() {
            //声明一个对象
            AuthorExample authorExample=new AuthorExample();
            //创建criteria对象添加条件 and 连接
            Criteria criteria=authorExample.createCriteria();
            //需要手动加%
            criteria.andAuthorUsernameLike("%张三%");
            
            List<Author> list=authorMapper.selectByExample(authorExample);
            System.out.println(list.size());
        }
        
        //根据主键ID查询
        @Test
        public void testSelectByPrimaryKey() {
             Author author= authorMapper.selectByPrimaryKey(6);
            System.out.println(author.getAuthorUsername()+"..."+author.getAuthorBio());
        }
    
        @Test
        public void testUpdateByExampleSelective() {
            fail("Not yet implemented");
        }
    
        @Test
        public void testUpdateByExample() {
            fail("Not yet implemented");
        }
    
        @Test
        public void testUpdateByPrimaryKeySelective() {
            fail("Not yet implemented");
        }
    
        @Test
        public void testUpdateByPrimaryKey() {
            fail("Not yet implemented");
        }
    
    }

     

  • 相关阅读:
    针对安卓java入门:方法的使用
    ES6里关于字符串的拓展
    ES6里关于数字的拓展
    项目笔记:导出XML和导出全部XML功能
    项目笔记:中文转拼音工具类
    深入理解dataset及其用法
    前端插件实现图片懒加载
    Java里日期转换及日期比较大小
    iframe.contentWindow 属性:关于contentWindow和contentDocument区分
    GROUP BY 和 GROUP_CONCAT的使用
  • 原文地址:https://www.cnblogs.com/liunanjava/p/4926534.html
Copyright © 2011-2022 走看看