侧边栏壁纸
博主头像
Z同学博主等级

工作磨平激情前,坚持技术的热忱。 欢迎光临Z同学的技术小站。 分享最新的互联网知识。

  • 累计撰写 283 篇文章
  • 累计创建 55 个标签
  • 累计收到 93 条评论

SpringBoot 开发-mybatis使用与配置

Z同学
2020-09-04 / 0 评论 / 0 点赞 / 664 阅读 / 6,288 字
温馨提示:
本文最后更新于 2022-03-28,若内容或图片失效,请留言反馈。部分素材来自网络,若不小心影响到您的利益,请联系我们删除。

前言

我们上一次 通过SpringBoot 搭建完WebServer了

SpringBoot创建 WebServer项目

那么我们一般api都会涉及到数据库的操作。

那么如何来实现jdbc的链接呢?

还记得我们创建项目时,选择的

JDBC API //这是是java 的JDBC 封装库,
MySQL Driver //这个是JDBC访问数据库时需要对应数据库的驱动。我们也加载了
MyBatis Framework // 这个MyBatis这个就是用来解决SQL 语言的注入等操作的。 让我们摆脱了每一个数据库查询都需要重写一遍SQL语言并调用的步骤

下面我们来使用它,自动生成SQL语言。

1.添加自动插件 Free MyBatis plugin。

img202111241643161

我们需要主动添加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 文档。
创建完毕后效果如图所示:

img202111241643623

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 驱动的路径怎么办?

img202111241644245

4.执行脚本

配置完GeneratorConfig 之后,我们需要主动去执行该脚本,来自动生成相关SQL代码和bean对象

image-20220328151631822

image-20220328151642530

mybatis-generator:generate -e

image-20220328151656912

完成之后, 这里就会添加一个maven的执行程序,选择这个,点击右侧的运行按钮,就可以了。

image-20220328151707990

5.执行编译,得到结果。

正常结果

出现BUILD SUCCESS 就代表执行成功了。

image-20220328151719687

代码结构文件如图所示;

image-20220328151732860

全部根据配置文件自动生成接口类及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之中输入的数据库名称错误,请检查你的数据库是否正确

image-20220328151744518

image-20220328151755392

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

image-20220328151807785

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 类的目录结构下。

image-20220328151818397

main 方法会遍历同一级目录下的。如果不是在同一级目录下,你就需要主动添加扫描的目录

@ComponentScan({"com.demp.service.dao 你需要手动开启扫描的目录"})

image-20220328151839959

7.完成api调用

image-20220328151828570

image-20220328151847939

到这里,我们就完成了api的开发,以及请求数据存储到MySQL的完整流程了。

而如果对于sql语法想进行修改,或者自动生成的不满足需求。可以手动在mappers.xml文件之中添加,然后在java 文件之中填写接口地址,就可以了。 更具体的可以参考MyBatis文档之中的各种标签说明。

想了解GeneratorConfig 的所有参数的配置意义,可以参考我的博客: GeneratorConfig 属性配置大全

0

评论区