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

mybatis xml映射文件 标签最全详解

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

mybatis xml映射文件 标签最全详解

一、定义SQL语句 (1)select 标签的使用

属性介绍:

属性简介
id此命名空间中可用于引用此语句的唯一标识符。
parameterType将传递到此语句中的参数的完全限定类名称或别名。该属性是可选的,因为 MyBatis 可以计算 TypeHandler 使用的传递给语句的实际参数。默认为unset。
parameterMap这是一种不推荐使用的引用外部parameterMap. 使用内联参数映射和
resultType将从该语句返回的预期类型的​​完全限定类名或别名。请注意,在集合的情况下,这应该是集合包含的类型,而不是集合本身的类型。使用resultType或者resultMap,而不是两者。
resultMap对外部的命名引用resultMap。结果映射是 MyBatis 最强大的特性,对它们有一个很好的理解,很多棘手的映射案例都可以解决。使用resultMap或者resultType,而不是两者。
flushCache将此设置为 true 将导致在调用此语句时刷新本地和二级缓存。默认值:false用于选择语句。
useCache将此设置为 true 将导致此语句的结果缓存在二级缓存中。默认值: true用于选择语句。
timeout这将设置驱动程序在抛出异常之前等待数据库从请求返回的秒数。默认为unset(依赖于驱动程序)。
fetchSize这是一个驱动程序提示,它将尝试使驱动程序以与此设置大小相等的行编号批量返回结果。默认为unset(依赖于驱动程序)。
statementType任何一个STATEMENT,PREPARED或CALLABLE。这会导致 MyBatis分别使用Statement, PreparedStatement或CallableStatement。默认值:PREPARED。
resultSetType任何一项FORWARD_ONLY、 SCROLL_SENSITIVE、 SCROLL_INSENSITIVE、 DEFAULT(与未设置相同)。默认为unset(依赖于驱动程序)。
databaseId如果有配置的 databaseIdProvider,MyBatis 将加载所有没有databaseId 属性或与databaseId当前匹配的语句。如果 case 相同的语句,如果发现有和没有databaseId后者,将被丢弃。
resultOrdered这仅适用于嵌套结果选择语句:如果这是真的,则假定嵌套结果被包含或组合在一起,这样当返回新的主结果行时,将不再引用前一个结果行。这允许填充嵌套结果更加内存友好。默认值: false。
resultSets这仅适用于多个结果集。它列出了语句将返回的结果集,并为每个结果集命名。名称以逗号分隔。

例子:


  SELECT ID, Name, Age FROM TStudent

这个就不过多说明了

(2)高级结果映射

MyBatis 创建时的一个思想是:数据库不可能永远是你所想或所需的那个样子。 我们希望每个数据库都具备良好的第三范式或 BCNF 范式,可惜它们并不都是那样。 如果能有一种数据库映射模式,完美适配所有的应用程序,那就太好了,但可惜也没有。 而 ResultMap 就是 MyBatis 对这个问题的答案。

比如,我们如何映射下面这个语句?

     
    SELECT * from STUDENT_TBL ST       
WHERe ST.STUDENT_NAME LIKE CONCAt(CONCAt('%', #{studentName}),'%')      
 

但是此时如果studentName是null或空字符串,此语句很可能报错或查询结果为空。此时我们使用if动态sql语句先进行判断,如果值为null或等于空字符串,我们就不进行此条件的判断。

修改为:

     
    SELECT * from STUDENT_TBL ST      
         
             
                 
                    ST.STUDENT_NAME LIKE CONCAt(CONCAt('%', #{studentName}),'%')      
                 
                 
                    AND ST.STUDENT_SEX = #{studentSex}      
                 
                 
                AND ST.STUDENT_BIRTHDAY = #{studentBirthday}      
                 
                 
                AND ST.CLASS_ID = #{classEntity.classID}      
                 
                 
                      
                 
             
         
   
四、格式化输出 (1)where

当if标签较多时,这样的组合可能会导致错误。例如,like姓名,等于指定性别等:

     
     
    SELECT * from STUDENT_TBL ST      
         
             
            ST.STUDENT_NAME LIKE CONCAt(CONCAt('%', #{studentName}),'%')      
             
             
            AND ST.STUDENT_SEX = #{studentSex}      
             
         
   
(2)set

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

     
     
    UPDATE STUDENT_TBL      
       SET STUDENT_TBL.STUDENT_NAME = #{studentName},      
           STUDENT_TBL.STUDENT_SEX = #{studentSex},      
           STUDENT_TBL.STUDENT_BIRTHDAY = #{studentBirthday},      
           STUDENT_TBL.CLASS_ID = #{classEntity.classID}      
     WHERe STUDENT_TBL.STUDENT_ID = #{studentID};      
     

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

     
     
    UPDATE STUDENT_TBL      
         
             
            STUDENT_TBL.STUDENT_NAME = #{studentName},      
             
             
            STUDENT_TBL.STUDENT_SEX = #{studentSex},      
             
             
            STUDENT_TBL.STUDENT_BIRTHDAY = #{studentBirthday},      
             
             
            STUDENT_TBL.CLASS_ID = #{classEntity.classID}      
             
         
    WHERe STUDENT_TBL.STUDENT_ID = #{studentID};      

(3)trim

trim是更灵活的去处多余关键字的标签,他可以实践where和set的效果。

where例子的等效trim语句:

     

	select * from tb_user 

同时,article类对应的articleMapper.xml这样写:


	
	
	



	select * from tb_user 

同时,article类对应的articleMapper.xml这样写:


	
	
	



  select
    ,
    
  from some_table t1
    cross join some_table t2

也可以在 include 元素的 refid 属性或内部语句中使用属性值,例如:


  ${prefix}Table



  from
    



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

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

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