MyBatis逆向工程生成dao层增删改查的操作

MyBatis逆向工程生成dao层增删改查

如下:

int countByExample(BUserExample example); //根据条件查询数量 
    /**
     * 示例
     * public int countByExample() {
     * BUserExample userExample = new BUserExample();
     * BUserExample.Criteria criteria = userExample.createCriteria();
     * criteria.andUsernameEqualTo("fan");
     * int count = userMapper.countByExample(userExample);
     * return count;
     * }
     * 相当于:select count(*) from user where username = 'fan'
     */
 
    int deleteByExample(BUserExample example); //根据条件删除数据(一条或多条)
 
    /**
     * 示例
     * public int deleteByExample() {
     * BUserExample userExample = new BUserExample();
     * BUserExample.Criteria criteria = userExample.createCriteria();
     * criteria.andUsernameEqualTo("fan");
     * int count = userMapper.deleteByExample(userExample);
     * return count;
     * }
     * 相当于:delete from user where username = 'fan'
     */
 
    int deleteByPrimaryKey(Integer id); //根据主键删除数据
    int insert(BUser record); //插入数据(插入一条数据)
    int insertSelective(BUser record); //插入数据(插入一条数据,只插入不为null的字段,不会影响有默认值的字段)
    List selectByExample(BUserExample example); //根据条件查询数据
 
    /**
     * 示例:
     * public List getList() {
     * BUserExample userExample = new BUserExample();
     * BUserExample.Criteria criteria = userExample.createCriteria();
     * criteria.andUsernameEqualTo("fan");
     * userExample.setOrderByClause("username desc");
     * List users = userMapper.selectByExample(userExample);
     * return users;
     * }
     * 相当于:select * from user where username = 'fan' order by username desc
     */
 
    BUser selectByPrimaryKey(Integer id);  //根据主键查询
    int updateByExampleSelective(@Param("record") BUser record, @Param("example") BUserExample example); //按条件更新值不为null的字段
 
    /**
     * 示例:
     * public int updateByParam(String username) {
     * BUserExample userExample = new BUserExample();
     * BUserExample.Criteria criteria = userExample.createCriteria();
     * criteria.andUsernameEqualTo(username);
     * BUser user = new BUser();
     * user.setNickname("jdk");
     * int update = userMapper.updateByExampleSelective(user, userExample);
     * return update;
     * }
     * 相当于:update user set nickname = 'jdk' where username = #{username}
     */
 
    int updateByExample(@Param("record") BUser record, @Param("example") BUserExample example); //按条件更新
    int updateByPrimaryKeySelective(BUser record); //根据主键与条件更新
    /**
     * 示例:
     * public int updateByIdAndParam(String username) {
     * BUser user = new BUser();
     * user.setId(101);
     * user.setUsername(username);
     * int update = userMapper.updateByPrimaryKeySelective(user);
     * return update;
     * }
     * 相当于:update user set username = #{username} where id = 101
     */
 
    int updateByPrimaryKey(BUser record); //根据主键更新

Mybatis反向工程的使用

为什么要使用反向工程,因为,快啊。运行一下就可以自动生成,实现,一堆表的增删查改,等于多了个人帮忙工作,为什么不呢 ?

但与别的工具一样,自动生成的东西总是有方便的地方,也会有麻烦的地方。所以,使用前要留点心眼。要不工具变负累,对个人还好 对团队就变祸害了。

因此,下面的教程除了说如何使用,还会说 一个比较重要的技巧和心得,如果有更好的方法,或我说的有什么不对,请直接指出。谢谢

如有问题可以在下面留言,但我不一定有时间回复。

首先,用eclipse 建一个maven 项目

MyBatis逆向工程生成dao层增删改查的操作_第1张图片

建一个maven 项目

MyBatis逆向工程生成dao层增删改查的操作_第2张图片

打好勾点next

MyBatis逆向工程生成dao层增删改查的操作_第3张图片

填好点finish

MyBatis逆向工程生成dao层增删改查的操作_第4张图片

这时我们的项目结构是这个样子的

打开pom.xml 文件

把如下内容复制进去:


  4.0.0
  cc.com
  autoMybatis
  0.0.1-SNAPSHOT
   
  
      
org.mybatis
mybatis
3.2.5


         
             org.mybatis.generator
             mybatis-generator-core
             1.3.2
         
       
        
      mysql
      mysql-connector-java
      5.1.38
    
  

然后新建如下包:

MyBatis逆向工程生成dao层增删改查的操作_第5张图片

mybatis.dao (用于放mapper 的java 接口)

mybatis.entity (用于放实体对象)

在src/main/resources 下新建目录mybatis及它的子目录mapper

新建baseInfoGeneratorConfig.xml文件

新建jdbc.properties文件

MyBatis逆向工程生成dao层增删改查的操作_第6张图片

拷贝如下内容进jdbc.properties 要改为正确地址,用户名, 密码

jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/base_info?useSSL=false
jdbc.username=root
jdbc.password=自已改密码

拷如下内容进入baseInfoGeneratorConfig.xml

    
    
    
    
           
        
            
            
            
                
                
            
    
            
            
            
    
            
            
                
            
    
            
            
            
                
                
                
            
    
            
            
            
            
    
            
        
                
          
    
        
            
        

上面的都搞好

现在要写一下代码了

在根目录下建一个 GeneratorSqlmap.java 的JAVA 类

MyBatis逆向工程生成dao层增删改查的操作_第7张图片

然后把以下内容覆盖 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(String generatorConfigFilePath) throws Exception{
List warnings = new ArrayList();
boolean overwrite = true;
Class.forName("com.mysql.jdbc.Driver");
//指定 逆向工程配置文件
File configFile = new File(generatorConfigFilePath); 
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("src/main/resources/baseInfoGeneratorConfig.xml");
} catch (Exception e) {
e.printStackTrace();
}
System.exit(0);
} 
}

最后运行,GeneratorSqlmap.java ,然后刷新一下项目,就可以得到非常漂亮的,表的entity,mapper interface,mapper xml

MyBatis逆向工程生成dao层增删改查的操作_第8张图片

以上的代码可以在下面的github链接中找到

现在我们分享一个,能让自动生成和手工修改和平共存的方法。

为什么要和平共存,因为,在数据库表中要加或减一个字段,重复自动生成有可能覆盖掉原来的。

这里有个经过实验的方案,首先在我们生成完第一次没有问题后,把baseInfoGeneratorConfig.xml 中的生成pojo(entity 你爱叫什么叫什么)

     
            
            
                
                
                
            

还有生成接口的

    
        
                
            

的注掉

然后,不要修改系统自动生成的 mapper.xml

(可以为配置文件中改个特别一点的名字(例如带上sys),跟团队的成员说一下就可以了。

然后,别外写一个XML mapper 用于开发

MyBatis逆向工程生成dao层增删改查的操作_第9张图片

只要namespace 是相同的,还是会在对应的接口中生成

例如,我们在新的xml文件中这样写

MyBatis逆向工程生成dao层增删改查的操作_第10张图片

只需要在系统生成的JAVA接口中增加:

MyBatis逆向工程生成dao层增删改查的操作_第11张图片

这样一来,如果数据库需要增加字段。只需简单的三步就可以。

  • 一,把系统生成的配置文件删了。
  • 二,运行自动生成。
  • 三,把新加的字段在对应的pojo(或叫entity 中增加)

就可以,很好的把自动生成和手工修改做出分离。同时也会减少很多不应该出现的错误。

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

你可能感兴趣的