Mybatis详解

2024-06-18 1523阅读

一、mybatis是什么?

1.mybatis是一个优秀的基于java的持久层框架,它内部封装了jdbc,使开发者只需要关注sql语句本身,而不需要花费精力去处理加载驱动、创建连接、创建statement等繁杂的过程。

2.mybatis通过xml或注解的方式将要执行的各种statement配置起来,并通过java对象和statement中sql的动态参数进行映射生成最终执行的sql语句。

二、mybatis快速入门

首先创建项目,导入依赖

Mybatis详解

创建完之后可以我们先写一个和数据库表对应的实体类,这里创建一个Phone类

这里的@Data注解省去了get、set方法的单独生成

Mybatis详解

接下来在resources文件夹下创建并编写映射文件mapper/PhoneMapper.xml,以下为简单的增删查改示例

Mybatis详解

在resources目录下继续新建Mybaits的核心配置文件并命名为”SqlMapConfig .xml”

Mybatis详解

这里引入了外部的属性文件 jdbc.properties。这个属性文件通常用来存储数据库连接相关的配置信息,比如数据库的URL、用户名、密码等。通过这样引入属性文件的方式能够在不修改源代码的情况下改变配置信息。

Mybatis详解

接下来就可以开始测试了

Mybatis详解

运行结果

Mybatis详解

以上就是mybatis入门的简要步骤,其实还可以通过Mapper代理的方式优化以下流程

创建一个PhoneMapper接口对应PhoneMapper.xml

Mybatis详解

修改PhoneMapper.xml中namespace为PhoneMapper接口

Mybatis详解

现在我们再来写测试类,先写一个初始化方法,用于初始化数据库连接和映射关系。

Mybatis详解

然后就可以开始写具体的测试方法了

Mybatis详解

运行结果

Mybatis详解

由此可见,通过mapper代理的方式简化了编程,提供了灵活性,并且通过初始化方法我们可以不用在每个测试类方法里都读取核心配置文件

三、mybatis增删查改详解

了解了快速入门的过程之后,我们来详细了解增删查改。

在xml中,#{参数名}为xml映射配置接受的参数,名称一定要与传过来的参数名一致,如果传的是整个实体类,那么具体某个参数要与实体类的某个字段名一致

1.增加

需指定参数类型parameterType,默认resultType为int

Mybatis详解

2.删除

需指定参数类型parameterType,默认resultType为int

Mybatis详解

3.查找

查找语句中,resultType/resultMap是必不可少的,必须要指定查找的结果

Mybatis详解

4.修改

需指定参数类型parameterType,默认resultType为int

Mybatis详解

四、mybatis结果映射与关联查询

当实体类里的属性名和数据库字段不一致,或者sql语句执行结果与其他实体有关联关系时,就需要通过resultMap来进行关系映射

1.一对一

 创建一个Brand实体类

Mybatis详解

修改Phone类如下,手机与品牌是一对一的关系

Mybatis详解

要实现查询某手机信息及其所属的品牌,相关sql语句与结果映射如下:

id标签是定义数据库主键与实体中简单数据类型属性的映射关系

result标签是定义非主键字段与实体中简单数据类型属性的映射关系

Mybatis详解

编写测试类查看结果

Mybatis详解

测试结果,可见品牌信息被包括在手机信息当中

Mybatis详解

2.一对多

Brand与Phone是一对多的关系,Brand实体类新增属性如下

Mybatis详解

依旧是先写一个接口

Mybatis详解

要实现查询某品牌信息及其名下的所有手机,相关sql语句与结果映射如下:

Mybatis详解

编写测试类查看结果

Mybatis详解

由查询结果可见,查询品牌信息的同时,把该品牌名下的所有手机也一起获取了

Mybatis详解

3.嵌套查询

除了关联查询,还可通过嵌套查询来实现,以下为一对一示例

首先编写一条把根据brand_id查询brand信息的sql

Mybatis详解

修改resultMap如下

Mybatis详解

编写总的查询语句

Mybatis详解

添加接口方法

Mybatis详解

测试类方法及其运行结果

Mybatis详解

五、动态SQL

动态SQL是MyBatis的一个强大特性,运用动态SQL语句标签方便我们在SQL中实现各种逻辑

常用标签如下:

:条件选择,如果满足条件,则加上标签之间的sql语句,没有就不加上

:相当于Java中的switch,用于条件选择

:简化SQL中的where

:解决动态更新语句

:灵活的去除多余的关键字

:迭代遍历一个集合

以下为简单SQL配置示例:

(1)where、if标签

标签能够智能的处理where、and、or,不必担心关键字导致的语法错误。Mybatis详解

(2)set、if标签

使用set标签与if标签组合,可以智能增减要修改的字段(if的作用),并智能判断逗号是否有必要存在(set的作用)

Mybatis详解

(3)将(2)的set与if组合替换成trim与if组合

prefix为前缀,suffixOverrides:后缀覆盖,可用于处理update语句中中多余的”,”

此外还有suffix:后缀,prefixOverrides为前缀覆盖,可用于智能的处理”and”,”or”关键字

Mybatis详解

(4)foreach标签

foreach标签可以在SQL语句中迭代一个集合,常用于构造sql中in条件。

Mybatis详解

总结:使用动态SQL可以实现很多功能:比如条件查询等,不过前提是了解每个标签的作用,然后根据自己想达成的效果灵活运用每个标签。

六、基于注解方式

除了使用xml的方式,还可以使用注解来实现

以下为查询语句简要示例,其他语句也是一样的方式

Mybatis详解

如果#{参数} 里的参数名和方法上的参数不一致,可以使用@Param注解 

Mybatis详解

1.一对一

接下来为使用注解方式实现多表查询,依旧是手机与品牌的一对一的关系

注解方式的mapper配置可以不用在配置mapper文件地址,而是只配置包的路径。

Mybatis详解

方式一:在要实现的接口方法上直接添加@Select注解和@Results

Mybatis详解

方式二:在Brand接口添加方法

Mybatis详解

修改PhoneMapper接口中selectAll方法

Mybatis详解

再次调用测试类中的方法即可获得一样的结果

2.一对多

品牌与手机的一对多关系

在PhoneMapper接口中添加如下方法

Mybatis详解

修改BrandMapper接口中selectAll方法

Mybatis详解

VPS购买请点击我

免责声明:我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理! 图片声明:本站部分配图来自人工智能系统AI生成,觅知网授权图片,PxHere摄影无版权图库和百度,360,搜狗等多加搜索引擎自动关键词搜索配图,如有侵权的图片,请第一时间联系我们,邮箱:ciyunidc@ciyunshuju.com。本站只作为美观性配图使用,无任何非法侵犯第三方意图,一切解释权归图片著作权方,本站不承担任何责任。如有恶意碰瓷者,必当奉陪到底严惩不贷!

目录[+]