1.前言

上一篇文章介绍了如何设计后端的Mysql数据库:Alex Wang:全栈开发踩坑之路3-MySql数据库设计,本文介绍如何用MyBatis实现后端服务。

本后端项目的Github地址(撰写中):apkkids/mymis_end

2.引入并配置MyBatis

在pom.xml中引入MyBatis的依赖项:

<dependency>

注意,在pom.xml中加入以下配置,解决idea不自动将xml配置文件拷贝到target目录中的问题。如果不加这个配置,会导致MyBatis的Mapper XML文档不自动拷贝,导致调试时代码执行失败。

<build>

在resource目录下添加配置文件mybatis-config.xml,该配置文件会开启MyBatis的调试log:

<?xml version="1.0" encoding="UTF-8" ?>

在application.properties中增加:

#mybatis
mybatis.config-location=classpath:/mybatis-config.xml

至此MyBatis就配置完成了。

3.代码结构

完整的实现数据库的CURD服务,需要编写实体类、Mapper接口、Mapper配置文件和服务类。

其中实体类存储了对应数据库表中记录的值,放在bean包中;

Mapper接口提供了对数据库进行操作的方法名,Mapper配置文件提供了Java和Mysql的对应配置,它们一起放在mapper包内,并且名字一致(除了后缀);

服务类调用了Mapper类中的方法,访问数据库,并对外提供访问接口,它们放在service包内。

另外,所需的单元测试代码放在test目录里。

3.1实体类

数据库中所有表,除了关联表外,每个表都对应一个实体类,编写方法比较简单,就是将表中所有字段都对应为一个实体Java类中的属性。为了便于调试,每个实体类还需要重载toString方法,重载toString()时可使用IntelliJ提供的generate... toString功能,生成的代码基本不需要改动。然后为每个属性生成Getter和Setter方法,这时也使用IntelliJ的generate... Getter and Setter功能。

字典表对应的实体类还要重载equals方法,用于比对两个字典项是否一致,此处也可以使用IntelliJ的generate...功能。

3.2Mapper接口与配置文件

从MyBatis3.0开始,支持使用Java来调用数据库访问方法,这个Java接口一般称之为Mapper接口,因为在Java接口上有@Mapper注解,此接口中,只需要声明方法即可,不需要实现此方法。若方法中包含参数,可以使用@Param来声明参数(例如@Param("id")),然后在XML配置文件中使用#{id}来指代这个参数。通过使用Mapper接口和相应的XML配置文件,就可以实现数据库的各种复杂操作。

MyBatis也支持使用注解来直接实现数据库访问,不需要XML配置文件,但是经过我的测试,这种方法对于一些复杂操作是无能为力的,因此还是使用XML加Mapper接口的方式为最佳

3.3服务类

其实直接使用Mapper接口就可以很方便的操作数据库,但是从程序的架构上来考虑,还是设计一个服务层比较合理,服务层中都是服务类。例如,可以将四个操作字典表的Mapper接口统一写在一个DictionaryService服务类中,一目了然。也可以将操作实体和关联表的Mapper接口放在一个服务类中。

服务类代码基本上就是调用Mapper,然后进行一些数据的校验工作。

3.4测试类

利用JUnit进行单元测试,可以面向每个服务类编写一系列单元测试代码,从而确保每个数据库操作方法都是正确的。测试类和服务类是一一对应的。

下面给出字典表nation的例子:

实体类:省略。

Mapper接口:

@Mapper

XML配置文件:

<?xml version="1.0" encoding="UTF-8" ?>

(4)服务类(作为DictionaryService的一部分)

@Service

(5)测试类(作为DictionaryServiceTest的一部分)

@RunWith

以上几个代码完成后,直接运行测试代码,通过运行日志,就可以看到Mybatis是如何操作数据库的。观察可知,最重要的部分实际上是XML配置文件,它是MyBatis用来操作数据的主要手段,SQL语句也是穿插写在其中的。利用XML配置文件,再复杂的SQL语句也可以实现。至于Mapper接口和服务类,都是配合XML配置文件,完成功能的。

4.关于数据类型的处理

数据库中的datetime对应Java的Date类,在XML配置文件中要写jdbcType=DATE;

数据库中的tinyint对应Java的Boolean类;

使用MyBatis时,在Java中永远要使用包装类型,例如Boolean而不是原生类型boolean,使用Long而不是long。这一点已经在知乎上有人专门讨论过了。

5.下一步工作

使用MyBatis将数据库的简单CRUD操作实现后,下一步工作就开始准备实现系统登录相关功能。另外,在进一步完善系统的过程中,可能还需要实现更加复杂的数据库操作,届时将回头继续增加数据库操作功能。

6.学习资料

《MyBatis从入门到精通》

《阿里巴巴Java开发手册》:https://juejin.im/entry/589c173b8d6d81006c7e9f70。

mybatis mapper.xml dtd_全栈开发踩坑之路4-用MyBatis实现服务相关推荐

  1. 《Spring Boot+Vue全栈开发实战》读书笔记

    写在前面 嗯,回家处理一些事,所以离职了,之前的公司用开源技术封装了一套自己的低代码平台,所以之前学的spring Boot之类的东西都忘了很多,蹭回家的闲暇时间复习下. 笔记整体以 Spring B ...

  2. 全栈开发实战 | SSM框架整合完整教程

    "一个人最好的状态:梦想藏在心里,行动落于腿脚." 目录 1.前言 2.基本概念 2.1 MyBatis 2.2 Spring 2.3 SpringMVC 3.开发环境搭建 3.1 ...

  3. ehcache springboot_阿里内部进阶学习SpringBoot+Vue全栈开发实战文档

    前言 Spring 作为一个轻量级的容器,在JavaEE开发中得到了广泛的应用,但是Spring 的配置烦琐臃肿,在和各种第三方框架进行整合时代码量都非常大,并且整合的代码大多是重复的,为了使开发者能 ...

  4. 《SpringBoot+vue全栈开发实战项目》笔记

    前言 Spring 作为一个轻量级的容器,在JavaEE开发中得到了广泛的应用,但是Spring 的配置繁琐臃肿,在和各种第三方框架进行整合时代码量都非常大,并且整合的代码大多是重复的,为了使开发者能 ...

  5. SpringBoot+vue全栈开发实战笔记太香了

    Spring 作为一个轻量级的容器,在JavaEE开发中得到了广泛的应用,但是Spring 的配置繁琐臃肿,在和各种第三方框架进行整合时代码量都非常大,并且整合的代码大多是重复的,为了使开发者能够快速 ...

  6. 扶贫干部拍胸脯认证,AI开发者上手零门槛,百度打造 “云智一体”全栈开发杀手锏...

    "我可以拍着胸脯说识别准确率很高."扶贫干部刘乐这样评价他在使用百度EasyDL平台助力扶贫的效果,他是陕西省汉中市扶贫信息中心副主任,也是一名热爱编程的程序员. 在近期百度智能云 ...

  7. Spring Boot 专栏全栈开发实战

    2020 年 11 月 12 日,Spring 官方发布了 Spring Boot 2.4.0 GA 的公告,链接为 Spring Boot 2.4.0 available now.为了让大家能够学习 ...

  8. SAP新一代全栈开发工具:SAP Business Application Studio

    作为SAP从业者,我们能够清楚地感受到这些年SAP技术进化的趋势. SAP前端开发技术的进化方向,从SAP GUI,到能在浏览器里运行的ABAP Webdynpro / WebClient UI,再到 ...

  9. python全栈开发中级班全程笔记(第二模块、第四章)(常用模块导入)

    python全栈开发笔记第二模块 第四章 :常用模块(第二部分)     一.os 模块的 详解 1.os.getcwd()    :得到当前工作目录,即当前python解释器所在目录路径 impor ...

最新文章

  1. 配置.net 3.0开发环境
  2. python类继承实例
  3. Java未赋值变量的默认初始值
  4. python mysqldb cursor_python中MySQLdb模块用法实例
  5. win7卸载打印机驱动
  6. 【数字图像处理】图像内插“双线性内插法 Bilinear interpolation”代码演示(以像素中心点确定像素位置)(图像放大缩小)具有低通滤波性质,使高频分量受损,图像轮廓可能会有一点模糊
  7. html表单赋值提交,jQuery自动给表单赋值
  8. leetcode 113. 路径总和 II(Path Sum II)
  9. 查看linux IO地址范围
  10. 剑指offer——面试题64:数据流中的中位数
  11. VS2019以及MFC的安装(详细)
  12. php有没有能无限遍历,php无限遍历目录代码
  13. mustache模板引擎
  14. 西门子 dp通讯测试软件,西门子 PLC DP通讯
  15. MTK 刷机操作说明v2.0(单路)
  16. html浮动垂直居中对齐,css如何设置垂直居中对齐?
  17. android-x86 地图,android 手机客户端百度地图 x86的jar包需要吗
  18. 接口测试常用文档模板介绍
  19. 一文了解 NextJS 并对性能优化做出最佳实践
  20. nginx设置IP、文件目录、请求头白名单

热门文章

  1. 2020新款笔记本送一台!4核+8G+512固态
  2. GAN版马里奥创作家来了:一个样本即可训练,生成关卡要素丰富 | 开源
  3. 女友让我破解植物大战僵尸!我干脆撸了一款一样的....翻身舔狗把歌唱呀
  4. 分布式任务调度系统V1
  5. pandas数据清洗(缺失值、异常值和重复值处理)
  6. Numpy的基本操作
  7. 爬虫之数据提取jsonpath模块的使用场景和使用方法
  8. Java 读写Properties配置文件
  9. 《设计模式 系列》- 面向对象六大原则
  10. linux下gdb所有实用方法