Mybatis:传入参数方式以及#{}与${}的区别
2018-03-05 15:19
453 查看
一、在MyBatis的select、insert、update、delete这些元素中都提到了parameterType这个属性。MyBatis现在可以使用的parameterType有基本数据类型和JAVA复杂数据类型
基本数据类型:包含int,String,Date等。通过#{参数名},只能传入一个参数;通过#{0}、#{1}……索引方式,可以传入多个参数;如果通过#{参数名}传多个值,又不想使用索引方式,可以使用@param()注解。
复杂数据类型:包含JAVA实体类、Map。通过#{属性名}或#{map的KeyName}即可获取传入的值
1、#{参数名},传入一个参数
DAO方法:
Mapper.xml:
service:
但是与if标签结合使用则要注意必须用map或者对象
参照:http://www.cnblogs.com/keyi/p/8534905.html
2、#{0}、#{1}……索引方式,传入多个参数
DAO方法:
Mapper.xml:
service:
3、#{参数名},传入多个参数,并且参数用@param注解
DAO方法:
Mapper.xml:
service:
4、传入多个基本类型参数,参数用map封装,通过#{mapKey}取值
DAO方法:
Mapper.xml:
service:
5、使用map封装实体类,通过通过#{mapKey.attributeName}取值
DAO方法:
Mapper.xml:
service:
6、直接传入实体参数,通过#{属性名}取值
DAO方法:
Mapper.xml:
service:
二、#{}与${}的区别
注:statementType:STATEMENT(非预编译),PREPARED(预编译)或CALLABLE中的任意一个,这就告诉 MyBatis 分别使用Statement,PreparedStatement或者CallableStatement。默认:PREPARED。
使用${}传参取值实例:
DAO方法:
Mapper.xml:
service:
基本数据类型:包含int,String,Date等。通过#{参数名},只能传入一个参数;通过#{0}、#{1}……索引方式,可以传入多个参数;如果通过#{参数名}传多个值,又不想使用索引方式,可以使用@param()注解。
复杂数据类型:包含JAVA实体类、Map。通过#{属性名}或#{map的KeyName}即可获取传入的值
1、#{参数名},传入一个参数
DAO方法:
public List<User> selectUserByOrgId(String orgId);
Mapper.xml:
<select id="selectUserByOrgId" parameterType="java.lang.String" resultType="user"> select * from user where org_id = #{orgId} </select>
service:
List<User> users = userDao.selectUserByOrgId("1");
但是与if标签结合使用则要注意必须用map或者对象
参照:http://www.cnblogs.com/keyi/p/8534905.html
2、#{0}、#{1}……索引方式,传入多个参数
DAO方法:
public User selectUserByNameAndAge(String name,int age);
Mapper.xml:
<select id="selectUserByNameAndAge" resultType="user"> select * from user where name = #{0} and age = #{1} </select>
service:
User user = userDao.selectUserByNameAndAge("lucy",18);
3、#{参数名},传入多个参数,并且参数用@param注解
DAO方法:
public User selectUserByNameAndAge(@param("name")String name,@param("age")int age);
Mapper.xml:
<select id="selectUserByNameAndAge" resultType="user"> select * from user where name = #{name} and age = #{age} </select>
service:
User user = userDao.selectUserByNameAndAge("lucy",18);
4、传入多个基本类型参数,参数用map封装,通过#{mapKey}取值
DAO方法:
public User selectUserByNameAndAge(Map map);
Mapper.xml:
<select id="selectUserByNameAndAge" parameterType="Map" resultType="user"> select * from user where name = #{name} and age = #{age} </select>
service:
Map<String,Object> map=new HasMap<String,Object>(); map.put("name","lucy"); map.put("age",18); User user = userDao.selectUserByNameAndAge(map);
5、使用map封装实体类,通过通过#{mapKey.attributeName}取值
DAO方法:
public User selectUserByNameAndAge(Map map);
Mapper.xml:
<select id="selectUserByNameAndAge" parameterType="Map" resultType="user"> select * from user where name = #{userParam.name} and age = #{userParam.age} </select>
service:
User userParam = new User("lucy",18); Map<String,Object> map=new HasMap<String,Object>(); map.put("user",userParam); User user = userDao.selectUserByNameAndAge(map);
6、直接传入实体参数,通过#{属性名}取值
DAO方法:
public User selectUserByNameAndAge(User userParam);
Mapper.xml:
<select id="selectUserByNameAndAge" parameterType="User" resultType="user"> select * from user where name = #{userParam.name} and age = #{userParam.age} </select>
service:
User userParam = new User("lucy",18); User user = userDao.selectUserByNameAndAge(userParam);
二、#{}与${}的区别
#{}拿到值之后,拼装sql,会自动对值添加引号”
${}则把拿到的值直接拼装进sql,如果需要加单引号”,必须手动添加,一般用于动态传入表名或字段名使用,同时需要添加属性statementType=”STATEMENT”,使用非预编译模式。
注:statementType:STATEMENT(非预编译),PREPARED(预编译)或CALLABLE中的任意一个,这就告诉 MyBatis 分别使用Statement,PreparedStatement或者CallableStatement。默认:PREPARED。
使用${}传参取值实例:
DAO方法:
public List<User> selectUserByOrgId(String orgId);
Mapper.xml:
<select id="selectUserByOrgId" parameterType="java.lang.String" resultType="user" statementType="STATEMENT"> select * from user where org_id = ${orgId} </select>
service:
String orgId = "100"; orgId = "'" + orgId + "'"; List<User> users = userDao.selectUserByOrgId(orgId);
相关文章推荐
- Mybatis整理系列(01)————传入参数方式以及#{}与${}的区别
- @Param注解在mybatis中的使用以及传入参数的几种方式(转)
- MyBatis第三种方式,xml和接口的结合,以及如何获得插入数据的返回参数、传入空的参数
- 2017_11_28 mybatis多参数传入,以及#,$的区别
- Mybatis整理系列(01)————传入参数方式以及#{}与${}的区别
- c#方法中调用参数的值传递方式和引用传递方式,以及ref与out的区别
- MyBatis传入参数的方式
- c#方法中调用参数的值传递方式和引用传递方式,以及ref与out的区别
- C# 数据类型的引用类型、值类型内存存储方式以及区别; 函数参数传递的引用传递(址传递)、值传递区别
- @Param 注解在Mybatis中的使用 以及传递参数的三种方式
- @Param 注解在Mybatis中的使用 以及传递参数的三种方式
- Mybatis传入多个参数和${}与#{}的区别
- @Param注解在Mybatis中的使用 以及传递参数的三种方式
- @Param 注解在Mybatis中的使用 以及传递参数的三种方式
- c#方法中调用参数的值传递方式和引用传递方式,以及ref与out的区别
- Mybatis传入多个参数处理方式
- 函数传递参数的三种方式,以及它们的区别
- mybatis两种接收参数的方式#{args}和${args}的区别小知识
- 在mybatis中传入参数的几种方式 @Param
- mybatis中sql传入参数为集合、数组时解决方式