注:文章引用部分 mybatis传递参数总结文章内容

一、单个参数

1、基本数据类型

(1)直接使用

    List<ChargeRuleDO> tests(long id);
<select id="tests" resultType="com.xxx.bean.ChargeRuleDO">
select * from t_charge_rule t where t.id = #{id}
</select>

#{}中的参数名与方法中的参数名不一定一致,仅起到占位符作用

(2)使用注解 (最为直接不易出错)

    List<ChargeRuleDO> tests(@Param("aid") long bid);
<select id="tests" resultType="com.xxx.bean.ChargeRuleDO">
select * from t_charge_rule t where t.id = #{aid}
</select>

#{}中的参数名与方法中的@Param()里的参数名一致

2、复杂数据类型(这里主要是指Java实体类)

(1)直接使用

List<ChargeRuleDO> tests(TestQO testQO);
<select id="tests" resultType="com.xxx.bean.ChargeRuleDO">
select * from t_charge_rule t where t.id = #{id} and t.rule_type=#{ruleType}
</select>

#{}中的参数名与方法中的参数的属性名一致

(2)使用注解

List<ChargeRuleDO> tests(@Param("atestQO") TestQO btestQO);
<select id="tests" resultType="com.xxx.bean.ChargeRuleDO">
select * from t_charge_rule t where t.id = #{atestQO.id} and t.rule_type=#{atestQO.ruleType}
</select>

#{}中的参数名与方法中的@Param()里的参数对应的属性名一致,而且必须写成"#{atestQO.id}“的格式,不能简写成”#{id}".

二、多个参数

1、基本数据类型

(1)直接使用

List<ChargeRuleDO> tests(long id,String ruleType);
<select id="tests" resultType="com.xxx.bean.ChargeRuleDO">
  select * from t_charge_rule t where t.id = #{0} and t.rule_type=#{1}
</select>

这里改用#{index},其中,#{0}代表接收的是dao层中的第一个参数,#{1}代表dao层中第二参数,更多参数一致往后加即可。直接写参数名字或者其他进行占位会报Parameter 'XXX' not found. Available parameters are [1, 0, param1, param2]这样的错误

(2)使用注解

    List<ChargeRuleDO> tests(@Param("id") long id,@Param("ruleType") String ruleType);
<select id="tests" resultType="com.xxx.bean.ChargeRuleDO">
select * from t_charge_rule t where t.id = #{id} and t.rule_type=#{ruleType}
</select>

#{}中的参数名与方法中的@Param()里的参数名一致

2、复杂数据类型

(1)直接使用

尝试了两种取参数的方法都不行

(2)使用注解

    List<ChargeRuleDO> tests(@Param("testQO")TestQO testQO,@Param("testQO2")TestQO2 testQO2);
<select id="tests" resultType="com.xxx.bean.ChargeRuleDO">
select * from t_charge_rule t where t.id = #{testQO.id} and t.rule_type=#{testQO.ruleType} and t.user_id=#{testQO2.uesrId}
</select>

#{}中的参数名与方法中的@Param()里的参数对应的属性名一致,而且必须写成"#{testQO.id}“的格式,不能简写成”#{id}".

3、基本数据类型与复杂数据类型混合使用

因为在多参数的情况下,复杂数据类型不能直接使用,所以这里主要尝试基本数据类型直接使用并且复杂数据类型使用注解这一种情况

    List<ChargeRuleDO> tests(long id,String ruleType,@Param("testQO2")TestQO2 testQO2);
<select id="tests" resultType="com.xxx.bean.ChargeRuleDO">
  select * from t_charge_rule t where t.id = #{0} and t.rule_type=#{1} and t.user_id=#{testQO2.uesrId}
</select>

4、List参数

List<ChargeRuleDO> tests(List<long> list);
<select id="tests" resultType="com.xxx.bean.ChargeRuleDO">
select * from t_charge_rule t where t.id in
<foreach item="item" index="index" collection="list" open="(" separator="," close=")">
#{item}
</foreach>
</select>

四、if test=" "传值

在mybatis if test语句中,是使用#{}还是${} 或是其他?结论是两者都不可以在test中使用

小提一下:

#{}表示一个占位符,向占位符输入参数,mybatis自动进行java类型和jdbc类型的转换。

程序员不需要考虑参数的类型,比如:传入字符串,mybatis最终拼接好的sql就是参数两边加单引号。

#{}接收pojo数据,可以使用OGNL解析出pojo的属性值

表示sql的拼接,通过{}
表示sql的拼接,通过表示sql的拼接,通过{}接收参数,将参数的内容不加任何修饰拼接在sql中。

${}也可以接收pojo数据,可以使用OGNL解析出pojo的属性值

缺点:不能防止sql注入。

1、 String类型单个参数传递,使用_parameter

    public List<Long> listAuthTeachersByTeacherName(String teacherName);
<select id="listAuthTeachersByTeacherName" parameterType="string" resultType="long">
select uid from auth_teacher where status = 20
<if test="_parameter != null and _parameter != ''">
and real_name like concat('%',#{_parameter},'%')
</if>
order by apply_last_date asc
</select>

注意:这里的参数获取只能使用"_parameter",而不能使用teacherName,否则总是抛出There is no getter for property named ‘teacherName’ in 'class java.lang.String’的异常信息。

2、多值使用注解

  public List<Course> querybyNameandTime(@Param("start")String start,@Param("end") String end, @Param("coursename") String coursename, @Param("fuzzquery") String fuzzquery);
<select id="querybyNameandTime" resultMap="ListCourseMapper">
select * from course
<where>
<if test="start != null and start !=''">
and date(course_starttime) between #{start} and #{end}
</if>
<choose>
<when test="coursename != null and coursename !='' and fuzzquery != null">
and course_name like '%' #{coursename} '%'
</when>
<when test="coursename!= null and coursename !='' and fuzzquery == null ">
and course_name = #{coursename}
</when>
<otherwise>
and 1=1
</otherwise>
</choose>
</where>
</select>

3、pojo可以直接使用属性

<select id="ListByChose"    resultMap="StudentMapper">
SELECT * FROM student
<where>
<choose>
<when test=" name != null and name !=''">
and sname like '%' #{name} '%'
</when>
<when test=" age != null and age !='' and age > 0">
and age > #{age}
</when>
<when test=" score != null and score !='' and score > 0">
and score > #{score}
</when>
<otherwise>
1==2
</otherwise>
</choose>
</where>
</select>

4、数组和list

数组

<select id="ListByForeachArray"  resultMap="StudentMapper" >
SELECT * FROM student
<where>
<if test="array.length > 0">
and id in
<foreach collection="array" item="id" open="(" close=")" separator=",">
#{id}
</foreach>
</if>
</where>
</select>

list


<select id="ListByForeachList" resultMap="StudentMapper" >
SELECT * FROM student
<where>
<if test="list.size > 0">
and id in
<foreach collection="list" item="id" open="(" close=")" separator=",">
#{id}
</foreach>
</if>
</where>
</select>

mybatis传参总结的更多相关文章

  1. 问题小记(MyBatis传参出现的小问题)

    问题一:在MyBatis中注解@Param和ParameterType不能一起用,会报错Parameter 'XXX' not found. Available parameters are [1, ...

  2. Mybatis传参方式

    Mybatis传多个参数(三种解决方案) 据我目前接触到的传多个参数的方案有三种. 第一种方案  DAO层的函数方法 ? 1 Public User selectUser(String name,St ...

  3. mybatis传参的几种方式

    1,@Param @参考文章 @Select("select s_id id,s_name name,class_id classid from student where  s_name= ...

  4. Java Mybatis 传参方式

    一.单个参数: public List<XXBean> getXXBeanList(String xxCode); <select id="getXXXBeanList&q ...

  5. mybatis 传参是 list<string> 的注意事项

    <!--付款 批量 修改账单状态--><update id="editbillpayALL" parameterType="java.util.List ...

  6. mybatis传参问题总结

    一. 传入单个参数 当传入的是单个参数时,方法中的参数名和sql语句中参数名一致即可 List<User> getUser(int id); <select id="get ...

  7. php sql 类似 mybatis 传参

    PHP sql 处理上,没有类似于 java mybatis 的工具,导致进行一些sql 处理时,会有诸多不便, 楼主抽时间写了一个 php 类似 mybatis 的sql 工具,省去了拼装sql 的 ...

  8. Mybatis传参- 被逗号分割的字符串

    String ids = "1,2,3,4,5,6",如ids作为参数传递,查询list返回.mybatis用foreach处理并返回. SELECT * FROM yp_popu ...

  9. mybatis 传参为 Integer 时 ,Mapper 文件 中判断 条件 问题。

    <if test="valiStatus==null || valiStatus=='' || valiStatus==4 "> b.work_permit_card_ ...

随机推荐

  1. servlet container:tomcat jetty and undertow

    1 spring boot内嵌容器支持tomcat.jetty和undertow 但是undertow性能最好,详见: https://examples.javacodegeeks.com/enter ...

  2. JavaScript全局属性/函数

    JavaScript 全局属性和方法可用于创建Javascript对象. JavaScript 全局属性 属性 描述 Infinity 代表正的无穷大的数值. NaN 指示某个值是不是数字值. und ...

  3. vi/vim命令

    vi / vim是Unix / Linux上最常用的文本编辑器而且功能非常强大.

  4. Kentico中的skin.css的加载

    kentico7中有如下的css引用 第一行的css是  SELECT * FROM dbo.CMS_CssStylesheet表中的css 后面2个对应到的是Kentico7\App_Themes\ ...

  5. ZOJ 1414:Number Steps

    Number Steps Time Limit: 2 Seconds      Memory Limit: 65536 KB Starting from point (0,0) on a plane, ...

  6. 【Codevs1183】泥泞的道路

    Position: http://codevs.cn/problem/1183/ List Codevs1183 泥泞的道路 List Description Input Output Sample ...

  7. POJ1259 The Picnic 最大空凸包问题 DP

    POJ1259 给定平面上100个点 求一个最大的凸包,使得它不包含其中任意点,且凸包的顶点是题目所给的点. 枚举凸包左下角的点,顺时针枚举第二个点, 用opt[i][j]记录 i作为第二个点, 且第 ...

  8. Redis: Redis on Windows Setup

    ylbtech-Redis: Redis on Windows Setup 1.返回顶部 1. 2. 3. 4. 5. 6. 7. 8. 9. 2.返回顶部   3.返回顶部   4.返回顶部   5 ...

  9. 21. Ext中表格自适应高度

    转自:https://blog.csdn.net/happy492/article/details/6401099 1. 下面的代码中width和height的初始值为tab的开始大小,当浏览器窗口变 ...

  10. F5 SSLVPN 的安装问题

    WIN10下安装SSLVPN问题 1.右击计算机 -->选择管理-->查看安装的插件是否显示感叹号 2.如果显示感叹号-->则进行更新驱动-->>手动选择-->网络 ...