mybatis 之 占位符#{} 和 ${}
Posted javaobject
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mybatis 之 占位符#{} 和 ${}相关的知识,希望对你有一定的参考价值。
- #{}占位符用来设置参数,参数的类型可以有3种,基本类型,自定义类型,map基本类型作为参数,参数与占位符中的名称无关。
<select id="findById" parameterType="int" resultType="cn.wh.vo.Role"> select * from t_role where id = #{xxxid} </select>
测试:
@Test public void testSelectOne(){ Role role = (Role)session.selectOne("cn.wh.mapper.RoleMapper.findById",1); System.out.println(role.getName()); }
自定义类型作为参数,自定义类中需要为为属性提供get方法,如果没有提供get方法,那么会根据占位符中的名称去反射获取值,如果占位符中的名称和属性不一致,那么报ReflectionException。
<select id="findListBypage" parameterType="cn.wh.util.PageUtil" resultType="Role"> select * from t_role limit #{index},#{size} </select>
测试:
@Test public void testPage1(){ PageUtil pu = new PageUtil(); pu.setIndex(3); pu.setSize(3); List<Role> list = session.selectList("cn.wh.mapper.RoleMapper.findListBypage", pu); for(Role r:list){ System.out.println(r.getName()); } }
Map作为参数类型,key和占位符中的名称一致即可,如果名称不一致那么将会把null,传递到占位符中。
注意:#{}占位符不能解决一下 3 类问题:
表名是动态的: Select * from #{table_name}
列名是动态的:Select #{column_name} from t_role
排序列是动态的: Select * from t_role order by #{columu}
- ${}占位符是字符串连接符,可以用来动态设置表明,列名,排序名
${}参数不能为基本数据类型,只能为自定义类型和map
<!-- 查询所有 --> <select id="findAll" parameterType="map" resultType="cn.wh.vo.Role"> select * from ${tableName} </select>
测试:
@Test public void testSelectList(){ Map<String,String> map = new HashMap<String,String>(); map.put("tableName", "t_role"); List<Role> list = session.selectList("cn.wh.mapper.RoleMapper.findAll",map); for(Role role:list){ System.out.println(role.getId()+"----"+role.getName()); } }
作为连接符使用:
<select id="selectLike1" parameterType="map" resultType="Role"> select *from t_role where name like ‘${name}%‘; </select>
测试:
@Test public void testLike2(){ Map<String,String> map = new HashMap<String,String>(); map.put("name", "黄"); List<Role> list = session.selectList("cn.wh.mapper.RoleMapper.selectLike1",map); for(Role r:list){ System.out.println(r.getName()); } }
以上是关于mybatis 之 占位符#{} 和 ${}的主要内容,如果未能解决你的问题,请参考以下文章
MyBatis应用开发映射之参数绑定parameterType
Mybatis 中 sql 语句的占位符 #{} 和 ${}
SSM框架Mybatis笔记 --- MyBatis 中应用动态代理;#{}占位符与${}占位符;执行DML后返回主键值;UUID