mybatis 作为数据的 ORM 框架,在国内的应用市场还是非常可观的,当初刚开始工作时使用 spring + mybatis 进行开发,后来也使用过 hibernate, jdbctemplate, jooq,mybatisplus 等其他的一些框架,
就个人使用感触来讲 jooq 的使用姿势和写 sql 差不多,基本上可以会写 sql 的无需额外的培训,立马可以上手;
hibernate 最大的特点就是借助方法名来映射 sql 语句,非常有特点,但是当查询条件复杂一些的话,对小白而言就没有那么友好了;
而 jdbctemplate,这个在小项目,轻量的 db 操作中,用起来还是很爽的,非常灵活,但是也有一些点需要特别注意,比如 queryForObject,查不到数据时抛异常而不是返回 null;
至于 mybatis 以及衍生的 mybatis-plus,也就是接下来的主角了,它的特点如何,为什么受到国内大量开发者的追捧,将它作为 db 操作的第一 ORM 框架,让我们看完之后再说
接下来的 Mybatis 的项目演示,主要是在 SpringBoot 的环境下运行,底层的数据库采用 MySql,对应的版本信息如下
关于 SpringBoot 的项目创建过程省略,下面是核心的 pom 依赖
核心的依赖
mybatis-spring-boot-starter,至于版本选择,到 mvn 仓库中,找最新的
另外一个不可获取的就是 db 配置信息,
appliaction.yml
在本地数据库中,新增了一个表如下
接下来本文涉及到的 CURD 都是针对这张表来说的
接下来我们将从 0 到 1,实现基于 mybatis 进行 mysql 操作的全流程
经常使用 Mybatis 的小伙伴可能知道,操作一个 db,通常会伴随几个不可或缺的东西
mybatis 推荐的玩法是借助 xml 来写 sql,但是官方也提供了注解的方式,因此 xml 文件并不是必须的;后面会介绍注解的操作方式;本文将主要是传统的 xml 配套使用姿势
针对上面这张表,第一步定义实体类
MoneyPo
接下来是 Mapper 接口,
MoneyMapper如下
然后是 Mapper 接口对应的 xml 文件
MoneyMapper.xml
注意 xml 文件放在资源文件
resources下面,且 xml 文件的目录结构,与上面的 Mapper 接口的包路径保持完全一致。
前面的三步骤,将我们需要的实体类,接口对象,xml 文件都初始化完毕,接下来就是进入我们的 CURD 环节,实现数据库的增删改查,这里主要使用
insert标签
比如我们现在希望插入一条数据,首先需要做的就是在 Mapper 接口中定义一个方法
接着就是在 xml 文件中对应的 sql
注意上面的 xml 文件
#{},大括号里面填写变量名,上面用的是
po.name,po 为接口定义中的参数名,这个就表示使用 po 对象的 name 成员,作为 db 的 name 字段接下来就是重要知识点:
#{}之外,还可以使用
${},区别在于前面为参数参数占位,后面为字符串替换,因此存在 sql 注入的风险举例说明
针对上面这两个 sql,当
id = 1 or 1=1,对应的两个 sql 变成
除了上面的单挑插入,批量插入也是 ok 的,和前面的使用姿势差不多
对应的 sql 如下
对于 foreach 标签的说明,会放在后面的博文中专门进行介绍,这里简单理解为遍历即可
查询可以说是我们日常开发中最常见的情况了,这里先给出简单的查询 demo,至于更复杂的查询条件(如联表,子查询,条件查询等)在后面的博文中进行介绍
如根据主键进行查询,主要借助
select标签来实现
对应的 sql
重点关注下上面的实现,select 语句内容比较简单,但是有几个需要注意的点
include来引入,从而实现代码片段的复用result标签来指定两者的映射关系,以及类型(上面这个相信会始终伴随各位小伙伴的开发生涯)
更新主要借助
update标签,相比较上面的两个,它的知识点就比较少了
对应的 sql 如下
说明
@Param注解:主要用于指定参数名,在 xml 中可以使用内部定义的名字来作为参数变量;如果不加上这个注解,在 xml 中,参数变量则使用
param0,
param1来替代删除使用
delete标签
对应的 sql 如下
上面的 mapper 接口中定义了完整的 CURD,接下来就是使用这个 Mapper 接口来实现交互了,在 Spring 中,使用姿势就非常简单了,直接当一个 Spring Bean 对象注入到 service 类中即可
执行输出结果如下
相信各位小伙伴看到这里,搭建一个 mybatis 实现数据库的 CURD 的项目应该是问题不大了,本文的主要知识点如下
其中有一些知识点比较重要,本文只是抛出来了,有兴趣的小伙伴可以持续关注后续更新
下面这些知识点,后面会进行更详细的说明
foreach标签使用resultMap标签@Param注解${}, #{}sql标签一直想整理出一份完美的面试宝典,但是时间上一直腾不开,这套 一千多道面试题宝典,结合今年金三银四各种大厂面试题,以及 GitHub 上 star 数超 30K+ 的文档整理出来的,我上传以后,毫无意外的短短半个小时点赞量就达到了 13k,说实话还是有点不可思议的。
需要完整版的小伙伴,可以一键三连后, 点击这里!
内容涵盖:Java、MyBatis、ZooKeeper、Dubbo、Elasticsearch、Memcached、Redis、MySQL、Spring、SpringBoot、SpringCloud、RabbitMQ、Kafka、Linux等技术栈(485页)
内容涵盖:Java基础、JVM、高并发、多线程、分布式、设计模式、Spring全家桶、Java、MyBatis、ZooKeeper、Dubbo、Elasticsearch、Memcached、MongoDB、Redis、MySQL、RabbitMQ、Kafka、Linux、Netty、Tomcat、数据库、云计算等
由于篇幅限制,详解资料太全面,细节内容太多,所以只把部分知识点截图出来粗略的介绍,每个小节点里面都有更细化的内容!
需要完整版的小伙伴,可以一键三连后, 点击这里!
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/70000438/viewspace-2787036/ ,如需转载,请注明出处,否则将追究法律责任。