一、逆向工程1.1、概述
mybatis需要程序号自己编写的SQL。
mybatis官方提供了逆向工程,可以针对单表自动生成mybatis执行所需要的代码
(mapper,java,maper.xml,po...)
一般都是由数据库到java代码, 的生成过程
二、导入jar包2.1、mybatis-generator
三、配置xml3.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包--><classPathEntrylocation="G:/jar/MySQL-connector-java-5.1.37-bin.jar"/><contextid="DB2Tables"targetRuntime="MyBatis3"><commentGenerator><!--是否去除自动生成的注释 true:是 : false:否--><PRopertyname="suppressAllComments"value="true"/></commentGenerator><!--JDBC连接配置,driver,url,user,passWord--><jdbcConnectiondriverClass="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><propertyname="forceBigDecimals"value="false"/></javaTypeResolver><!--targetProject:生成PO类的位置--><javaModelGeneratortargetPackage="com.mybatis.po"targetProject=".\src"><propertyname="enableSubPackages"value="false"/><propertyname="trimStrings"value="true"/></javaModelGenerator><!--targetProject:mapper映射文件生成的位置--><sqlMapGeneratortargetPackage="com.pb.mybatis.mapping"targetProject=".\src"><!--enableSubPackages:是否让schema作为包的后缀--><propertyname="enableSubPackages"value="false"/><!--从数据库返回的值被清理前后的空格--><propertyname="trimStrings"value="true"/></sqlMapGenerator><!--targetPackage:mapper接口生成的位置--><javaClientGeneratortype="XMLMAPPER"targetPackage="com.pb.mybatis.mapper"targetProject=".\src"><!--enableSubPackages:是否让schema作为包的后缀--><propertyname="enableSubPackages"value="false"/></javaClientGenerator><!--指定要生成的表--><tabletableName="author"></table><tabletableName="blog"></table><tabletableName="posts"></table></context></generatorConfiguration>
四、运行java程序生成4.1、java程序
importjava.io.File;importjava.io.IOException;importjava.util.ArrayList;importjava.util.List;importorg.mybatis.generator.api.MyBatisGenerator;importorg.mybatis.generator.config.Configuration;importorg.mybatis.generator.config.xml.ConfigurationParser;importorg.mybatis.generator.exception.XMLParserException;importorg.mybatis.generator.internal.DefaultShellCallback;publicclassGeneratorSqlmap {publicvoidgenerator()throwsException{
List<String> warnings =newArrayList<String>();booleanoverwrite =true;//指定 逆向工程配置文件File configFile =newFile("generatorConfig.xml");
ConfigurationParser cp=newConfigurationParser(warnings);
Configuration config=cp.parseConfiguration(configFile);
DefaultShellCallback callback=newDefaultShellCallback(overwrite);
MyBatisGenerator myBatisGenerator=newMyBatisGenerator(config,
callback, warnings);
myBatisGenerator.generate(null);
}publicstaticvoidmain(String[] args)throwsException {try{
GeneratorSqlmap generatorSqlmap=newGeneratorSqlmap();
generatorSqlmap.generator();
}catch(Exception e) {
e.printStackTrace();
}
}
}
五、测试5.1、测试类
packagecom.pb.ssm.mapper;importstaticorg.junit.Assert.fail;importjava.util.Date;importjava.util.List;importjavax.crypto.Cipher;importorg.junit.Before;importorg.junit.Test;importorg.springframework.context.applicationContext;importorg.springframework.context.support.ClassPathXmlApplicationContext;importcom.pb.ssm.po.Author;importcom.pb.ssm.po.AuthorExample;importcom.pb.ssm.po.AuthorExample.Criteria;publicclassAuthorMapperTest {privateApplicationContext applicationContext;privateAuthorMapper authorMapper;
@BeforepublicvoidsetUp()throwsException {
applicationContext=newClassPathXmlApplicationContext("ApplicationContext.xml");
authorMapper=(AuthorMapper) applicationContext.getBean("authorMapper");
}//根据条件查询记录数@TestpublicvoidtestCountByExample() {
AuthorExample example=newAuthorExample();//可以加条件,不加条件默认查询全部Criteria criteria=example.createCriteria();//加条件,介绍不是空的criteria.andAuthorBioIsNotNull();intnum=authorMapper.countByExample(example);
System.out.println("num="+num);
}//根据条件删除@TestpublicvoidtestDeleteByExample() {
AuthorExample example=newAuthorExample();//可以加条件,不加条件默认查询全部Criteria criteria=example.createCriteria();
criteria.andAuthorUsernameEqualTo("程序员");intnum=authorMapper.deleteByExample(example);
System.out.println("num="+num);
}//根据主键ID删除@TestpublicvoidtestDeleteByPrimaryKey() {intnum=authorMapper.deleteByPrimaryKey(18);
System.out.println("num="+num);
}//插入@TestpublicvoidtestInsert() {
Author author=newAuthor();
author.setAuthorUsername("再测试一下");
author.setAuthorPassword("admin123");
author.setAuthorEmail("admin1234@QQ.com");intnum=authorMapper.insert(author);
System.out.println("num="+num);//这个方法插入,默认不会把数据库自增加ID返回,如果需要,可以手动增加System.out.println("插入后的ID"+author.getAuthorId());
}//插入@TestpublicvoidtestInsertSelective() {
Author author=newAuthor();
author.setAuthorUsername("再测试一下");
author.setAuthorPassword("admin123");
author.setAuthorEmail("admin1234@qq.com");
author.setRegisterTime(newDate());intnum=authorMapper.insert(author);
System.out.println("num="+num);//这个方法插入,默认不会把数据库自增加ID返回,如果需要,可以手动增加System.out.println("插入后的ID"+author.getAuthorId());
}//自定义 条件查询@TestpublicvoidtestSelectByExample() {//声明一个对象AuthorExample authorExample=newAuthorExample();//创建criteria对象添加条件 and 连接Criteria criteria=authorExample.createCriteria();//需要手动加%criteria.andAuthorUsernameLike("%张三%");
List<Author> list=authorMapper.selectByExample(authorExample);
System.out.println(list.size());
}//根据主键ID查询@TestpublicvoidtestSelectByPrimaryKey() {
Author author= authorMapper.selectByPrimaryKey(6);
System.out.println(author.getAuthorUsername()+"..."+author.getAuthorBio());
}
@TestpublicvoidtestUpdateByExampleSelective() {
fail("Not yet implemented");
}
@TestpublicvoidtestUpdateByExample() {
fail("Not yet implemented");
}
@TestpublicvoidtestUpdateByPrimaryKeySelective() {
fail("Not yet implemented");
}
@TestpublicvoidtestUpdateByPrimaryKey() {
fail("Not yet implemented");
}
}