Fork me on GitHub

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");
    }

}

 

 

 

 

 

 

posted @ 2015-11-03 09:47  森林森  阅读(758)  评论(1编辑  收藏  举报