mybatis笔记整理

MyBatis 是什么?

MyBatis 是一款一流的支持自定义SQL、存储过程和高级映射的持久化框架。MyBatis 几乎消除了所有的JDBC 代码,也基本不需要手工去设置参数和获取检索结果。MyBatis 能够使用简单的XML 格式或者注解进行来配置,能够映射基本数据元素、Map 接口和POJOs(普通java 对象)到数据库中的记录。

配置 springboot+mysql+mybatis

pom.xml导入依赖

配置application.yml,mapper-locations配置为mapper.xml所在的位置

SQL语句映射文件

SQL 映射XML 文件是所有sql语句放置的地方。需要定义一个workspace,一般定义为对应的接口类的路径

SQL 映射XML 文件一些初级的元素:
1. cache – 配置给定模式的缓存
2. cache-ref – 从别的模式中引用一个缓存
3. resultMap – 这是最复杂而却强大的一个元素了,它描述如何从结果集中加载对象
4. sql – 一个可以被其他语句复用的SQL 块
5. insert – 映射INSERT 语句
6. update – 映射UPDATE 语句
7. delete – 映射DELEETE 语句
8. select  -  映射SELECT语句

resultMap

属性说明

id属性 ,resultMap标签的标识。

type属性 ,返回值的全限定类名,或类型别名。

autoMapping属性 ,值范围true(默认值)|false, 设置是否启动自动映射功能,自动映射功能就是自动查找与字段名同名的属性名,并调用setter方法。而设置为false后,则需要在resultMap内明确注明映射关系才会调用对应的setter方法

若未设置resultMap,可以在sql 中重命名(as)字段与实体中的属性一致,

或者开启驼峰模式,我们一般在数据库中字段名使用 '_'连接,而在实体类中使用驼峰命名。但是这样查询之后使用的驼峰命名法的是映射不到实体类上的 。驼峰命名规则会先将数据库字段名中“_”去掉,然后将"_"后的首字母大写,生成新的字段名进行映射。

即: user_id   ——> userid   ——>   userId 

application.yml中配置      

基本作用: 建立SQL查询结果字段与实体属性的映射关系

constructor主要是用来配置构造方法,默认情况下mybatis会调用实体类的无参构造方法创建一个实体类,然后再给各个属性赋值,但是有的时候我们可能为实体类生成了有参的构造方法,并且也没有给该实体类生成无参的构造方法,这个时候如果不做特殊配置,resultMap在生成实体类的时候就会报错,因为它没有找到无参构造方法。这个时候mybatis

会报错解决方式很简单,就是在constructor节点中进行简单配置

association联合

联合元素用来处理“一对一”的关系。需要指定映射的Java实体类的属性,属性的javaType(通常MyBatis 自己会识别)。对应的数据库表的列名称。不同情况需要告诉MyBatis 如何加载一个联合。MyBatis 可以用两种方式加载:

select: 执行一个其它映射的SQL 语句返回一个Java实体类型。较灵活;

 

resultsMap: 使用一个嵌套的结果映射来处理通过join查询结果集,映射成Java实体类型。

需在association中添加resultMap(在xml文件中定义好的),新写sql(查询用户表left join部门表)

 

collection聚集

聚集元素用来处理“一对多”的关系。需要指定映射的Java实体类的属性,属性的javaType(一般为ArrayList);列表中对象的类型ofType(Java实体类);对应的数据库表的列名称;
不同情况需要告诉MyBatis 如何加载一个聚集。MyBatis 可以用两种方式加载:
1. select: 执行一个其它映射的SQL 语句返回一个Java实体类型。较灵活;
2. resultsMap: 使用一个嵌套的结果映射来处理通过join查询结果集,映射成Java实体类型

 

insert实例

update实例

delete实例

一个简单的delete:

Xml代码

<!-- 删除学生 -->  

<delete id="deleteStudent" parameterTypesql="StudentEntity">  

        DELETE FROM STUDENT_TBL WHERE STUDENT_ID = #{studentD}  

</delete> 

sql实例

 

select实例

parameter参数

上面很多地方已经用到了参数,比如查询、修改、删除的条件,插入,修改的数据等,MyBatis可以使用的基本数据类型和Java的复杂数据类型。基本数据类型,String,int,date等。但是使用基本数据类型,只能提供一个参数,所以需要使用Java实体类,或Map类型做参数类型。通过#{}可以直接得到其属性。

#{} 是以预编译的形式,直接将参数设置到sql语句中; 使用PreparedStatement的sql封装方法:设置了占位符为"?",可以有效地防止sql注入.

${}的作用: 取出的参数值会直接封装在sql语句中,不能防止sql注入,会有安全问题.

 

基本类型

注意事项,当处理大于,小于时候会报错

 

处理办法

顺便了解下<![CDATA[ ]]>

在使用mybatis 时我们sql是写在xml 映射文件中,如果写的sql中有一些特殊的字符的话,在解析xml文件的时候会被转义,但我们不希望他被转义,所以我们要使用<![CDATA[ ]]>来解决。

<![CDATA[   ]]> 是什么,这是XML语法。在CDATA内部的所有内容都会被解析器忽略。

如果文本包含了很多的"<"字符 <=和"&"字符——就象程序代码一样,那么最好把他们都放到CDATA部件中。

实体类参数

map参数与实体类参数相似

动态SQL语句

if

where

set

使用set+if标签修改后,如果某项为null则不进行更新,而是保持数据库原值

trim

1 prefix属性:在trim开始部分添加内容

2 suffix属性:在trim结束部分添加内容

3 prefixOverrides属性:去除trim开始部分的内容

4 suffixOverrides属性:去除trim结束部分的内容

choose(when,otherwise)

foreach

对于动态SQL 非常必须的,主是要迭代一个集合,通常是用于IN 条件。
List 实例将使用“list”做为键,数组实例以“array” 做为键。

List

数组

 

优点和缺点

与JDBC相比,减少了50%以上的代码量。

MyBatis是最简单的持久化框架,小巧并且简单易学。

MyBatis相当灵活,不会对应用程序或者数据库的现有设计强加任何影响,SQL写在XML里,从程序代码中彻底分离,降低耦合度,便于统一管理和优化,并可重用。

提供XML标签,支持编写动态SQL语句。

提供映射标签,支持对象与数据库的ORM字段关系映射。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值