zoukankan      html  css  js  c++  java
  • mybatis逆向工程之配置

    逆向工程

    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:

    [html] view plain copy
     
    1. <?xml version="1.0" encoding="UTF-8"?>  
    2. <!DOCTYPE generatorConfiguration  
    3.   PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN"  
    4.   "http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd">  
    5.   
    6. <generatorConfiguration>  
    7.     <context id="testTables" targetRuntime="MyBatis3">  
    8.         <commentGenerator>  
    9.             <!-- 是否去除自动生成的注释 true:是 : false:否 -->  
    10.             <property name="suppressAllComments" value="true" />  
    11.         </commentGenerator>  
    12.         <!--数据库连接的信息:驱动类、连接地址、用户名、密码 -->  
    13.         <jdbcConnection driverClass="com.mysql.jdbc.Driver"  
    14.             connectionURL="jdbc:mysql://localhost:3306/mybatis" userId="root"  
    15.             password="1234">  
    16.         </jdbcConnection>  
    17.         <!-- <jdbcConnection driverClass="oracle.jdbc.OracleDriver"  
    18.             connectionURL="jdbc:oracle:thin:@127.0.0.1:1521:yycg"   
    19.             userId="yycg"  
    20.             password="yycg">  
    21.         </jdbcConnection> -->  
    22.   
    23.         <!-- 默认false,把JDBC DECIMAL 和 NUMERIC 类型解析为 Integer,为 true时把JDBC DECIMAL 和   
    24.             NUMERIC 类型解析为java.math.BigDecimal -->  
    25.         <javaTypeResolver>  
    26.             <property name="forceBigDecimals" value="false" />  
    27.         </javaTypeResolver>  
    28.   
    29.         <!-- targetProject:生成PO类的位置 -->  
    30.         <javaModelGenerator targetPackage="cn.edu.hpu.ssm.po"  
    31.             targetProject=".\src">  
    32.             <!-- enableSubPackages:是否让schema作为包的后缀 -->  
    33.             <property name="enableSubPackages" value="false" />  
    34.             <!-- 从数据库返回的值被清理前后的空格 -->  
    35.             <property name="trimStrings" value="true" />  
    36.         </javaModelGenerator>  
    37.         <!-- targetProject:mapper映射文件生成的位置 -->  
    38.         <sqlMapGenerator targetPackage="cn.edu.hpu.ssm.mapper"   
    39.             targetProject=".\src">  
    40.             <!-- enableSubPackages:是否让schema作为包的后缀 -->  
    41.             <property name="enableSubPackages" value="false" />  
    42.         </sqlMapGenerator>  
    43.         <!-- targetPackage:mapper接口生成的位置 -->  
    44.         <javaClientGenerator type="XMLMAPPER"  
    45.             targetPackage="cn.edu.hpu.ssm.mapper"   
    46.             targetProject=".\src">  
    47.             <!-- enableSubPackages:是否让schema作为包的后缀 -->  
    48.             <property name="enableSubPackages" value="false" />  
    49.         </javaClientGenerator>  
    50.         <!-- 指定数据库表 -->  
    51.         <table tableName="items"></table>  
    52.         <table tableName="orders"></table>  
    53.         <table tableName="orderdetail"></table>  
    54.         <table tableName="user"></table>  
    55.         <!-- <table schema="" tableName="sys_user"></table>  
    56.         <table schema="" tableName="sys_role"></table>  
    57.         <table schema="" tableName="sys_permission"></table>  
    58.         <table schema="" tableName="sys_user_role"></table>  
    59.         <table schema="" tableName="sys_role_permission"></table> -->  
    60.           
    61.         <!-- 有些表的字段需要指定java类型  
    62.          <table schema="" tableName="">  
    63.             <columnOverride column="" javaType="" />  
    64.         </table> -->  
    65.     </context>  
    66. </generatorConfiguration>  


    3.3执行生成程序
    GeneratorSqlmap.java: 

    [java] view plain copy
     
    1. import java.io.File;  
    2. import java.util.ArrayList;  
    3. import java.util.List;  
    4.   
    5. import org.mybatis.generator.api.MyBatisGenerator;  
    6. import org.mybatis.generator.config.Configuration;  
    7. import org.mybatis.generator.config.xml.ConfigurationParser;  
    8. import org.mybatis.generator.internal.DefaultShellCallback;  
    9.   
    10.   
    11. public class GeneratorSqlmap {  
    12.   
    13.   
    14.     public void generator() throws Exception{  
    15.   
    16.   
    17.         List<String> warnings = new ArrayList<String>();  
    18.         boolean overwrite = true;  
    19.         //加载配置文件  
    20.         File configFile = new File("generatorConfig.xml");   
    21.         ConfigurationParser cp = new ConfigurationParser(warnings);  
    22.         Configuration config = cp.parseConfiguration(configFile);  
    23.         DefaultShellCallback callback = new DefaultShellCallback(overwrite);  
    24.         MyBatisGenerator myBatisGenerator = new MyBatisGenerator(config,  
    25.                 callback, warnings);  
    26.         myBatisGenerator.generate(null);  
    27.   
    28.   
    29.     }   
    30.     public static void main(String[] args) throws Exception {  
    31.         try {  
    32.             GeneratorSqlmap generatorSqlmap = new GeneratorSqlmap();  
    33.             generatorSqlmap.generator();  
    34.         } catch (Exception e) {  
    35.             e.printStackTrace();  
    36.         }  
    37.           
    38.     }  
    39. }  



    生成后的代码:

    如图


    3.4使用生成的代码

    需要将生成工程中所生成的代码拷贝到自己的工程中。我们这里吧ItemsMapper.java和ItemsMapper.xml、Items、ItemsExample类拷入我们的原工程。

    测试ItemsMapper中的方法

    [java] view plain copy
     
    1. package cn.edu.hpu.ssm.test;  
    2.   
    3. import static org.junit.Assert.fail;  
    4.   
    5. import java.util.Date;  
    6. import java.util.List;  
    7.   
    8.   
    9. import org.junit.Before;  
    10. import org.junit.Test;  
    11. import org.springframework.context.ApplicationContext;  
    12. import org.springframework.context.support.ClassPathXmlApplicationContext;  
    13.   
    14.   
    15. import cn.edu.hpu.ssm.mapper.ItemsMapper;  
    16. import cn.edu.hpu.ssm.po.Items;  
    17. import cn.edu.hpu.ssm.po.ItemsExample;  
    18.   
    19.   
    20. public class ItemsMapperTest {  
    21.   
    22.   
    23.     private ApplicationContext applicationContext;  
    24.       
    25.     private ItemsMapper itemsMapper;  
    26.       
    27.     //注解Before是在执行本类所有测试方法之前先调用这个方法  
    28.     @Before  
    29.     public void setup() throws Exception{  
    30.         applicationContext=new ClassPathXmlApplicationContext("classpath:spring/applicationContext.xml");  
    31.         itemsMapper=(ItemsMapper)applicationContext.getBean("itemsMapper");  
    32.     }  
    33.       
    34.     //根据主键删除  
    35.     @Test  
    36.     public void testDeleteByPrimaryKey() {  
    37.         fail("Not yet implemented");  
    38.     }  
    39.   
    40.   
    41.     //插入  
    42.     @Test  
    43.     public void testInsert() {  
    44.         Items items=new Items();  
    45.         items.setName("iPhone-5S");  
    46.         items.setPrice(3999f);  
    47.         items.setDetail("正品行货");  
    48.         items.setPic("sdasd.jpg");  
    49.         items.setCreatetime(new Date());  
    50.         itemsMapper.insert(items);  
    51.     }  
    52.   
    53.   
    54.     //自定义条件来查询  
    55.     @Test  
    56.     public void testSelectByExample() {  
    57.         ItemsExample itemsExample=new ItemsExample();  
    58.         //通过Criteria构造查询条件  
    59.         ItemsExample.Criteria criteria=itemsExample.createCriteria();  
    60.         criteria.andNameEqualTo("电视机");  
    61.         //可能返回多条记录  
    62.         List<Items> list=itemsMapper.selectByExample(itemsExample);  
    63.         for (int i = 0; i < list.size(); i++) {  
    64.             Items it=list.get(i);  
    65.             System.out.println(it.getId()+":"+it.getName());  
    66.         }  
    67.     }  
    68.   
    69.   
    70.     //根据主键来查询  
    71.     @Test  
    72.     public void testSelectByPrimaryKey() {  
    73.         Items items=itemsMapper.selectByPrimaryKey(1);  
    74.         System.out.println(items.getName());  
    75.     }  
    76.   
    77.   
    78.     //更新数据  
    79.     @Test  
    80.     public void testUpdateByPrimaryKey() {  
    81.         //对所有字段进行更新,需要先查询出来再更新  
    82.         Items items = itemsMapper.selectByPrimaryKey(1);      
    83.         items.setName("iPhone");      
    84.         itemsMapper.updateByPrimaryKey(items);  
    85.           
    86.         //如果传入字段不空为才更新,在批量更新中使用此方法,不需要先查询再更新  
    87.         //itemsMapper.updateByPrimaryKeySelective(record);  
    88.     }  
    89.   
    90.   
    91. }  

    逆向工程的创建和使用就讲解到这里

    转载请注明出处:http://blog.csdn.net/acmman/article/details/46906871

  • 相关阅读:
    生成一个uuid字符串,并去除多余的符号
    Jackson错误:Can not deserialize instance of java.lang.String out of START_OBJECT token
    jdk1.8换成11,启动项目报错java.net.MalformedURLException: unknown protocol: jrt
    RSA算法
    springboot集成thymeleaf中遇到不能反悔页面,只能反悔字符串
    Caused by: java.lang.IllegalArgumentException: DefaultSerializer requires a Serializable payload but received an object of type [VCodeModel]
    [08001] Could not create connection to database server. Attempted reconnect 3 times. Giving up.
    Caused by: com.mysql.jdbc.MysqlDataTruncation: Data truncation: Out of range value for column 'phone' at row 1
    jstl是自动就有的吗,不是的Unknown tag (c:if).
    mysql 设置编码 Incorrect string value: 'xE9x98xBFxE4xB8x89...' for column 'cont,mysql乱码
  • 原文地址:https://www.cnblogs.com/luckypo/p/7356249.html
Copyright © 2011-2022 走看看