Mybatis相关知识点

传统开发模式

JDBC 操作数据库弊端:

1.SQL语句自己手写,访问不同的表代码有雷同,枯燥

2.必须操作Connection、Statement ResultSet[为了实体封装]代码

3.SQL语句实际中很容易发生改变,代码与SQL语句耦合死

4.影响系统性能【用时创建、用后释放,Connection、Statement需要进行资源释放】

5.需要手动将查询出来的结果映射到实体中去

Mybatis相应解决措施:

1.将sql语句抽取到配置文件中

2.提供了一个SqlSesssion对象,内部封装了对JDBC的繁琐操作

3.引入数据源的概念,事先实例化数据源,初始化部分连接资源,用时去哪,用完放回

4.使用orm的思想解决了实体和数据库之间的映射关系

优点:使开发者不用关注繁杂的JDBC操作,专注于SQL代码本身

引入步骤

导入数据库驱动

导入mybatis驱动

创建mapper 文件(约束头、namespace resulteType)

编写核心配置文件 sqlMapConfig(核心文件约束头)

1.配置数据源环境

  1. 加载映射文件

<mappers>

<mapper resource = "">

</mappers>

SqlSession

概述:Mybatis中非常强大的类,里面有所有执行语句、提交回滚事务、获取映射器实例的方法

执行SqlSession的对象,内部封装了JDBC的繁琐操作

1.根据Resources对象获取核心配置文件

new SqlSessionFactoryBuilder().build(resourceAsStream )

2获取SqlSessionFactory对象,根据其获取SqlSession对象【执行sql语句的对象】

SqlSession对象是数据库操作的核心对象,也需要进行资源释放

Mybatis默认是事务不提交的,对表有影响操作需要用到事务

// mybatis 提交事务方法

sqlSession.commit()

sqlSession.close()

注:也可以创建一可以进行自动提交事务的sqlSession对象

SqlMapConfig重点配置

properties属性:加载外部properties文件

typeAliases:设置类型别名,设置后可以直接使用类的大小写替代全类名,可以通过包扫描的方式,将一个包下的所有类都配成实例

environments 重点

mappers 中 包含mapper,加载映射配置

mapper 加载方式有如下几种

1.使用相对于类路径的资源引用

2.url

3.映射器接口实现类的完全限定类名

  1. 包内的类

plugins 重点

Properties标签:

数据源的相关配置信息单独抽取成一个properties文件

<properties resource = "jdbc.properties" > </properties>

约束头作用

1.约束标签内容

  1. 起提示作用

别名

Integer ------》可以使用int代替

int 可以使用_int进行替代

动态SQL

根据相关条件进行查询时,标签体内为空,执行相关代码

<where > </where> 套在if外面 相当与where 1 = 1;

<if test = " ">

</If>

where 子标签有if 和forEach

<foreach collection = "list" open = "id in (" close = ")" item = "id" close separator> </foreach>

一对一,一对多,多对一的解决方案

MyBatis中在mapper配置文件中,将sql语句的返回值改为resultMap,并在Mapper中配置resultMap,注意Mybatis对常见的数据类型提供了映射,注意其大小写问题

resultMapd相关子标签

《association》 子标签 表示1

《collection》 表示多

相关推荐
m0_74823658几秒前
《Web 应用项目开发:从构思到上线的全过程》
服务器·前端·数据库
苏三说技术2 分钟前
Redis 性能优化的18招
数据库·redis·性能优化
Tttian62227 分钟前
基于Pycharm与数据库的新闻管理系统(2)Redis
数据库·redis·pycharm
J不A秃V头A34 分钟前
IntelliJ IDEA中设置激活的profile
java·intellij-idea
DARLING Zero two♡37 分钟前
【优选算法】Pointer-Slice:双指针的算法切片(下)
java·数据结构·c++·算法·leetcode
小池先生1 小时前
springboot启动不了 因一个spring-boot-starter-web底下的tomcat-embed-core依赖丢失
java·spring boot·后端
CodeClimb1 小时前
【华为OD-E卷-木板 100分(python、java、c++、js、c)】
java·javascript·c++·python·华为od
odng1 小时前
IDEA自己常用的几个快捷方式(自己的习惯)
java·ide·intellij-idea
CT随1 小时前
Redis内存碎片详解
java·开发语言
brrdg_sefg1 小时前
gitlab代码推送
java