java 没有像c# orm_ORM简介及Mybatis的另外一种用法

最近面试了一些后端开发同学,过程中发现一个现象,很多同学喜欢将一系列英语或者英语缩写描述的技术罗列在简历上,有些还有好多行,但是这里有个大问题,有些同学可能是无意,也有可能是不了解技术本身而错误的将一些不相干的技术放在一行,比如Springboot和Mysql,Dubbo和Redis,Maven和Git,这种一看就暴露了自身水平,诚然更多的技术栈罗列可以增加自己通过简历筛选的环节,但是如果不是真正的了解一下背后的技术,还是会挂在面试环节。

今天我们就跟大家一起学习一个技术名词ORM,这其实也是每一个后台开发同学所肯定要面对的技术。

一、名词解释

ORM是Object Relation Mapping的首字母缩写。Object指的是面向对象编程的对象或者一个类,Relation指的是关系型数据库里面的关系,Mapping指的是映射,连在一起的意思就是将关系型数据库跟代码里面的类做映射,好像还是没有说的很明白,举个例子,比如我们有张数据表,如下所示

eaf18f57e48e1853eae3087746221044.png

这张表其实就代表了一个类,如下Java代码所示

public class Student{ public String name; public int age; public int grade;}

数据库里面的每一行其实就代表了类的一个实例,如下关系所示

cdd3825fa2d960d299d1d4e5c546f0c8.png

对应的实例如下

Student studentA = new Student();studentA.name = "Lily";studentA.age = 10;studentA.grade = 3;Student studentB = new Student();studentB.name = "Jame";studentB.age = 11;studentB.grade = 4;

通过上面的对应关系,如果有一种技术能够像操作对象一样操作数据库,例如对每个实例的增删改就直接对应到数据库里面的增删改,那么我们的代码就会摆脱大量的try-catch语句,以及一系列的数据连接-关闭等复杂而冗余的操作,ORM正是为了解决这个问题而提出来的。

例如之前文章手把手教你使用Mybatis连接数据库里面所写的,当我们要操作数据的时候通过ORM技术暴露出来的API我们能够很简便的进行数据的插入操作,而完全不需要感知数据库的存在。

二、常见实现技术

ORM技术其实已经存在很多年了,早在2001年就提出来的Hibernate就是这一技术实现的先驱,并且还伴生出现了HQL。

在SpringBoot框架里面的JPA也是这一技术的实现,通过简单的or/and/not/等等暴露的java语句能够构造出复杂的sql查询。

也有Mybatis的前身iBatis,在将项目贡献给Apache基金会之后,作者又另起炉灶,发起了Mybatis(话说,这个"My"取的还有点意思)。

当然这里离不开我们AI客服系统会使用到的Mybatis,之前的文章中我们已经将后台通过Mybatis跟数据库打通了,今天简单介绍一下其另外一种用法。

三、Mybatis的另外一种用法

之前的方案中,我们通过在GenerateConfig文件中配置一个数据库,通过脚本创建了Model层和DAO层,然后就很方便的可以对数据库进行操作了。但是当我们的查询语句涉及复杂的Sql时,比如Inner Join其他表,而且还带了复杂的连接条件,其实这个时候直接书写SQL语句是一个快速的实现方案,这也是Mybatis优于Hibernate的地方,Mybatis保留了程序员对数据库操作的高灵活性。话不多说,给个实例。

构造一个StudentMapper.xml内容如下

<?xml version="1.0" encoding="UTF-8"?> select * from student 

对应的Model层就是上面Student类,对应的DAO层StudentMapper.java如下

public interface StudentMapper { List loadStudents();}

这样便可以在Java工程的其他地方通过StudentMapper加载student的数据了,当然sql里面的语句可以更加复杂,可以包含inner join之类的连表操作,也可以带参数,例如

<?xml version="1.0" encoding="UTF-8"?> select * from student where name=#{name} 

对应的DAO层为

public interface StudentMapper { List loadStudents(@Param("name") String name);}

这样就可以通过name去查询对应学生的信息了


需要Java技术资料的朋友可以私信我,免费分享

12330938025a4c90af027187725381a6.png
原文:https://zhuanlan.zhihu.com/p/75089152作者:白天不懂夜的黑来源:知乎
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值