栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Mybatis中Mapper标签总结大全

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Mybatis中Mapper标签总结大全

一、标签分类

定义SQL语句

  • insert
  • delete
  • update
  • select

配置关联关系

  • collection
  • association

配置java对象属性与查询结果集中列名的对应关系

  • resultMap

控制动态SQL拼接

  • foreach
  • if
  • choose

格式化输出

  • where
  • set
  • trim

定义常量

  • sql

其他

  • include
二、标签总结
1. 基础SQL标签

1.1 查询select

标签属性

  • id 唯一的名称,对应dao中mapper的接口名称
  • paramterType 定义传入的参数类型
  • resultType  返回数据类型对应实体类
  • resultMap 外部 resultMap 的命名引用。结果集的映射是 MyBatis 最强大的特性,对其有一个很好的理解的话,许多复杂映射的情形都能迎刃而解。使用 resultMap 或 resultType,但不能同时使用
  • flushCache 将其设置为 true,任何时候只要语句被调用,都会导致本地缓存和二级缓存都会被清空,默认值:false
  • useCache 将其设置为 true,将会导致本条语句的结果被二级缓存,默认值:对 select 元素为 true
  • timeout 这个设置是在抛出异常之前,驱动程序等待数据库返回请求结果的秒数。默认值为 unset(依赖驱动)
  • fetchSize 这是尝试影响驱动程序每次批量返回的结果行数和这个设置值相等。默认值为 unset(依赖驱动)。
  • statementType  STATEMENT,PREPARED 或 CALLABLE 的一个。这会让 MyBatis 分别使用 Statement,PreparedStatement 或 CallableStatement,默认值:PREPARED。
  • resultSetType  FORWARD_ONLY,SCROLL_SENSITIVE 或 SCROLL_INSENSITIVE 中的一个,默认值为 unset (依赖驱动)。
  • databaseId 如果配置了 databaseIdProvider,MyBatis 会加载所有的不带 databaseId 或匹配当前 databaseId 的语句;如果带或者不带的语句都有,则不带的会被忽略。
  • resultOrdered 这个设置仅针对嵌套结果 select 语句适用:如果为true,就是假设包含了嵌套结果集或是分组了,这样的话当返回一个主结果行的时候,就不会发生有对前面结果集的引用的情况。这就使得在获取嵌套的结果集的时候不至导致内存不够用。默认值:false。
  • resultSets 这个设置仅对多结果集的情况适用,它将列出语句执行后返回的结果集并每个结果集给一个名称,名称是逗号分隔的。
 
 List selectUsers(@Param("cond")Map map);

 
 select 
 from user

1.3.3 if 标签

基本都是用来判断值是否为空,注意Integer的判断,mybatis会默认把0变成 ‘'







1.3.4 别名

经常使用的类型可以定义别名,方便使用,mybatis也注册了很多别名方便我们使用,详情见底部附录


  
2. collection与association标签

collection与association的属性一样,都是用于resultMap返回关联映射使用,collection关联的是集合,而association是关联单个对象

标签属性

  • property resultMap返回实体类中字段和result标签中的property一样
  • column 数据库的列名或者列标签别名,是关联查询往下一个语句传送值。注意: 在处理组合键时,您可以使用column=“{prop1=col1,prop2=col2}”这样的语法,设置多个列名传入到嵌套查询语句。这就会把prop1和prop2设置到目标嵌套选择语句的参数对象中。
  • javaType 一般为ArrayList或是java.util.List
  • ofType java的实体类,对应数据库表的列名称,即关联查询select对应返回的类
  • select 执行一个其他映射的sql语句返回一个java实体类型

public class Question {
 
 private Long id; //问题id

 private String question; //问题
 
 private Integer questionType; //问题类型
 
 private List answerList; //问题选项集合
 
 //Getter和Setter省略
}


public class QuestionAnswer {
 
 private Long id; //选项id
 
 private Long questionId; //问题id

 private String answer; //选项
 
 //Getter和Setter省略
}


3. resultMap标签

resultMap属性

  • id  唯一标识
  • type  返回类型
  • extends  继承别的resultMap,可选

关联其他标签

  • id 设置主键使用,使用此标签配置映射关系(可能不止一个)
  • result 一般属性的配置映射关系,一般不止一个
  • association 关联一个对象使用
  • collection 关联一个集合使用


 
 
 
 




 select a.id, a.answer from question_answer a where a.question_id = #{id}
4. foreach标签

foreach属性

  • collection 循环的集合。传的是集合为list,数组为array, 如果是map为java.util.HashMap
  • item 循环的key
  • index 循环的下表顺序
  • open 循环的开头
  • close 循环结束
  • separator 循环的分隔符
id, question_id, answer



 insert into question_answer (  ) 
 select question_answer_seq.NEXTVAL, A.* from (
  
   select #{item.questionId}, #{item.answer} from dual
  
 ) A 




 insert into question_answer (  ) 
 values 
  
   #{item.id}, #{item.questionId}, #{item.answer}
  
5. where标签

where用来去掉多条件查询时,开头多余的and

 
  
  select  from user u
  
   
   
    and u.id = #{id}
   
   
    and u.name = #{name}
   
  
 
6. set标签

set是mybatis提供的一个智能标记,当在update语句中使用if标签时,如果前面的if没有执行,则或导致逗号多余错误。使用set标签可以将动态的配置SET 关键字,和剔除追加到条件末尾的任何不相关的逗号。
没有使用if标签时,如果有一个参数为null,都会导致错误,如下示例:

 
  update user
  
   
    username = #{username},
   
   
    sex = #{sex},
   
    
    birthday = #{birthday},
    
   
    address = #{address},
   
   
    last_modified_by = #{lastModifiedBy},
    last_modified_date = SYSDATE,
   
  
  
   id = #{id}
  
 
7. trim标签

trim标记是一个格式化的标记,可以完成set或者是where标记的功能

标签属性

  • prefix、suffix 表示再trim标签包裹部分的前面或后面添加内容(注意:是没有prefixOverrides,suffixOverrides的情况下)
  • prefixOverrides,suffixOverrides 表示覆盖内容,如果只有这两个属性表示删除内容

 update user
  
  
   
    name= #{username},
   

   
    password= #{password},
   

  
  
   id = #{id}
  
 
8. choose、when、otherwise标签

有时候我们并不想应用所有的条件,而只是想从多个选项中选择一个。MyBatis提供了choose 元素,按顺序判断when中的条件出否成立,如果有一个成立,则choose结束。当choose中所有when的条件都不满则时,则执行 otherwise中的sql。类似于Java 的switch 语句,choose为switch,when为case,otherwise则为default。if是与(and)的关系,而choose是或(or)的关系

 

附Mybatis已经注册好的别名表

别名 映射类型
_byte byte
_long long
_short short
_int int
_integer int
_double double
_float float
_boolean boolean
string String
byte Byte
long Long
short Short
int Integer
integer Integer
double Double
float Float
boolean Boolean
date Date
decimal BigDecimal
bigdecimal BigDecimal
map Map
hashmap HashMap
list list
arraylist ArrayList
collection Collection
iterator Iterator

二、写在后面

在网上看了很多标签的解释,但不是很全,我就自己总结了一份,搭配示例更好理解标签的含义,如有什么遗漏或是错误还望多多发言补充,我会继续完善。

注: 关于参数指定jdbcType,是因为当传参为null时候,mybatis无法自动判断类型,就必须要显示指定它的类型,多用于insert中 

到此这篇关于Mybatis中Mapper标签总结大全的文章就介绍到这了,更多相关Mybatis Mapper标签内容请搜索考高分网以前的文章或继续浏览下面的相关文章希望大家以后多多支持考高分网!

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/133744.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号