您的位置:首页技术文章
文章详情页

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

【字号: 日期:2023-10-26 12:00:16浏览:7作者:猪猪
目录MyBatis逆向工程生成dao层增删改查如下:Mybatis反向工程的使用首先,用eclipse 建一个maven 项目这时我们的项目结构是这个样子的现在要写一下代码了例如,我们在新的xml文件中这样写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<BUser> selectByExample(BUserExample example); //根据条件查询数据 /** * 示例: * public List<BUser> getList() { * BUserExample userExample = new BUserExample(); * BUserExample.Criteria criteria = userExample.createCriteria(); * criteria.andUsernameEqualTo('fan'); * userExample.setOrderByClause('username desc'); * List<BUser> 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层增删改查的操作

建一个maven 项目

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

打好勾点next

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

填好点finish

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

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

打开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层增删改查的操作

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

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

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

新建baseInfoGeneratorConfig.xml文件

新建jdbc.properties文件

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

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

jdbc.driver=com.mysql.jdbc.Driverjdbc.url=jdbc:mysql://localhost:3306/base_info?useSSL=falsejdbc.username=rootjdbc.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 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 类型解析为 Integertrue,把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 类

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

然后把以下内容覆盖 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

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

以上的代码可以在下面的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

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

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

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

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

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

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

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

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

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

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

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

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

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

标签: Mybatis 数据库
相关文章: