mybatis详解
创始人
2024-01-31 13:21:17
0

       学习到现在,作为我们的java萌新来说,是时候来学习一点偷懒的武林秘籍了,今天我给大家介绍的就是在无上秘宝--mybatis持久型框架.

学习一个东西之前,我们得首先了解他的前世今生...

前世:原是Apache的一个开源项目iBatis, 2010年6月这个项目由ApacheSoftware Foundation 迁移到了 Google Code,随着开发团队转投GoogleCode 旗下, iBatis3.x正式更名为MyBatis。

适用范围:

  • MyBatis 避免了几乎所有的 JDBC 代码手动设置参数以及手动获取结果集的操作。
  • MyBatis 可以使用 XML 或注解来配置和映射,将数据库中的记录映射成Java 的 POJO(Plain Old Java Objects,普通的 Java 对象),是一种 ORM(ORMObject Relational Mapping 对象关系映射)实现.

(映射(只能多对一,不能一对多)相信大家应该都不陌生,在数学中指的是一一对应的关系,单射  满射  同时满足这两点的是双射,比如下图所示)

 前面集合的元素与后面集合的元素有且只有一个与之相对应,一个只能对一个,这是单射,后面集合的元素都可以在前面集合中找到与之相对应的元素叫做满射,mybatis就是用了这个映射机制,对数据进行自动封装,可以减轻我们部分无聊且乏味的代码量.

那我们开始进入正题,怎么才能灵活运用这款神器呢?

MyBatis环境搭建:

1.导入MyBatis Jar包数据库驱动包


org.mybatis
mybatis
3.4.2

2.创建MyBatis全局配置文件














3.创建 sql 映射文件




定义 sql 语句

以下是我总结的一点干货:

1.将一个wab前端先封装成一个Maven项目
2.创建后端三层架构:Dao-数据库进行连接  model-创建实体对象  service-进行逻辑语言的封装
3.在pom.xml中配置所需要的Jar包(最基本的就是Sql,mybatis,junit)
4.在resources中创建一个mappers的包,然后在resources下创建一个mybatis-config.xml(配置mybatis全局配置文件),然后另外一个就是config-properties(定义连接数据库的路径)
5.在Util中创建一个关于mybitisUtil(官方提供)
6.在dao中写接口(里面写方法),在mappers中写接口的映射文件(SQL语句)

 Mybatis-Dao 层 Mapper 接口化开发
Mapper 接口开发方式只需要程序员编写 Mapper 接口,由 Mybatis 框架创建接
口的动态代理对象,使用 sqlsession.getMapper(接口.class);获得代理对象.
Mapper 接口开发需要遵循以下规范:
1、 Mapper.xml 文件中的 namespace 与 mapper 接口的类路径相同.
2、 Mapper 接口方法名和 Mapper.xml 中定义的每个 statement 的 id 相同.
3、 Mapper 接口方法的输入参数类型和 mapper.xml 中定义的每个 sql 的
parameterType 的类型相同.
4、 Mapper 接口方法的输出参数类型和 mapper.xml 中定义的每个 sql 的
resultType 的类型相同.

在mybatis中,我们可以清楚地直到运行的过程,这里有一个叫做日志的功能



参数传递
单个参数直接传递
User selectUsers(int id);
多个参数使用@Param(“id”)绑定
User selectUsers(@Param(“id”)int id,@Param(“name”)String name);


如果传入一个复杂的对象,就需要使用 parameterType 参数进行类型定义,例如:
void insertUser(User user);
 


insert into users (id, username, password)
values (#{id}, #{username}, #{password})

这的有个特别要强调的一个容易弄混的一个知识点

#{}和${}的区别

#{参数名}:传值时预编译,更安全,只用于向sql中传值
${参数名}:传值时直接将参数拼接上去的(不建议),只要用来动态的向sql中传列名,排序
字符串传递时,需要绑定处理

 对象映射

现在有一种情况,前面的集合中的一个元素又是另外一个新的集合,但是数据库返回的值并没有自动区分的能力,所以这种情况是会报错的,看下图

 从数据库同时传过来一个学生num和一个宿舍num,如果我们什么都不做,mybatis是无法区分这两个哪个是哪个的,所以,作为优雅的mybatis,自然也会有相应的处理方法

特殊处理定义 resultMap

    
//返回的是一个Student对象//Student的定义的成员变量--Admin//Student的定义的成员变量--Drom
  • resutlMap 的 id 属性是 resutlMap 的唯一标识,本例中定义为“useresultMap”
  •  resutlMap 的 id 属性是映射的 POJO 类
  •  id 标签映射主键,result 标签映射非主键
  •  property 设置 POJO 的属性名称,column 映射查询结果的列名称

 注解查询

@Insert: 插入 sql , 和 xml insert sql 语法完全一样
@Select: 查询 sql, 和 xml select sql 语法完全一样
@Update: 更新 sql, 和 xml update sql 语法完全一样
@Delete: 删除 sql, 和 xml delete sql 语法完全一样
@Param: 入参
@Results : 设置结果集合
@Result: 结果

//@Delete("SQL语句")//注解标签,用于比较简单的SQL查询语句,也用于单标查询,也可以进行映射Student findStudentById1(int id);

Mybatis 动态 SQL


update student//自动屏蔽最后一个逗号name=#{name},num=#{num},gender=#{gender}where id=#{id}delete from student#{id}//主要用在构建 in 条件中,它可以在 SQL 语句中进行迭代一个集合

特殊符号处理

xml和html都是标记语言,都是由标签组成,故在写SQL语句中有些符号不能直接写,比如:< > &

mybatis 缓存

/* mybatis 存在一级缓存和二级缓存
*   缓存是什么?  缓存的作用是减少数据库的压力,提高查询性能,缓存实现的原理是从数据库查询到的数据
*    使用完之后没有即使销毁,而是存放在内存中(缓存中),当再次需要获取高对象中,直接在内存中惊醒获取
*     不在数据库中执行SQl语句进行获取,因此提高了数据库的性能
*   一级缓存:会随着SqlSession关闭而清楚缓存
*   二级缓存:会创立一个有时间限制一个缓存,不会因为SqlSession关闭而清楚     */

一级缓存的生命周期:

 

 二级缓存的生命周期:

 但是二级缓存不像一级缓存一样,二级缓存需要我们手动的进行配置

第一步:启用二级缓存
在 SqlMapperConfig.xml 中启用二级缓存,如下代码所示,当
cacheEnabled 设置为 true 时启用二级缓存,设置为 false 时禁用二级缓存。

第二步:对象序列化
将所有的 POJO 类实现序列化接口 Java.io. Serializable。
第三步:配置映射文件
在 Mapper 映射文件中添加,表示此 mapper 开启二级缓存。
当 SqlSeesion 关闭时,会将数据存入到二级缓存.

 给大家分享一个mybatis的基本流程图:

 希望你我共进,日后顶峰相见!!!

相关内容

热门资讯

视频丨“新国补”政策落地 消费...   新年伊始,河南积极落实2026年国家“以旧换新”补贴新政,迅速释放政策红利,汽车、电子消费品等市...
一张保单,三份规划:中英福满佳... 很多人以为“一张保单管三样”是营销噱头,无非是把教育金、养老金打包成一个产品。但现实往往更复杂,从财...
我国纳米晶体结构解析技术与仪器...   近日,中国科学院广州地球化学研究所科研团队成功实现纳米晶体结构解析技术与仪器的国产自主化研发,这...
更加科学有效地把权力关进制度笼...   “党的自我革命重在治权,把权力关进制度笼子是新时代全面从严治党的一项重要任务。”在二十届中央纪委...
2025保险平台盘点:五大高性... 2026年1月,多家权威行业榜单中,慧择保险网均位列第一。这份成绩并非偶然,从财务与服务双维度拆解,...
臻爱无限2026:一款破局既往... 在这样的背景下,慧择与京东安联联合推出的“臻爱无限医疗保险(互联网2026版)”,以多项突破性设计填...
2025靠谱投保平台之选:慧择... 很多人以为,投保平台只是个“卖保险的渠道”,哪家便宜选哪家。但从风险管理的角度看,平台的核心价值远不...
连续第九年增长!一组图看我国2...   据海关统计,2025年我国外贸进出口达45.47万亿元,增长3.8%。其中,出口26.99万亿元...
AI动画视评:在“快时代”感受...   数九寒天,东北大地一片银白。4245次绿皮火车静静停靠在青沟子乘降所,列车长、乘务员逐一搀扶旅客...