好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

基于MyBatis的parameterType传入参数类型

MyBatis的parameterType传入参数类型

在mybatis映射接口的配置中,有select,insert,update,delete等元素都提到了parameterType的用法,parameterType为输入参数,在配置的时候,配置相应的输入参数类型即可。parameterType有基本数据类型和复杂的数据类型配置。

1. MyBatis的传入参数parameterType类型分两种

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

1. 2. 复杂数据类型 :类(JavaBean、Integer等)和Map

2. 如何获取参数中的值

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

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

3.案例

3.1 传入Long型

mapper接口代码:

?

1

public User findUserById(Long id);

xml代码:

?

1

2

3

< select id = "findUserById" parameterType = "java.lang.Long" resultType = "User" >   

         select * from user where  id = #{id};   

</ select >

3.2 传入List

mapper接口代码:

?

1

public List< User > findUserListByIdList(List< Long > idList);

xml代码:

?

1

2

3

4

5

6

7

8

9

10

< select id = "findUserListByIdList" parameterType = "java.util.ArrayList" resultType = "User" >   

     select * from user user   

     < where >   

         user.ID in (   

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

              #{id}  

           </ foreach >   

         )   

     </ where >   

</ select >

在使用foreach的时候最关键的也是最容易出错的就是collection属性。

该属性是必须指定的,但是在不同情况 下,该属性的值是不一样的,主要有一下3种情况:

1. 如果传入的是单参数且参数类型是一个List的时候,collection属性值为list

2. 如果传入的是单参数且参数类型是一个array数组的时候,collection的属性值为array

3. 如果传入的参数是多个的时候,我们就需要把它们封装成一个Map了,当然单参数也可

3.3 传入数组:

mapper接口代码:

?

1

public List< User > findUserListByIdList(int[] ids);

xml代码:

?

1

2

3

4

5

6

7

8

9

10

< select id = "findUserListByIdList" parameterType = "java.util.HashList" resultType = "User" >   

     select * from user user   

     < where >   

         user.ID in (   

            < foreach collection = "array"   item = "id" index = "index"   separator = "," >  

                 #{id}  

            </ foreach >   

         )   

     </ where >   

</ select > 

3.4 传入map

mapper接口代码:

?

1

public boolean exists(Map< String , Object> map);

xml代码:

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

< select id = "exists" parameterType = "java.util.HashMap" resultType = "java.lang.Integer" >   

         SELECT COUNT(*) FROM USER user   

         < where >   

             < if test = "code != null" >    

                 and user.CODE = #[code]    

             </ if >   

             < if test = "id != null" >    

                 and user.ID = #{id}    

             </ if >   

             < if test = "idList !=null " >   

                 and user.ID in (   

                    < foreach collection = "idList" item = "id" index = "index" separator = "," >  

                         #{id}  

                    </ foreach >   

                 )   

             </ if >   

         </ where >   

</ select >

MAP中有list或array时,foreach中的collection必须是具体list或array的变量名。

比如这里MAP含有一个名为idList的list,所以MAP中用idList取值,这点和单独传list或array时不太一样。

3.5传入JAVA对象

mapper接口代码:

?

1

public int findUserList(User user);

xml代码:

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

< select id = "findUserList" parameterType = "User" resultType = "java.lang.Integer" >   

         SELECT COUNT(*) FROM USER user   

         < where >   

             < if test = "code != null" >    

                 and user.CODE = #[code]    

             </ if >   

             < if test = "id != null" >    

                 and user.ID = #{id}    

             </ if >   

             < if test = "idList !=null " >   

                 and user.ID in (   

                     < foreach   collection = "idList" item = "id" index = "index" separator = "," >  

                          #{id}  

                     </ foreach >   

                 )   

             </ if >   

         </ where >   

</ select >

JAVA对象中有list或array时,foreach中的collection必须是具体list或array的变量名。

比如这里User含有一个名为idList的list,所以User中用idList取值,这点和单独传list或array时不太一样。

3.6注解@Param

例子1:

注解单一属性;这个类似于将参数重命名了一次

mapper接口代码:

?

1

List< User > selectUserByTime(@Param(value="startdate")String startDate);

xml代码:

?

1

2

3

4

< select id = "selectUserByTime" resultType = "User" parameterType = "java.lang.String" >   

     select * from t_user  

     where  create_time >= to_date(#{startdate,jdbcType=VARCHAR},'YYYY-MM-DD') 

</ select >

例子2:

注解javaBean

mapper接口代码:

?

1

List< User > selectUserByTime(@Param(value="dateVO")DateVO dateVO);

xml代码:

?

1

2

3

4

5

6

< select id = "selectUserByTime" resultType = "User" parameterType = "DateVO" >   

     select * 

     from t_user 

     where create_time >= to_date(#{dateVO.startDate,jdbcType=VARCHAR},'YYYY-MM-DD')  

           and create_time < to_date (#{dateVO.endDate, jdbcType = VARCHAR },'YYYY-MM-DD')  

  </select>

mybatis 之parameterType="Long"

?

1

2

3

4

5

6

7

8

9

10

11

< select id = "selectByPrimaryKeyByArrayMemberId"   resultType = "memberModel" parameterType = "Long" >

           select

           < include refid = "Base_Column_List" />

              from member m

           where

           m.IS_DELETE = 'N'

           and m.member_id IN

           < foreach item = "item" index = "index" collection = "list" open = "(" separator = "," close = ")" > 

             #{item,jdbcType=DECIMAL} 

        </ foreach >

    </ select >

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

public ServiceMessage<List<Member>> selectByPrimaryKeyByArrayMemberId(

             List<Long> memberIds)

     {

         try

         {

             if (memberIds == null || memberIds.size()== 0 ){

                 return super .returnParamsError( "参数为空!" );

             }

             List<Member> list = memberMapper

             .selectByPrimaryKeyByArrayMemberId(memberIds);

             return super .returnCorrectResult(list);

         }

         catch (Throwable e)

         {

             return super .returnException(e);

         }

     }

 

     public ServiceMessage<List<Member>> selectByPrimaryKeyByArrayMemberId(List<Long> memberIds);

     List<Member> selectByPrimaryKeyByArrayMemberId(List<Long> memberIds);

     @Test

     public void testSelectByPrimaryKeyByArrayMemberId()

     {

         InternalMemberService internalMemberService = J1SOAHessianHelper.getService(url,InternalMemberService. class );

         List<Long> memberIds = new ArrayList<Long>();

         memberIds.add(1l);

         memberIds.add(2l);

         memberIds.add(1855l);

         ServiceMessage<List<Member>> sm = internalMemberService.selectByPrimaryKeyByArrayMemberId(memberIds);

         System.out.println(sm.getResult());

     }

以上为个人经验,希望能给大家一个参考,也希望大家多多支持。

原文链接:https://blog.csdn.net/q343509740/article/details/80578832

查看更多关于基于MyBatis的parameterType传入参数类型的详细内容...

  阅读:21次