Mybatis连接MySQL数据库通过逆向工程简化开发流程

news/2024/11/7 22:41:52/

文章目录

  • 一、使用步骤
    • 1、建立新项目
    • 2、引入pom依赖
    • 3、创建逆向工程的配置文件 generatorConfig.xml
    • 4、运行逆行工程,生成代码文件
  • 二、案例展示
    • 1、建立数据表
    • 2、改写对应的配置文件内容
      • 1、数据库连接配置,指定自己的数据库
      • 2、配置pojo生成的位置
      • 3、配置sql映射文件的生成位置
      • 4、配置mapper接口的生成位置
      • 5、对需要生成对应数据表进行指定
    • 3、运行生成代码工具类
    • 4、运行结果
  • 三、对生成的逆向工程代码进行测试

在开发中,一般我们的开发流程是:

  1. 数据库:设计数据表
  2. 实体类:建立与数据表对应的pojo实体类
  3. 持久层:设计持久层,Mapper接口和Mypper.xml sql映射文件
  4. 服务层:添加Service接口和ServiceImpl接口实现类
  5. 逻辑控制层:设计各页面/功能的Cotroller

但是,我们想的是,很多情况下,实体类都是一些和SQL表中重复的字段,能不能有一种方法可以自动生成对应的实体类?如果表少,手敲没有啥,如果表太多的话,难免会很麻烦,所以MyBatis官方提供了一个逆向工程,可以针对单表自动生成MyBatis执行所需要的代码(包括mapper.xml,mapper.java,pojo)。一般在开发中,常用的逆向工程方式是通过数据库的表生成代码。

在引入逆向工程之后,我们的开发流程会变成:

  1. 加入Mybatis逆向工程的依赖

  2. 设计数据表

  3. 配置逆向工程配置信息

  4. 运行逆向工程

  5. 得到【pojo类、dao接口、sql映射文件】

下面,我们来开始使用,对于逆向工程,帮我们自动生成的Java代码,大大加快了我们的开发效率。但是,生成的文件太过冗余,不必要的代码过多。尤其是sql映射文件,里面的配置内容太多,对于dao层,提供的方法比较有限,需要自行扩展。后期,一般使用MyBatisPlus完成开发功能。

一、使用步骤

1、建立新项目

开始,我们建立一个空项目,模拟一下初始的开发流程
在这里插入图片描述
对于配置文件可以在官方网站中找到:http://mybatis.org/generator/configreference/xmlconfig.html,很多时候要学会看官网 。

2、引入pom依赖

<!--mysql--><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><scope>runtime</scope></dependency><!-- mybatis依赖 --><dependency><groupId>org.mybatis</groupId><artifactId>mybatis</artifactId><version>3.4.6</version></dependency><!-- mybatis逆向工程依赖 --><dependency><groupId>org.mybatis.generator</groupId><artifactId>mybatis-generator-core</artifactId><version>1.3.7</version></dependency>

3、创建逆向工程的配置文件 generatorConfig.xml

在这里插入图片描述
注意的是:配置文件中的各个标签顺序是有要求的,和mybatis-config.xml配置文件一样,顺序不对是会报错的。

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE generatorConfigurationPUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN""http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd"><generatorConfiguration><context id="DB2Tables" targetRuntime="MyBatis3"><!-- 去除生成的注解 --><commentGenerator><property name="suppressAllComments" value="true"/></commentGenerator><!-- 数据库连接配置 --><!-- 注意xml中不支持&,用&amp;代替 --><jdbcConnection driverClass="com.mysql.cj.jdbc.Driver" connectionURL="jdbc:mysql://rm-m5e130nm7h37n6v982o.mysql.rds.aliyuncs.com:3306/demo?useUnicode=true&amp;characterEncoding=utf8&amp;useSSL=false&amp;serverTimezone=GMT%2B8"userId="xxxxx" password="xxxxxx"></jdbcConnection><!-- 处理NUMERIC和DECIMAL类型的策略 --><javaTypeResolver><property name="forceBigDecimals" value="false" /></javaTypeResolver><!-- 配置pojo生成的位置 --><javaModelGenerator targetPackage="com.ycz.pojo"  targetProject="src/main/java"><property name="enableSubPackages" value="true" /><property name="trimStrings" value="true" /></javaModelGenerator><!-- 配置sql映射文件的生成位置 --><sqlMapGenerator targetPackage="com.ycz.mapper" targetProject="src/main/resources"><property name="enableSubPackages" value="true" /><property name="trimStrings" value="true" />        </sqlMapGenerator><!-- 配置dao接口的生成位置 --><javaClientGenerator type="XMLMAPPER" targetPackage="com.ycz.dao" targetProject="src/main/java"><property name="enableSubPackages" value="true" /><property name="trimStrings" value="true" />     </javaClientGenerator><!-- 指定逆向依据的数据表 --><table tableName="person" domainObjectName="Person"></table></context></generatorConfiguration>

4、运行逆行工程,生成代码文件

public class GeneratorTest {public static void main(String[] args) throws Exception {List<String> warnings = new ArrayList<String>();boolean overwrite = true;File configFile = new File("src/main/resources/config/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);System.out.println("生成成功!");}
}

二、案例展示

我们按照上述的开发流程步骤来进行:

1、建立数据表

根据自己的业务,首先第一步进行的就是先创建对应符合业务的数据表。这里我使用三张表:
在这里插入图片描述
三张表的字段信息如下:
在这里插入图片描述
这里不需要直接用我的三张表,可以自己建立自己的表来进行测试,这边只是为了后文博文的完整性。

2、改写对应的配置文件内容

1、数据库连接配置,指定自己的数据库

需要对generatorConfig.xml文件中的内容修改为符合自己项目的配置。

  <!-- 注意xml中不支持&,用&amp;代替 --><jdbcConnection driverClass="com.mysql.cj.jdbc.Driver"connectionURL="jdbc:mysql://localhost:3306/mybatis_demo?useUnicode=true&amp;characterEncoding=utf8&amp;useSSL=false&amp;serverTimezone=GMT%2B8"userId="root" password="admin123"><!--在逆向生成时,除了会生成 User 类,还会生成一个继承 User 类的UserWithBLOBs 类。加入此注解避免生成类的UserWithBLOBs--><property name="nullCatalogMeansCurrent" value="true" /></jdbcConnection>

jdbcConnection设置连接信息,配置用户名和密码,驱动和数据库的url等等信息。

2、配置pojo生成的位置

  <!-- 配置pojo生成的位置 --><javaModelGenerator targetPackage="com.fckey.pojo"  targetProject="src/main/java"><property name="enableSubPackages" value="true" /><property name="trimStrings" value="true" /></javaModelGenerator>

主要配置的是targetPackage项目,指定pojo生成的位置

3、配置sql映射文件的生成位置

  <!-- 配置sql映射文件的生成位置 --><sqlMapGenerator targetPackage="com.fckey.mapper" targetProject="src/main/resources"><property name="enableSubPackages" value="true" /><property name="trimStrings" value="true" /></sqlMapGenerator>

4、配置mapper接口的生成位置

 <!-- 配置dao接口的生成位置 --><javaClientGenerator type="XMLMAPPER" targetPackage="com.fckey.mapper"targetProject="src/main/java"><property name="enableSubPackages" value="true" /><property name="trimStrings" value="true" /></javaClientGenerator>

5、对需要生成对应数据表进行指定

 <!-- 指定逆向依据的数据表 --><table tableName="t_dept" domainObjectName="Dept"></table><table tableName="t_emp" domainObjectName="Emp"></table><table tableName="t_user" domainObjectName="User"></table>

3、运行生成代码工具类

在编写好了对应的配置,还需要一个能够运行配置的方法。如下所示:

public class GeneratorTest {public static void main(String[] args) throws Exception {List<String> warnings = new ArrayList<String>();boolean overwrite = true;File configFile = new File("src/main/resources/config/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);System.out.println("生成成功!");}
}

4、运行结果

直接运行GeneratorTest,查看最终的结果
在这里插入图片描述
生成的效果还是不错的,对于xml配置文件,里面写的内容也是非常的专业。
在这里插入图片描述

三、对生成的逆向工程代码进行测试

对于生成的逆向工程代码,我们注意到pojo包名下还生成了xxxExample方法,example用于添加查询条件,相当where后面的部分。
对于Example中方法的说明。
在这里插入图片描述
在进行测试之前,需要注意的是,我们还需要导入全局配置文件mybatis-config.xml来完成测试分析。

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configurationPUBLIC "-//mybatis.org//DTD Config 3.0//EN""http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration><settings><setting name="mapUnderscoreToCamelCase" value="true"/><setting name="lazyLoadingEnabled" value="true"/><setting name="cacheEnabled" value="true"/></settings><typeAliases><!--将当前包下的所有类都配置别名--><package name="com.fckey.mybatis.entity"/></typeAliases><!--设置连接数据库的环境--><environments default="development"><environment id="development"><transactionManager type="JDBC"/><dataSource type="POOLED"><property name="driver" value="com.mysql.cj.jdbc.Driver"/><property name="url"value="jdbc:mysql://localhost:3306/mybatis_demo"/><!--注意:如果在建sql表单的时候选了字符集(如utf8),这里的value要改成:value="jdbc:mysql://localhost:3306/mybatis?characterEncoding=utf8"--><property name="username" value="root"/><property name="password" value="admin123"/></dataSource></environment>
</environments><!--引入映射文件--><mappers><package name="com.fckey.mapper"/></mappers>
</configuration>

书写测试类的时候,发现多了很多条件的查询。
在这里插入图片描述
测试类编写:

   private static SqlSession getSqlSession() throws IOException {/*如果是想自动的进行提交,而不需要手动的提交事务,可以在sqlSession()中传入true,即可开启自动提交功能*/// 加载核心配置文件InputStream is = Resources.getResourceAsStream("mybatis-config.xml");// 获取sqlsessionfactorybuilder对象SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();// 获取sqlsessionFactorySqlSessionFactory sqlSessionFactory = sqlSessionFactoryBuilder.build(is);// 获取sqlsessionSqlSession sqlSession = sqlSessionFactory.openSession(true);return sqlSession;}@org.junit.Testpublic void test() throws IOException {SqlSession sqlSession = getSqlSession();EmpMapper mapper = sqlSession.getMapper(EmpMapper.class);List<Emp> emps = mapper.selectByExample(null);System.out.println(emps);}

最后得到所有的对象信息:

在这里插入图片描述



http://www.ppmy.cn/news/83288.html

相关文章

使用 Docker 安装常用的服务

Docker 常见服务的安装 Docker 安装 MySQL【详细介绍&#xff0c;后续只会简单安装】 1.查看可用的 MySQL 版本 docker search mysql拉取 MySQL 镜像 docker pull mysql:latest查看本地镜像 docker images运行容器 注意使用 -p 来指定外面和容器里面的端口&#xff1b; -…

【多线程】线程的可见性

目录 一、什么是线程的可见性二、可见性问题示例2.1 代码2.2 截图 三、解决可见性问题3.1 volatile关键字3.2 synchronized关键字 四、用volatile关键字解决可见性问题示例4.1 代码4.2 截图 五、用synchronized关键字解决可见性问题示例5.1 代码5.2 截图 六、可见性与原子性 一…

放大镜-第14届蓝桥杯省赛Scratch中级组真题第3题

[导读]&#xff1a;超平老师的《Scratch蓝桥杯真题解析100讲》已经全部完成&#xff0c;后续会不定期解读蓝桥杯真题&#xff0c;这是Scratch蓝桥杯真题解析第138讲。 放大镜&#xff0c;本题是2023年5月7日举行的第14届蓝桥杯省赛Scratch图形化编程中级组编程第3题&#xff0…

Linux系统安装Redis

1.远程下载稳定版本 wget http://download.redis.io/releases/redis-6.0.7.tar.gz 编译 redis-6.x&#xff0c;要求 C11 编译器&#xff08;因为redis是用c写的&#xff09;&#xff0c;否则会遇到大量如下所示的错误&#xff1a; server.h:1051:5: 错误&#xff1a;expected…

音视频八股文(6)-- ffmpeg大体介绍和内存模型

播放器框架 常用音视频术语 • 容器&#xff0f;文件&#xff08;Conainer/File&#xff09;&#xff1a;即特定格式的多媒体文件&#xff0c; 比如mp4、flv、mkv等。 • 媒体流&#xff08;Stream&#xff09;&#xff1a;表示时间轴上的一段连续数据&#xff0c;如一 段声音…

整合Springboot+MybatisPlus+达梦数据库

1、安装Windows环境的达梦数据库可视化软件 这里不做安装介绍 安装步骤很简单&#xff0c;提供的软件也很全面&#xff0c;特别是数据库迁移工具&#xff0c;支持市面上许多主流的大型数据库&#xff0c;例如&#xff1a;Oracle、SQLServer、MySQL、DB2、PostgreSQL、Informix…

centos下编译ffmpeg+ libfdk_aac +x264

因为FFmpeg自带的AAC编码器已经废弃了AV_SAMPLE_FMT_S16格式PCM编码AAC,如果使用FFmpeg自带的AAC编码器,就需要做音频的重采样(AV_SAMPLE_FMT_S16重采样为:AV_SAMPLE_FMT_FLTP), 如果不想自己做重采样转换,可以使用libfdk-aac这库。 编译FFMPEG之前,先编译好libfdk-aac…

openldap介绍以及使用

参考文献&#xff1a;openldap介绍和使用 基本概念 官网&#xff1a;https://www.openldap.org 官方文档&#xff1a;https://www.openldap.org/doc LDAP是一个开放的&#xff0c;中立的&#xff0c;工业标准的应用协议&#xff0c;通过IP协议提供访问控制和维护分布式信息的…