mybatis 传入string参数,parametertype怎样写

 我来答
gonghanlin123
2016-05-07 · TA获得超过320个赞
知道小有建树答主
回答量:333
采纳率:50%
帮助的人:354万
展开全部
众所周知,mybatis的传入参数可以是各种Java的基本数据类型:包含int,String,Date等。基本数据类型作为传参,只能传入一个。通过#{参数名} 即可获取传入的值 ,复杂数据类型:包含JAVA实体类、Map。通过#{属性名}或#{map的KeyName}即可获取传入的值,但是如果想传入一个collection怎么办呢?
经查找后发现可以使用mapper配置文件中的foreach语句,借用别人写的文章:
3.7 foreach
对于动态SQL 非常必须的,主是要迭代一个集合,通常是用于IN 条件。List 实例将使用“list”做为键,数组实例以“array” 做为键。
foreach元素是非常强大的,它允许你指定一个集合,声明集合项和索引变量,它们可以用在元素体内。它也允许你指定开放和关闭的字符串,在迭代之间放置分隔符。这个元素是很智能的,它不会偶然地附加多余的分隔符。
注意:你可以传递一个List实例或者数组作为参数对象传给MyBatis。当你这么做的时候,MyBatis会自动将它包装在一个Map中,用名称在作为键。List实例将会以“list”作为键,而数组实例将会以“array”作为键。
这个部分是对关于XML配置文件和XML映射文件的而讨论的。下一部分将详细讨论Java API,所以你可以得到你已经创建的最有效的映射。
3.7.1参数为array示例的写法略3.7.2参数为list示例的写法
接口的方法声明:
Java代码
public List<StudentEntity> getStudentListByClassIds_foreach_list(List<String> classIdList);

动态SQL语句:
Xml代码
<!-- 7.2 foreach(循环List<String>参数) - 作为where中in的条件 -->
<select id="getStudentListByClassIds_foreach_list" resultMap="resultMap_studentEntity">
SELECT ST.STUDENT_ID,
ST.STUDENT_NAME,
ST.STUDENT_SEX,
ST.STUDENT_BIRTHDAY,
ST.STUDENT_PHOTO,
ST.CLASS_ID,
ST.PLACE_ID
FROM STUDENT_TBL ST
WHERE ST.CLASS_ID IN
<foreach collection="list" item="classIdList" open="(" separator="," close=")">
#{classIdList}
</foreach>
</select>

测试代码,查询学生中,在20000001、20000002这两个班级的学生:
Java代码
@Test
public void test7_2_foreach() {
ArrayList<String> classIdList = new ArrayList<String>();
classIdList.add("20000001");
classIdList.add("20000002");
List<StudentEntity> list = this.dynamicSqlMapper.getStudentListByClassIds_foreach_list(classIdList);
for (StudentEntity e : list) {
System.out.println(e.toString());
}
}

这个是ItEye上的一篇文章,其中配置文件中的parameterType是可以不配置的,mybatis会自动传入的。当您想传入collection时,并不能直接传入collection对象,要将其先转换为list,然后才能传入。因为mybatis生成SQL语句遍历list时是需要用到get()方法的,而这个方法只在List中才有,Collection里是没有的。以上的配置在Mybitis官方文档中的“动态SQL”也可以找到。

参数示例:
根据班级ID查询教师列表
xml文件

[html] view plaincopy

<select id="selectTeacher" parameterType="int" resultType="com.myapp.domain.Teacher">
select * from Teacher where c_id=#{id}
</select>

java代码

[java] view plaincopy

List<Teacher> tList = teacherMapper.selectTeacher(2);
for (Teacher entityTemp : tList) {
System.out.println(entityTemp.toString());
}
JAVA实体类型参数示例:
[html] view plaincopy

<select id="selectTeacher" parameterType="com.myapp.domain.Teacher" resultType="com.myapp.domain.Teacher">
select * from Teacher where c_id=#{id}
</select>
[java] view plaincopy

java代码

Teacher queryTeacher=new Teacher();
queryTeacher.setId(2);
List<Teacher> tList = teacherMapper.selectTeacher(queryTeacher);
for (Teacher entityTemp : tList) {
System.out.println(entityTemp.toString()); }
Map参数示例:
[html] view plaincopy

<select id="selectTeacher" parameterType="Map" resultType="com.myapp.domain.Teacher">
select * from Teacher where c_id=#{id} and sex=#{sex}
</select>
[java] view plaincopy

java代码

Map<String,String> map=new HasMap<String,String>();
map.put("id","2");
map.put("sex","男");
List<Teacher> tList = teacherMapper.selectTeacher(map);
for (Teacher entityTemp : tList) {
System.out.println(entityTemp.toString()); }
另外MyBatis还提供了一个使用注解来参入多个参数的方式。这种方式需要在接口的参数上添加@Param注解

示例:
接口方法

[java] view plaincopy

public List<Teacher> selectTeacher(@Param(value="id") String id,@Param(value="sex") String sex);

XML文件

[html] view plaincopy

<select id="selectTeacher" resultType="com.myapp.domain.Teacher">
select * from Teacher where c_id=#{id} and sex=#{sex}
</select>

测试代码

[java] view plaincopy

List<Teacher> tList = teacherMapper.selectTeacher("2","男");
for (Teacher entityTemp : tList) {
System.out.println(entityTemp.toString());
我卖烧饼不卖馍
2018-03-31 · TA获得超过8750个赞
知道小有建树答主
回答量:36
采纳率:96%
帮助的人:3.7万
展开全部
  1. MyBatis的传入参数parameterType类型分两种:

    1. 1. 基本数据类型:int,string,long,Date;

    1. 2. 复杂数据类型:类和Map。

  2. 如何获取参数中的值:

    2.1  基本数据类型:#{参数} 获取参数中的值;

    2.2  复杂数据类型:#{属性名}  ,map中则是#{key}。

  3. 基本数据类型案例:
    <sql id="Base_Column_List" >  
        id, car_dept_name, car_maker_name, icon,car_maker_py,hot_type  
      </sql>  
      <select id="selectByPrimaryKey" resultMap="BaseResultMap" parameterType="java.lang.Long" >  
        select   
        <include refid="Base_Column_List" />  
        from common_car_make  
        where id = #{id,jdbcType=BIGINT}
  4. 复杂数据类型案例:<select id="queryCarMakerList" resultMap="BaseResultMap" parameterType="java.util.Map">  
            select  
            <include refid="Base_Column_List" />  
            from common_car_make cm  
            where 1=1  
            <if test="id != null">  
                and  cm.id = #{id,jdbcType=DECIMAL}  
            </if>  
            <if test="carDeptName != null">  
                and  cm.car_dept_name = #{carDeptName,jdbcType=VARCHAR}  
            </if>  
            <if test="carMakerName != null">  
                and  cm.car_maker_name = #{carMakerName,jdbcType=VARCHAR}  
            </if>  
            <if test="hotType != null" >  
               and  cm.hot_type = #{hotType,jdbcType=BIGINT}  
            </if>  
            ORDER BY cm.id  
        </select>
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式