mybatis动态参数传递方式总结大全

在使用mybatis的时候报了一个这样的错误。其实知道是因为参数传递的不对,但是一直忘记了如何修改。所以在这里整理一下:

传递参数:

(1)传递一个基本数据类型的数据

通过parameterType来指定参数的类型

<select id="selectLimitSays" resultMap="saywordsMap" parameterType="Integer">
        select * from s_contents limit #{page},5
    </select>

(2)传递多个基本数据类型

在传递多个基本数据类型的时候,不可以指定parameterType的类型。而且在接收参数的时候需要使用规定的参数名称。

默认的是Available parameters are [arg2, arg1, arg0, param3, param1, param2]

<select id="selectByClassId" resultMap="saywordsMap">
        select * from s_contents where con_type=#{arg0} limit #{arg1},5
    </select>

(3)传递一个对象类型的数据

<insert id="save" parameterType="com.lxb.entity.Saywords" useGeneratedKeys="true" keyProperty="id">
        INSERT INTO s_contents (`con_name`,`con_type`,`con_publish_time`,`user_id`,`secrecy_level`,`con_desc`,`img_path`)
        VALUES (#{con_name},#{con_type},#{con_publish_time},#{user_id},#{secrecy_level},#{con_desc},#{img_path});
    </insert>

在value中的数据必须都是parameterType的对象类型的属性,且名字一样。

(4)传递多个对象数据类型的数据

使用resultMap来实现,利用多级映射来实现。

<resultMap type="com.lxb.model.User" id="userRole">
    <id property="userId" column="user_id"/>
    <result property="username" column="username"/>
    <result property="nickname" column="nickname"/>
    <result property="password" column="password"/>
    <result property="header" column="header"/>
    <!-- 一对多的映射配置 -->
    <collection property="role" ofType="com.lxb.model.Role">
        <id property="roleId" column="role_id"/>
        <result property="roleName" column="role_name"/>
        <result property="description" column="role_des"/>
    </collection>
</resultMap>
<!-- 根据用户的姓名或者昵称模糊查询 -->
<select id="getPagerByName" resultMap="userRole">
    <bind name="curr_page" value="(pager.curr-1)*pager.limit"/>
    SELECT u.*,r.description as role_des,r.role_id as role_id,r.role_name as role_name from t_user u LEFT JOIN t_user_role ur ON u.user_id = ur.user_id LEFT JOIN t_role r ON r.role_id = ur.role_id where 1=1
    <if test="user.username != null and user.username != ''">
  	 	 and u.username like '%${user.username}%'
    </if>
    <if test="user.nickname != null and user.nickname != ''">
   		 and u.nickname like '%${user.nickname}%'
    </if>
   	 limit #{curr_page},#{pager.limit}
</select>

 


版权声明:本文为new_buff_007原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
THE END
< <上一篇
下一篇>>