在Mybatis写SQL语句的时候,避免不了参数的传入。通常情况下,参数的传入可以分为两大类:
1、使用@Param注解
2、不使用@Param注解
下面详细介绍这两种方式的参数传递规则:
一、不使用@Param注解
1、接口方法只有一个参数
1) 参数为基本类型或为基本包装类型(int,Integer,String...)
参数注释为: #{任意字符}
- User getUserById(int id);
- // select * from table where id = #{任意字符}
- select * from table where id = #{id}
2)参数是对象类型
参数注释为: #{对象属性}
- // user.getName user.getAge
- User getUser(User user);
- select * from table where name = #{name} and age = #{age}
2、接口方法有多个参数
1)参数为基本类型或为基本包装类型(int,Integer,String...)
参数注释为: #{参数位置[0..n-1]} 或者 #{param[1..n]}
- User getUser(String name, int age);
- // SQL
- select * from table where name = #{0} and age = #{1}
- // or
- select * from table where name = #{param1} and age = #{param2}
2)参数是对象
参数注释为: #{参数位置[0..n-1].对象属性} 或者 #{param[1..n].对象属性}
- User getUser(User user, booleanflag);
- // SQL
- select * from table where name = #{0.name} and age = {0.age} and flag = #{1}
- // or
- select * from table where name = #{param1.name} and age = {param1.age} and flag = #{param2}
二、使用@Param注解
1、接口只有一个参数
1)参数为基本类型或为基本包装类型(int,Integer,String...)
参数注释为: #{注解名称} 或者 #{param1}
- User getUserById(@Param("id")int id);
- select * from table where id = #{id}
- //or
- select * from table where id = #{param1}
2) 参数是自定义对象
参数注释为: #{注解名称.对象属性} 或者 #{param1.对象属性}
- // user.getName user.getAge
- User getUser(@Param("user")User user);
- select * from table where name = #{user.name} and age = #{user.age}
- //or
- select * from table where name=#{param1.name} and age = #{param1.age}
2、接口有多个参数
1)参数为基本类型或为基本包装类型(int,Integer,String...)
参数注释为: #{注解名称} 或者 #{param[1..n]}
2 )参数为自定义对象
参数注释为: #{注解名称.对象属性} 或者 #{param[1..n].对象属性}