文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

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

2024-04-02 19:55

关注

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

如下:


int countByExample(BUserExample example); //根据条件查询数量 
    
 
    int deleteByExample(BUserExample example); //根据条件删除数据(一条或多条)
 
    
 
    int deleteByPrimaryKey(Integer id); //根据主键删除数据
    int insert(BUser record); //插入数据(插入一条数据)
    int insertSelective(BUser record); //插入数据(插入一条数据,只插入不为null的字段,不会影响有默认值的字段)
    List<BUser> selectByExample(BUserExample example); //根据条件查询数据
 
    
 
    BUser selectByPrimaryKey(Integer id);  //根据主键查询
    int updateByExampleSelective(@Param("record") BUser record, @Param("example") BUserExample example); //按条件更新值不为null的字段
 
    
 
    int updateByExample(@Param("record") BUser record, @Param("example") BUserExample example); //按条件更新
    int updateByPrimaryKeySelective(BUser record); //根据主键与条件更新
    
 
    int updateByPrimaryKey(BUser record); //根据主键更新

Mybatis反向工程的使用

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

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

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

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

首先,用eclipse 建一个maven 项目

建一个maven 项目

打好勾点next

填好点finish

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

打开pom.xml 文件

把如下内容复制进去:


<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>cc.com</groupId>
  <artifactId>autoMybatis</artifactId>
  <version>0.0.1-SNAPSHOT</version>
   <dependencies>
  <!-- mybatis依赖 -->
      <dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.2.5</version>
</dependency>
<!-- 反向工程支持包 -->
         <dependency>
             <groupId>org.mybatis.generator</groupId>
             <artifactId>mybatis-generator-core</artifactId>
             <version>1.3.2</version>
         </dependency>
       <!-- mysql 驱动 -->
        <dependency>
      <groupId>mysql</groupId>
      <artifactId>mysql-connector-java</artifactId>
      <version>5.1.38</version>
    </dependency>
  </dependencies>
</project>

然后新建如下包:

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

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

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

新建baseInfoGeneratorConfig.xml文件

新建jdbc.properties文件

拷贝如下内容进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


<?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>    
     <properties resource="jdbc.properties" />      
    <context id="sqlserverTables" targetRuntime="MyBatis3">    
        <!-- 生成的pojo,将implements Serializable-->    
        <plugin type="org.mybatis.generator.plugins.SerializablePlugin"></plugin>    
        <commentGenerator>    
            <!-- 是否去除自动生成的注释 true:是 : false:否 -->    
            <property name="suppressAllComments" value="true" />    
        </commentGenerator>    
    
        <!-- 数据库链接URL、用户名、密码 -->    
        <jdbcConnection driverClass="${jdbc.driver}"    
                        connectionURL="${jdbc.url}"    
                        userId="${jdbc.username}"    
                        password="${jdbc.password}">    
        </jdbcConnection>    
    
        <!--      
        默认false,把JDBC DECIMAL 和 NUMERIC 类型解析为 Integer    
            true,把JDBC DECIMAL 和 NUMERIC 类型解析为java.math.BigDecimal      
        -->    
        <javaTypeResolver>    
            <property name="forceBigDecimals" value="false" />    
        </javaTypeResolver>    
    
        <!--     
        生成model模型,对应的包路径,以及文件存放路径(targetProject),targetProject可以指定具体的路径,如./src/main/java,    
        也可以使用“MAVEN”来自动生成,这样生成的代码会在target/generatord-source目录下    
        -->    
        <!--<javaModelGenerator targetPackage="com.joey.mybaties.test.pojo" targetProject="MAVEN">-->    
        <javaModelGenerator targetPackage="mybatis.entity" targetProject="./src/main/java">    
            <property name="enableSubPackages" value="true"/>    
            <!-- 从数据库返回的值被清理前后的空格  -->    
            <property name="trimStrings" value="true" />    
        </javaModelGenerator>    
    
        <!--对应的mapper.xml文件  -->    
        <sqlMapGenerator targetPackage="mybatis.mapper" targetProject="./src/main/resources">    
            <property name="enableSubPackages" value="true"/>
        </sqlMapGenerator>    
    
        <!-- 对应的Mapper接口类文件 -->    
        <javaClientGenerator type="XMLMAPPER" targetPackage="mybatis.dao" targetProject="./src/main/java">
            <property name="enableSubPackages" value="true"/>    
        </javaClientGenerator>  
    
        <!--  你可以改成一张数据库中真正存在的表
         schema 指的是schema,在mysql 中我发现填错也能跑。tableName 是表名 ObjectName 是对象名-->
        <table schema="base_info" tableName="user_info" domainObjectName="userInfo"    
               enableCountByExample="false" enableUpdateByExample="false" enableDeleteByExample="false"    
               enableSelectByExample="false" selectByExampleQueryId="false" >    
            <property name="useActualColumnNames" value="false"/>    
        </table>    
    </context>    
</generatorConfiguration>  

上面的都搞好

现在要写一下代码了

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

然后把以下内容覆盖 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<String> warnings = new ArrayList<String>();
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

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

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

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

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


 <!--     
        生成model模型,对应的包路径,以及文件存放路径(targetProject),targetProject可以指定具体的路径,如./src/main/java,    
        也可以使用“MAVEN”来自动生成,这样生成的代码会在target/generatord-source目录下    
        -->    
        <!--<javaModelGenerator targetPackage="com.joey.mybaties.test.pojo" targetProject="MAVEN">-->    
        <javaModelGenerator targetPackage="mybatis.entity" targetProject="./src/main/java">    
            <property name="enableSubPackages" value="true"/>    
            <!-- 从数据库返回的值被清理前后的空格  -->    
            <property name="trimStrings" value="true" />    
        </javaModelGenerator>    

还有生成接口的


<!-- 对应的Mapper接口类文件 -->    
        <javaClientGenerator type="XMLMAPPER" targetPackage="mybatis.dao" targetProject="./src/main/java">
            <property name="enableSubPackages" value="true"/>    
        </javaClientGenerator>    

的注掉

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

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

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

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

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

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

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

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

以上为个人经验,希望能给大家一个参考,也希望大家多多支持编程网。

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯