ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

MyBatis常用标签和注解(绝对经典),真香系列

2021-09-20 09:34:23  阅读:140  来源: 互联网

标签:date name 真香 Param public item MyBatis 注解 id





### 3、trim (where, set)



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

...

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

...




### 4、foreach



//collection="要遍历的集合"

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

//index = "索引"

//open = "开始字符串"

//separator = "分隔符"

//close = "结束字符串"




### 5、bind



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




### 6、xml中的timestamp比较



第一种写法:

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

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

例如:sql如下:


create_date_time &gt;= #{startTime} and  create_date_time &lt;= #{endTime}

第二种写法:

大于等于

= ]]>

小于等于

例如: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 &lt; TO_TIMESTAMP(#{start}, 'yyyy-mm-dd hh24:mi:ss') 

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

</select> 



### 7、@Param



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



(1)原始的方法



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



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


<select id="findRoleByMap" parameterType="map" resultType="role">

    SELECT id,name FROM t_role

    WHERE roleName=#{roleName}

    AND note=#{note}

<select>

```



(2) 使用@Param



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



```

public List<Role> 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<Role> findRoleByBean(RoleParam role);

```



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



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



```

public List<Role> findRoleByMix(@Param("roleP") RoleParam role, @Param("permissionP") PermissionParam permission);

```



这样就可以进行如下映射



```

<select id="findRoleByMix" resultType="role">

    SELECT id,name FROM t_role

    WHERE roleName=#{roleP.roleName}

    AND note=#{rolep.note}

    AND level=#{permissionP.level}

<select>

```



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



(3)总结



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

2.  便于传多个参数;

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



三、批量插入

------



```

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

<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >

<mapper namespace="com.center.manager.mapper.FundMapper">



	<insert id="insertForeach" parameterType="java.util.List" useGeneratedKeys="false">

    			insert into fund

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

    			values

    			<foreach collection="list" item="item" index="index" separator=",">

    				(

    					#{item.id},

    					#{item.fundName},

    					#{item.fundCode},

    					#{item.dateX},

    					#{item.dataY},

    					#{item.createBy},

    					#{item.createDate},

    					#{item.updateBy},

    					#{item.updateDate},

    					#{item.remarks},

    					#{item.delFlag}

    				)

    		     </foreach>		

    </insert>    

</mapper> 

```



四、useGeneratedKeys参数

--------------------



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



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

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



```

<settings>

    <!-- 

    允许JDBC支持自动生成主键,需要驱动兼容。 

    如果设置为true则这个设置强制使用自动生成主键,尽管一些驱动不能兼容但仍可正常工作(比如 Derby)。 -->

    <setting name="useGeneratedKeys" value="true" />

</settings>

```



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



```

public interface UserMapper {

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

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

    Integer insertUser(User user);

}

```


# 最后

每年转战互联网行业的人很多,说白了也是冲着高薪去的,不管你是即将步入这个行业还是想转行,学习是必不可少的。作为一个Java开发,学习成了日常生活的一部分,不学习你就会被这个行业淘汰,这也是这个行业残酷的现实。

如果你对Java感兴趣,想要转行改变自己,那就要趁着机遇行动起来。或许,这份**限量版的Java零基础宝典**能够对你有所帮助。

**[CodeChina开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频】](https://ali1024.coding.net/public/P7/Java/git)**

![](https://upload-images.jianshu.io/upload_images/22932333-7f13b76538e16344?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

![](https://upload-images.jianshu.io/upload_images/22932333-48d8fbce839f757d?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

标签:date,name,真香,Param,public,item,MyBatis,注解,id
来源: https://www.cnblogs.com/Java668/p/15313619.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有