mybatis常用注解(绝对经典),在线学习linux

delete from User where id = #{id}

二、动态sql标签


1、if

<select id=“findUserByName”

resultType=“User”>

SELECT * FROM User

WHERE valid = 1

AND name like #{name}

2、choose (when, otherwise)

<select id=“findUser”

resultType=“User”>

SELECT * FROM User WHERE age = 26

AND name like #{name}

AND sex like #{sex}

AND valid = 1

3、trim (where, set)

//prefixOverrides 属性会忽略通过管道分隔的文本序列(注意此例中的空格也是必要的)。它的作用是移除所有指定在 prefixOverrides 属性中的内容,并且插入 prefix 属性中指定的内容。

//set 元素会动态前置 SET 关键字,同时也会删掉无关的逗号

4、foreach

//collection=“要遍历的集合”

//item = “可以在元素体内使用的集合项”

//index = “索引”

//open = “开始字符串”

//separator = “分隔符”

//close = “结束字符串”

SELECT *

FROM User

WHERE ID in

<foreach item=“item” index=“index” collection=“list”

open="(" separator="," close=")">

#{item}

5、bind

//bind可以创建一个变量并将其绑定到上下文

SELECT * FROM User

WHERE name LIKE #{pattern}

6、xml中的timestamp比较

第一种写法:

原符号 < <= > >= & ’ "

替换符号 < <= > >= & ' "

例如:sql如下:

create_date_time >= #{startTime} and create_date_time <= #{endTime}

第二种写法:

大于等于

<![CDATA[ >= ]]>

小于等于

<![CDATA[ <= ]]>

例如:sql如下:

create_date_time <![CDATA[ >= ]]> #{startTime} and create_date_time <![CDATA[ <= ]]> #{endTime}

<select id=“getUser”

resultType=“java.lang.String” >

select name from user

where birthday < TO_TIMESTAMP(#{start}, ‘yyyy-mm-dd hh24:mi:ss’)

and birthday >= TO_TIMESTAMP(#{end}, ‘yyyy-mm-dd hh24:mi:ss’) order by start desc LIMIT 1;

7、@Param

@Param是MyBatis所提供的(org.apache.ibatis.annotations.Param),作为Dao层的注解,作用是用于传递参数,从而可以与SQL中的的字段名相对应,一般在2=<参数数<=5时使用最佳。

(1)原始的方法

当只有一个参数时,没什么好说的,传进去一个值也只有一个参数可以匹配。当存在多个参数时,传进去的值就区分不开了,这时可以考虑用Map,例如接口

public List findRoleByMap(Map<String, Object> parameter);

SELECT id,name FROM t_role

WHERE roleName=#{roleName}

AND note=#{note}

(2) 使用@Param

很明显上面的缺点就在于可读性差,每次必须阅读他的键,才能明白其中的作用,并且不能限定其传递的数据类型,下面是使用@Param的情况,需要将接口改为

public List findRoleByAnnotation(@Param(“roleName”) String roleName, @Param(“note”) String note);

这样我们就可以直接传入对应的值了。

当然也可以使用Java Bean来传递多个参数,定义一个POJO

public class RoleParam {

private String roleName;

private String note;

/getter和setter/

}

此时接口就变为

public List findRoleByBean(RoleParam role);

这样对应的xml文件与1处的区别就在于id和parameterType发生了变化,id对应的方法和parameterType对应该类的权限定名。

而使用更多的场景可能是这样的,对应多个POJO

public List findRoleByMix(@Param(“roleP”) RoleParam role, @Param(“permissionP”) PermissionParam permission);

这样就可以进行如下映射

SELECT id,name FROM t_role

WHERE roleName=#{roleP.roleName}

AND note=#{rolep.note}

AND level=#{permissionP.level}

注意此时并不需要写出parameterType属性,Mybatis会进行自动搜索。

(3)总结

  1. 当你不使用@Param注解来声明参数时,必须使用使用 #{}方式;

  2. 便于传多个参数;

  3. 类似于别名之类的功能;

三、批量插入


<?xml version="1.0" encoding="UTF-8" ?>

insert into fund

( id,fund_name,fund_code,date_x,data_y,create_by,create_date,update_by,update_date,remarks,del_flag)

values

(

#{item.id},

#{item.fundName},

#{item.fundCode},

#{item.dateX},

#{item.dataY},

#{item.createBy},

#{item.createDate},

#{item.updateBy},

#{item.updateDate},

#{item.remarks},

#{item.delFlag}

)

四、useGeneratedKeys参数


1、在settings元素中设置useGeneratedKeys参数

对于支持自动生成记录主键的数据库,如:MySQL,SQL Server,此时设置useGeneratedKeys参数值为true,在执行添加记录之后可以获取到数据库自动生成的主键ID。

实际上,在settings元素中设置useGeneratedKeys是一个全局参数,但是只会对接口映射器产生影响,对xml映射器不起效。

此时,在接口映射中添加记录之后将返回主键ID。

public interface UserMapper {

// 受全局useGeneratedKeys参数控制,添加记录之后将返回主键id

@Insert(“insert into user(id,name,age) values(#{id},#{name},#{age})”)

Integer insertUser(User user);

}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值