前言
我们上一次 通过SpringBoot 搭建完WebServer了
那么我们一般api都会涉及到数据库的操作。
那么如何来实现jdbc的链接呢?
还记得我们创建项目时,选择的
JDBC API //这是是java 的JDBC 封装库,
MySQL Driver //这个是JDBC访问数据库时需要对应数据库的驱动。我们也加载了
MyBatis Framework // 这个MyBatis这个就是用来解决SQL 语言的注入等操作的。 让我们摆脱了每一个数据库查询都需要重写一遍SQL语言并调用的步骤
下面我们来使用它,自动生成SQL语言。
1.添加自动插件 Free MyBatis plugin。
我们需要主动添加Plugin插件。没有这个插件我们也可以自己写,但是很繁琐。这个插件可以自动帮我们生成。
2.pom.xml 文件之中配置plugins脚本
上一步只是添加了plugins 到IDEA之中,我们这一步需要将该plugins 加载到我们的Project的编译之中,让我们在当前项目中可以利用该Plugins。
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
<!--这是我们要添加的代码 mybatis generator 自动生成代码插件 -->
<plugin>
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator-maven-plugin</artifactId>
<version>1.3.5</version>
<configuration>
<!--配置文件的位置-->
<configurationFile>src/main/resources/generatorConfig.xml</configurationFile>
<overwrite>true</overwrite>
<verbose>true</verbose>
</configuration>
</plugin>
</plugins>
</build>
然后在configurationFile 标签标注的地方,创建generatorConfig.xml 文档。
创建完毕后效果如图所示:
3.编辑generatorConfig.xml 脚本。
该脚本利用了MyBatis的语法规则,进行自动创建mapper.xml 文档。而关于MyBatis 的语法有想深入了解,可以通过官网进行了解:https://mybatis.org/mybatis-3/zh/index.html
同时附上链接 Github
而针对该文件的所有字段,我也有一篇文章进行了详细介绍:MyBatista GeneratorConfig 属性配置大全 (zinyan.com)
<?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>
<!-- 数据库驱动:选择你的本地硬盘上面的数据库驱动包-->
<classPathEntry location="C:\Users\xx\.m2\repository\mysql\mysql-connector-java\8.0.19\mysql-connector-java-8.0.19.jar"/>
<context id="DB2Tables" targetRuntime="MyBatis3">
<commentGenerator>
<property name="suppressDate" value="true"/>
<!-- 是否去除自动生成的注释 true:是 : false:否 -->
<property name="suppressAllComments" value="true"/>
</commentGenerator>
<!--数据库链接URL,用户名、密码 -->
<jdbcConnection driverClass="com.mysql.cj.jdbc.Driver"
connectionURL="jdbc:mysql://172.0.0.0:3306/test?serverTimezone=GMT%2B8" userId="用户名"
password="密码">
</jdbcConnection>
<javaTypeResolver>
<property name="forceBigDecimals" value="false"/>
</javaTypeResolver>
<!-- 生成模型的包名和位置-->
<javaModelGenerator targetPackage="com.demo.entity 这个就是你的实体Bean 对象的存储路径" targetProject="src/main/java">
<property name="enableSubPackages" value="true"/>
<!-- 设置是否在getter方法中,对String类型字段调用trim()方法-->
<property name="trimStrings" value="true"/>
</javaModelGenerator>
<!-- 生成映射文件的包名和位置-->
<sqlMapGenerator targetPackage="main.resources.mappers" targetProject="src">
<!-- enableSubPackages:是否让schema作为包的后缀 -->
<property name="enableSubPackages" value="false"/>
</sqlMapGenerator>
<!-- 生成DAO的包名和位置-->
<javaClientGenerator type="XMLMAPPER" targetPackage="com.demo.dao 这个路径可以自己决定存储。"
targetProject="src/main/java">
<property name="mapper" value="true"/>
<property name="enableSubPackages" value="true"/>
</javaClientGenerator>
<!-- 要生成的表 tableName是数据库中的表名或视图名 domainObjectName是实体类名 就是你想生成的Bena对象的类名-->
<table tableName="login_info"
domainObjectName="LoginInfo"
enableCountByExample="false"
enableUpdateByExample="false"
enableDeleteByExample="false"
enableSelectByExample="false"
selectByExampleQueryId="false"/>
<table tableName="userinfo"
domainObjectName="UserInfo"
enableCountByExample="false"
enableUpdateByExample="false"
enableDeleteByExample="false"
enableSelectByExample="false"
selectByExampleQueryId="false"/>
</context>
</generatorConfiguration>
在下面 会针对相关配置属性我做一个介绍。可以往下看
如果不知道MySQL 驱动的路径怎么办?
4.执行脚本
配置完GeneratorConfig 之后,我们需要主动去执行该脚本,来自动生成相关SQL代码和bean对象
mybatis-generator:generate -e
完成之后, 这里就会添加一个maven的执行程序,选择这个,点击右侧的运行按钮,就可以了。
5.执行编译,得到结果。
正常结果
出现BUILD SUCCESS 就代表执行成功了。
代码结构文件如图所示;
全部根据配置文件自动生成接口类及bean实体对象。
之后就是调用相关方法实现数据库读写了。
错误情况
Failed to execute goal org.mybatis.generator:mybatis-generator-maven-plugin:1.3.5:generate (default-cli) on project demo: Unknown database 'xxx'
如果出现上面的错误,代表了在generatorConfig之中输入的数据库名称错误,请检查你的数据库是否正确
6.编辑相关API接口
创建Server
@Service
public class LoginServer {
@Autowired
LoginInfoMapper loginInfoMapper;
public void install(LoginInfo loginInfo){
loginInfoMapper.insert(loginInfo);
}
}
创建Controller
@RestController
@RequestMapping("/api")
public class APIController {
@Autowired
LoginServer loginServer;//登录服务器操作
/**
* post 请求
*
* @return
*/
@RequestMapping(value = "login", method = RequestMethod.POST)
public LoginInfo addLogin(@RequestParam String devicesId) {
LoginInfo deviceInfo = new LoginInfo();
deviceInfo.setDevicesId(devicesId);
deviceInfo.setNum(1);
deviceInfo.setAddtime(new Date(System.currentTimeMillis()));
loginServer.install(deviceInfo);
return deviceInfo;
}
}
错误情况:
1.
Consider defining a bean of type 'com.example.demp.server.LoginServer' in your configuration.
添加方式:
在application.yml文件之中添加下面代码
mybatis:
mapper-locations: classpath:mappers/*.xml
type-aliases-package: com.example.demp.dao
2.运行之后如果还出现下面错误
Description:
Field loginServer in com.example.demo.controller.APIController required a bean of type 'com.example.demo.server.LoginServer' that could not be found.
The injection point has the following annotations:
- @org.springframework.beans.factory.annotation.Autowired(required=true)
Action:
Consider defining a bean of type 'com.example.demo.server.LoginServer' in your configuration.
这是因为注解信息丢失造成的问题。
@Mapper
public interface LoginInfoMapper {
在生成的dao 路径下的Mapper类,添加上@Mapper 注解标签。
如果添加@Mapper 标签之后 还是报该错误,那是因为你的dao对象目录 没有在DempApplication 类的目录结构下。
main 方法会遍历同一级目录下的。如果不是在同一级目录下,你就需要主动添加扫描的目录
@ComponentScan({"com.demp.service.dao 你需要手动开启扫描的目录"})
7.完成api调用
到这里,我们就完成了api的开发,以及请求数据存储到MySQL的完整流程了。
而如果对于sql语法想进行修改,或者自动生成的不满足需求。可以手动在mappers.xml文件之中添加,然后在java 文件之中填写接口地址,就可以了。 更具体的可以参考MyBatis文档之中的各种标签说明。
想了解GeneratorConfig 的所有参数的配置意义,可以参考我的博客: GeneratorConfig 属性配置大全
评论区