mybatis 入门教程

1.  mybatis 开启驼峰命名转换

<settings>

         <setting name="mapUnderscoreToCamecase" value="true">

</settings>

2.mybatis注解模式配置

     MyBatis 注解 SQL 中,最基本的就是@ Select 、@ Insert 、@ Update 和@ Delete四种

  @Select ({ ” select id, role name roleName, enabled, create_by createBy, create time createTime ” ” from sys_role ”, ” where id= #{id } ” })

SysRole selectByid(Long id) ;

 使用注解方式同样需要考虑表字段和 Java 属性字段映射的问题,

  1.使用sql语句的别名实现

  2.mapUnderscoreToCamecase在驼峰命名转化模式

  3.使用 resultMap 方式

    xml中的 resultMap 元素有 个对应的 Java 注解@ Results ,使用这个注解来实现属性 映射,新增 selectByid2 方法,代码如下  

@Results({

@Result(property = ” i d ”, column = ” id”, id = true) ,

@Result(property = ” roleName ”, column =”role name ”),

@Result(property =”enabled”, column = ” enabled”),

@Result(property = ” createBy”, column = ” create_by”),

@Result(property = ” createTime”, column = " create_time ”)

} )

@Select (”select id,rolename , enabled, createby , createtime from sys_role where id = #{id )”)

SysRole selectByid2(Long id);

这里的@Result 注解对应着 ML 文件中的<result >元素 ,而参数中写上 id = true 时就对应<id >元素。

使用@ Results 注解的时候,大家可能会担心, 是不是要在每一个方法上都这么写。在 MyBatis 3.3.0 及以前版本中,注解定义的@ Results 不能共用,使用很不方便,确实是要在每 个方法上都写 遍。但从 MyBatis 3.3. 版本开始,@ Results 注解增加了 id 属性,设 置了 id 属性后,就可以通过 id 属性引用同一个@Results 配置了 ,示例代码如下

@Results (id = ” roleResultMap”, value = {

@Result(property = ” id”, column = ” id”, id = true), //其他...

} )

如何引用这个@ Results 呢?新增一个 selectAll 方法,代码如下。

@ResultMap (”roleResultMap”)

@Select("select * from sys_role")

List<Role> selectAll();

使用@ResultMap 注解引用即可,注解的参数值就是上面代码中设置的 id 的值, 当配合 着使用 XML 方式的时候,还可以是 XML中 <resultMap >元素的 id 属性值

 

3.动态sql

     1.if用法

        if 标签有 个必填的属性 test, test 的属性值是一个符合 OGNL 要求的判断表达式,表 达式的结果可以是 tr ue fals ,除此之外所有的非 值都为 true ,只有 false 了方便理解,在表达式中 ,建议只用 true false 作为结果

         判断条件 property !=null 或property == null 适用于任何类型的宇段 ,用 于判断属性值是否为空。

        判断条件 property ==“ ”或property !=null仅适用于 String 类型的宇段 用于判断是否为空字符串

       and 和or 当有多个判断条件时,使用 and和 or 进行连接,嵌 套的判断可以使用小括号分组

       对字符串的判断和 Java 中的判断类似,首先需要 判断字段是否为 null ,然后再去判断是否为空(在 OGNL 表达式中 ,这   两个判断的顺序不会 影响判断的结果,也不会有空指针异常)。字符串的判断几乎都包含 null 和空的判断,这两个条件不是必须写在 起,可以根据实际业务决定是否需要空值判断

   2.choose用法

   if 标签提供了基本的条件判断,但是它无法实现 if. . . else if ... else ... 的逻辑,要想实现这样的逻辑,就需要用到 choose when otherwise 标签。 choose 元素 中包含 when和 otherwise 两个标签,一个 choose 中至少有 when ,有 0个或者1个 otherwise 。

   3.where用法

     if 条件都不满足的时候, where 元素中没有内容,所以在 SQL 中不会出现 where , 如果 if 条件满足, where 元素的内容就是以 and 开头 的条件, where 会自动去掉开头的 and ,这也能保证 where 条件正确 。这 种情况下生成的 SQL 更干净、更贴切,不会在任何情况下都有 where  1 = 1这样的条件

 4.set方法

  set 标签的作用:如果该标签包含的元素中有返回值,就插入 set :如果 set 后面的 字符串是 以逗号结尾的,就将这个逗号剔除 。set 标签的用法中 SQL 后面的逗号没有问题了,但是如果 set 元素中没有内容,照样 会出现 SQL 错误,所以为了避免错误产生,类似 id = #{id }这样必然存在的赋值仍然有保留 的必要。从这 点来看, set 标签并没有解决全部的问题,使用时仍然需要注意。

5.trim用法

      where set 标签 的功能都可以用 trim 标签来实现,并且在底层就是通过 TrimSqlNode实现的

      where 标签对应 trim 的实现如下:

      <trim prefix="where"  prefixOverrides=”and I or">

        。。。。

     </trim>

     set 标签对应 trim 实现如下:

   <trim prefix="set"  prefixOverrides=”,">

        。。。。

     </trim>

  trim 标签有如下属性:

  prefix :当 trim 元素内包含内容时,会给内容增加 prefix 指定的前缀。

  prefixOverrides :当 trim 元素内包含内容时,会把内容中匹配的前缀字符串去掉。

  suffix :当 trim 元素内包含内容时,会给内容增加 suffix 指定的后缀。

  suffixOverrides :当 trim 元素内包含内容时,会把内容中匹配的后缀字符串去掉。

5.where

collection 必填,值为要选代循环的属性名。这个属性值的情况有很多。 

item :变量名,值为从法代对象中取出的每一个值。

index :索引的属性名,在集合数组情况下值为当前索引值 当选代循环的对象是 Map 类型时,这个值为 Map key (键值)。 open:整个循环内容开头的字符串

close 整个循环内容结尾的字符串。

separator :每次循环的分隔符

 当结算类型为map时:

 当参数是 Map 类型的时候, foreach 标签的index 属性值对应的不是索引值,而是 Map 中的 key ,利用这个 key 可以实现动态 UPDATE

  <update id="update">

   update sys_role set

       <foreach  collection="_parameter"   item="val"  index="key" separator=",">

        ${key}=#{val}

       </foreach>

     where id= #{id}

</update>

 这里的 key 作为列 ,对应的值作为该列的值 通过 foreach 将需要更新的字段拼接在 SQL 语句中。

6.bind 标签

 bind 标签可以使用 OGNL 表达式创建一个变量井将其绑定到上下文中。

  <bind name="userNameLike" value=" ' %'+userName+ ' %' ">

   and userName like #{userNameLike}

  bind 标签的两个属性都是必选项, name 为绑定到上下文的变量名, value OGNL 达式。创建一个 bind 标签的变量后 就可以在下面直接使用,使用 bind 拼接字符串不仅可以避免因更换数据库而修改 SQL ,也能预防止SQL 注入。

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值