mybatis 逆向工程实现与使用(后附Spring Boot最基本整合SSM配置)
前言
太久没用Spring Boot了,好像一个新手,报各种错误,逆向工程也搞半天。好累
下面的使用标题就是在yml配置mybatis的信息,最最基本的整合
实际上也就是yml和几个mybatis配置文件弄好就整合好了,很简单
逆向工程
能实现
1.导入maven依赖
注意mysql连接的版本,要和自己本地版本一致,不然会报无法连接数据库的错误
可以通过select version() from dual;查看自己mysql版本
<!-- https://mvnrepository.com/artifact/org.mybatis.generator/mybatis-generator-core -->
<dependency>
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator-core</artifactId>
<version>1.3.6</version>
</dependency>
<!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.15</version>
</dependency>
2.generatorConfig.xml文件
这应该是最最进本的xml文件了,放在resources下就行了。放哪都行,下一步就需要找到他的位置
前几行有个targetRuntime,若将后面的Simple去掉,则会生成Example类,代码会复杂很多。
<?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>
<context id="DB2Tables" targetRuntime="MyBatis3Simple">
<!-- toString -->
<plugin type="org.mybatis.generator.plugins.ToStringPlugin" />
<!-- 如果不加会在生成的内容中出现很多注释 -->
<commentGenerator>
<!-- 是否去除自动生成日期的注释 true:是 : false:否 -->
<property name="suppressDate" value="true"/>
<!-- 是否去除所有自动生成的注释 true:是 : false:否 -->
<property name="suppressAllComments" value="true"/>
</commentGenerator>
<jdbcConnection driverClass="com.mysql.cj.jdbc.Driver" connectionURL="jdbc:mysql://localhost:3306/dongyu?useSSL=false&useUnicode=true&serverTimezone=UTC&characterEncoding=UTF-8"
userId="root"
password="root">
</jdbcConnection>
<!--生成entity类存放位置-->
<javaModelGenerator targetPackage="com.dongyu.entity" targetProject=".\src\main\java">
<property name="enableSubPackages" value="true"/>
<property name="trimStrings" value="true"/>
</javaModelGenerator>
<!--生成映射文件存放位置-->
<sqlMapGenerator targetPackage="mybatis.mapper" targetProject=".\src\main\resources">
<property name="enableSubPackages" value="true"/>
</sqlMapGenerator>
<!--生成Dao类存放位置-->
<javaClientGenerator type="XMLMAPPER" targetPackage="com.dongyu.dao" targetProject=".\src\main\java">
<property name="enableSubPackages" value="true"/>
</javaClientGenerator>
<!-- 有几个表就写几个 表名与要生成的类名 -->
<table tableName="dy_user" domainObjectName="User" />
<table tableName="dy_word" domainObjectName="Word" />
</context>
</generatorConfiguration>
3.执行main方法
自己创建一个类,执行一下main方法就可以实现逆向工程了。
自己遇到的问题:当时执行new File()的时候会说找不到我的xml文件,所以在上一行加了一句String genCfg
public class Generator {
public static void main(String[] args) throws Exception {
List<String> warnings = new ArrayList<String>();
boolean overwrite = true;
String genCfg=Generator.class.getClassLoader().getResource("generatorConfig.xml").getPath();
File configFile = new File(genCfg);
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);
}
}
使用
使用的话就和自己写的mybatis一样用即可。可我自己也忘记了自己以前怎么配置的。。。而且Example类用不怎么来,还得学习
以下记录mybatis的配置问题:
1.yml文件
还是需要配的,逆向工程只是帮你创建好mapper等这些东西而已
spring:
datasource:
username: root
password: root
url: jdbc:mysql://localhost:3306/dongyu?useSSL=false&useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC
driver-class-name: com.mysql.cj.jdbc.Driver
mybatis:
config-location: classpath:mybatis/mybatis-config.xml
mapper-locations: classpath:mybatis/mapper/*.xml
mybatis-config.xml自己创建 空的就行,mapper-locations对应的就是逆向工程生成的mapper文件们
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
</configuration>
2.主方法头部加注解
@MapperScan("com.dongyu.dao")
再自己写一个Controller就行了。
在Spring Boot中只要额外配置一下Mybatis就行了,Spring和MVC都已经整合在Spring Boot中了
Mybatis需要的是 Mapper接口/mapper.xml/config.xml
然后在Spring Boot中需要在
- application.yml中配置数据库与mybatis的mapper.xml和config.xml信息。
那还剩下Mapper接口呢? - Mapper接口在主方法头上扫描一下就行了
- 最后一点,mapper.xml顶上namespace需要找到Mapper接口的位置,才能关联起来
(其实config.xml不写内容也是可以的,基本的信息还是得有)
为什么Test不能调用?
我其实浪费了好多时间在自己写的Test类中调用mapper,用的注解调用的。然后一直报错
我就以为controller中也不行
但controller中写,通过网址去访问时是可以的。
用Test类就会说bean有问题好像。
不懂。
沙雕了,在SpringBoot提供下的test里就可以了,自己随便写的一个类是不行的
反复执行逆向工程
有时候经常会因为数据库设计不好而修改数据库字段,有了逆向工程就很方便,可以直接生成最新的类。
但是mapper.xml不会被覆盖,而是内容会叠加,所以需要一种特别的方法:
mybatis:
config-location: classpath:mybatis/mybatis-config.xml
mapper-locations: classpath:mybatis/mapper/*.xml,classpath:mybatis/mapper/own/*.xml
看yml的最后一行,地址有两个,一个是mapper下的xml,一个是mapper/own下的xml。
看意思就知道own下面的是我自己添加的xml,而逆向工程配置中生成的路径是mapper下,所以并不会影响到我的own
所以只要每次要逆向工程时,先将mapper下的xml删除,再生成即可。
own并不会被影响
最后,own中的namespace对应着的是mapper接口,因为mapper接口在逆向工程时是会被覆盖的,所以mapper接口也得分开来
不要在同一个目录下即可,我也是放在一个own下的文件夹中,如下图:

Example类的使用
当删除掉配置中的Simple后,就会自动生成Example类,之后就可以通过Example类来进行数据库操作,不需要自己写sql语句了
但是,不支持连表查询
举Example类的例子:
UserExample ue = new UserExample();
UserExample.Criteria c1 = ue.createCriteria();
c1.andAvatarEqualTo(openId);
List<User> u = um.selectByExample(ue);
ue相当于是你sql查询时候的条件,最后将ue放在um的方法内,执行sql(um是UserMapper创建的对象)
1. um有很多方法,有的方法的形参需要Example类你就需要创建一个Example类放进去
2. 创建ue后,ue也有一些方法,就像是sql语句中的order by之类的
3. ue创建的对象c1,它就像是where语句后的内容,就像下一句的意思就是where avatar = openId,他会取avatar等于openId的数据
最后再提一下,um中的一些方法是有Selective例如um.updateByExampleSelective()
意思就是当你传一个对象进去,它会根据你对象中有的属性进行更改,没有的属性就不会更改。
如果去掉Selective的话,你必须得将所有属性都填上,不然就会报错。
MyBatis多表查询(通过类)
原本应该要写resultMapper标签吧,但我觉得类会简单些
两张表的连接如下,我想连上Word类与Recite类。
我自定义个CustomRecite类继承Word类,里面实则是Recite类,
然后xml中的resultType写这个CustomRecite类即可

浙公网安备 33010602011771号