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

aae2e8e1d55ee1441df1de47ccb1cfcc.png

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。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值