MyBatis框架之mybatis逆向工程自动生成代码
mybatis属于半自动orm,在使用这个框架中,工作量最大的就是书写mapping的映射文件,由于手动书写很容易出错,我们可以利用mybatis-generator来帮我们自动生成文件。
逆向工程
1.什么是逆向工程
mybaits需要程序员自己编写sql语句,mybatis官方提供逆向工程 可以针对单表自动生成mybatis执行所需要的代码(mapper.java,mapper.xml、po..)
企业实际开发中,常用的逆向工程方式:
由于数据库的表生成java代码。
2.下载逆向工程
mybatis-generator-core-1.3.2-bundle.zip
3.使用方法(会用)
3.1运行逆向工程
官方文档中提供的运行逆向工程的几种方法
running mybatis generator
mybatis generator (mbg) can be run in the following ways:
(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)还可以通过eclipse的插件生成代码
建议使用java程序方式(from another java program with an xml configuration),不依赖开发工具。
下面创建一个生成逆向文件的工程,将自动生成的文件再拷贝到原工程中去(这么做是为了放止直接在源文件中生成会覆盖掉同名文件)导入的jar包和工程结构截图如下:
如图
3.2生成代码配置文件
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> <context id="testtables" targetruntime="mybatis3"> <commentgenerator> <!-- 是否去除自动生成的注释 true:是 : false:否 --> <property name="suppressallcomments" value="true" /> </commentgenerator> <!--数据库连接的信息:驱动类、连接地址、用户名、密码 --> <jdbcconnection driverclass="com.mysql.jdbc.driver" connectionurl="jdbc:mysql://localhost:3306/mybatis" userid="root" password="1234"> </jdbcconnection> <!-- <jdbcconnection driverclass="oracle.jdbc.oracledriver" connectionurl="jdbc:oracle:thin:@127.0.0.1:1521:yycg" userid="yycg" password="yycg"> </jdbcconnection> --> <!-- 默认false,把jdbc decimal 和 numeric 类型解析为 integer,为 true时把jdbc decimal 和 numeric 类型解析为java.math.bigdecimal --> <javatyperesolver> <property name="forcebigdecimals" value="false" /> </javatyperesolver> <!-- targetproject:生成po类的位置 --> <javamodelgenerator targetpackage="cn.edu.hpu.ssm.po" targetproject=".\src"> <!-- enablesubpackages:是否让schema作为包的后缀 --> <property name="enablesubpackages" value="false" /> <!-- 从数据库返回的值被清理前后的空格 --> <property name="trimstrings" value="true" /> </javamodelgenerator> <!-- targetproject:mapper映射文件生成的位置 --> <sqlmapgenerator targetpackage="cn.edu.hpu.ssm.mapper" targetproject=".\src"> <!-- enablesubpackages:是否让schema作为包的后缀 --> <property name="enablesubpackages" value="false" /> </sqlmapgenerator> <!-- targetpackage:mapper接口生成的位置 --> <javaclientgenerator type="xmlmapper" targetpackage="cn.edu.hpu.ssm.mapper" targetproject=".\src"> <!-- enablesubpackages:是否让schema作为包的后缀 --> <property name="enablesubpackages" value="false" /> </javaclientgenerator> <!-- 指定数据库表 --> <table tablename="items"></table> <table tablename="orders"></table> <table tablename="orderdetail"></table> <table tablename="user"></table> <!-- <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>
3.3执行生成程序
generatorsqlmap.java:
import java.io.file; 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.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(); } } }
生成后的代码:
3.4使用生成的代码
需要将生成工程中所生成的代码拷贝到自己的工程中。我们这里吧itemsmapper.java和itemsmapper.xml、items、itemsexample类拷入我们的原工程。
测试itemsmapper中的方法
package cn.edu.hpu.ssm.test; import static org.junit.assert.fail; import java.util.date; import java.util.list; import org.junit.before; import org.junit.test; import org.springframework.context.applicationcontext; import org.springframework.context.support.classpathxmlapplicationcontext; import cn.edu.hpu.ssm.mapper.itemsmapper; import cn.edu.hpu.ssm.po.items; import cn.edu.hpu.ssm.po.itemsexample; public class itemsmappertest { private applicationcontext applicationcontext; private itemsmapper itemsmapper; //注解before是在执行本类所有测试方法之前先调用这个方法 @before public void setup() throws exception{ applicationcontext=new classpathxmlapplicationcontext("classpath:spring/applicationcontext.xml"); itemsmapper=(itemsmapper)applicationcontext.getbean("itemsmapper"); } //根据主键删除 @test public void testdeletebyprimarykey() { fail("not yet implemented"); } //插入 @test public void testinsert() { items items=new items(); items.setname("iphone-5s"); items.setprice(3999f); items.setdetail("正品行货"); items.setpic("sdasd.jpg"); items.setcreatetime(new date()); itemsmapper.insert(items); } //自定义条件来查询 @test public void testselectbyexample() { itemsexample itemsexample=new itemsexample(); //通过criteria构造查询条件 itemsexample.criteria criteria=itemsexample.createcriteria(); criteria.andnameequalto("电视机"); //可能返回多条记录 list<items> list=itemsmapper.selectbyexample(itemsexample); for (int i = 0; i < list.size(); i++) { items it=list.get(i); system.out.println(it.getid()+":"+it.getname()); } } //根据主键来查询 @test public void testselectbyprimarykey() { items items=itemsmapper.selectbyprimarykey(1); system.out.println(items.getname()); } //更新数据 @test public void testupdatebyprimarykey() { //对所有字段进行更新,需要先查询出来再更新 items items = itemsmapper.selectbyprimarykey(1); items.setname("iphone"); itemsmapper.updatebyprimarykey(items); //如果传入字段不空为才更新,在批量更新中使用此方法,不需要先查询再更新 //itemsmapper.updatebyprimarykeyselective(record); } }
以上所述是小编给大家介绍的mybatis框架之mybatis逆向工程自动生成代码,希望对大家有所帮助!
推荐阅读:
上一篇: Java代码实践12306售票算法(二)
推荐阅读