发表于: 2020-06-24 21:54:30

1 1648


今天完成的事情:今天在完善小课堂,明天要开讲了,所有任务四进度没怎么做。
明天计划的事情:小课堂结束后做下任务四。
遇到的问题:代码运行的问题,自己解决了。
收获:贴下自己整理的小课堂资料吧。

大家好,我是IT修真院成都分院第18期的学员,一枚正直纯洁善良的java程序员,今天我要分享的是修真院官网java任务二,深度思考中的知识点——Mybatis有哪些常用标签?怎么使用标签来完成动态查询?

背景介绍

Mybatis是ORM(对象关系映射Object Relation Mapping)框架,支持定制化SQL,存储过程,高级映射。 原叫ibatis,在2010年迁移到google code,同年并改名MyBtis,2013年迁移到GItHub。
它的出现更是因为jdbc程序的缺陷

  • 大量配置信息硬编码
  • 大量无关业务处理的编码
  • 扩展优化不便

Mybatis也就有了对应的解决方案,xml配置和注解,POJO对象和数据库记录直接映射,比较完善的文档记录查询。mybatis的优势就是,学习成本较低,通过配置数据库交互的信息,动态SQL处理。
下面的内容不会介绍Mybatis的配置相关内容,直入Mybatis的XML映射文件常用标签和动态SQL语句。

知识剖析

一. XML映射的常用标签。
增删改查(insert,delete,update,select),SQL重用标签。

  1. select查询,查询的演示在下面的编码实战,以下是查询的常用参数解析
    id:select和insert,update,delete都有的参数,为当前语句命名,必须与Mapper接口中的方法同名
    parameterType:将会传入这条语句的参数的类全限定名或别名。可写可不写,因为Mybatis可以通过类型处理器(TypeHandler)推断传入的参数
    resultType:这条语句中返回结果的类全限定名或别名。resultMap可以代替它,两者只能存在一个。
    flushCache:清理缓存,默认false;
    useCache:缓存本条语句,select语句默认为true;
    statementType默认值:PREPARED,让MyBatis使用PreparedStatement 执行语句。等。
  2. insert,update,delete数据变更语句的参数差不多。放在一起说明。
    id,parameterType,flushCache,statementType和上面一样。不同的是:
    没有resultType,因为增删改不需要其他类型返回值。
    useGeneratedKeys:insert和update使用,获取数据库的自增主键,搭配keyProperty。
    keyProperty:指定能够唯一识别对象的属性
    3.SQL这个元素可以用来定义可重用的 SQL 代码片段,以便在其它语句中使用。

二. 动态SQL语句
if,choose (when, otherwise),trim (where, set),foreach。
1.if语句
常见用法<if test=" 条件"></if>加在映射语句的后面, test是判断的条件
2.choose(when,otherwise)语句
当有多个条件判断时,不想使用所有的,只想从多个中选一个使用,类似于java中的Switch语句。
<choose> <when test=" "></when> <when test=" "></when> ... <otherwise></otherwise> </choose>
3.where,trim,set语句
where常与if搭配,只在条件都是动态的情况下使用。
<where> <if test="" ></if> <if test=""></if> ...</where>
trim自定义元素,trim是更灵活的去除多余关键字的标签,以及增加或者替换某块代码。
(1)trim标签有四个属性prefix,prefixOverrides,suffix,suffixOverrides
(2)使用prefixsuffix时,表示在trim标签包裹的前面或者后面增加引号里的内容
(3)prefixOverridessuffixOverrides 表示删除或者说覆盖
这儿不理解的看下面的编码实战的案例
set动态更新语句,用在update中。test里是列名判断语句
update tb_name <set> <if test="tr_name !=null"> tr_name = #{trName}</if>...</set> where id=#{id}
4.foreach语句
常见使用场景是对集合进行遍历,批量插入、批量删除,批量查询等。

<foreach item="item" index="index" collection="list"  open="(" separator="," close=")">
   #{item}
  </foreach>

可以将任何可迭代对象(如 List、Set 等)、Map 对象或者数组对象作为集合参数传递给 foreach。当使用可迭代对象或者数组时,index 是当前迭代的序号,item 的值是本次迭代获取到的元素。当使用 Map 对象(或者 Map.Entry 对象的集合)时,index 是键,item 是值。
5.bind语句
bind 元素允许你在表达式以外创建一个变量,并将其绑定到当前的上下文。类似于java中定义一个成员变量,然后在方法中引用。下面定义模糊查询的条件为一个变量名pattern
<bind name="pattern" value="'%' + _parameter.getTitle() + '%'" />
SELECT * FROM tb_name WHERE title LIKE #{pattern}




返回列表 返回列表
评论

    分享到