1. #{}占位符用来设置参数,参数的类型可以有3种,基本类型,自定义类型,map基本类型作为参数,参数与占位符中的名称无关。

    1. <select id="findById" parameterType="int" resultType="cn.wh.vo.Role">
    2. select * from t_role where id = #{xxxid}
    3. </select>

    测试:

    1. @Test
    2. public void testSelectOne(){
    3. Role role = (Role)session.selectOne("cn.wh.mapper.RoleMapper.findById",1);
    4. System.out.println(role.getName());
    5. }

    自定义类型作为参数,自定义类中需要为为属性提供get方法,如果没有提供get方法,那么会根据占位符中的名称去反射获取值,如果占位符中的名称和属性不一致,那么报ReflectionException。

    1. <select id="findListBypage" parameterType="cn.wh.util.PageUtil" resultType="Role">
    2. select * from t_role limit #{index},#{size}
    3. </select>

    测试:

    1. @Test
    2. public void testPage1(){
    3. PageUtil pu = new PageUtil();
    4. pu.setIndex(3);
    5. pu.setSize(3);
    6. List<Role> list = session.selectList("cn.wh.mapper.RoleMapper.findListBypage", pu);
    7. for(Role r:list){
    8. System.out.println(r.getName());
    9. }
    10. }

    Map作为参数类型,key和占位符中的名称一致即可,如果名称不一致那么将会把null,传递到占位符中。

    注意:#{}占位符不能解决一下 3 类问题:

    表名是动态的: Select * from #{table_name}

    列名是动态的:Select #{column_name} from t_role

    排序列是动态的: Select * from t_role order by #{columu}

  1. ${}占位符是字符串连接符,可以用来动态设置表明,列名,排序名

    ${}参数不能为基本数据类型,只能为自定义类型和map

    1. <!-- 查询所有 -->
    2. <select id="findAll" parameterType="map" resultType="cn.wh.vo.Role">
    3. select * from ${tableName}
    4. </select>

    测试:

    1. @Test
    2. public void testSelectList(){
    3. Map<String,String> map = new HashMap<String,String>();
    4. map.put("tableName", "t_role");
    5. List<Role> list = session.selectList("cn.wh.mapper.RoleMapper.findAll",map);
    6. for(Role role:list){
    7. System.out.println(role.getId()+"----"+role.getName());
    8. }
    9. }

    作为连接符使用:

    1. <select id="selectLike1" parameterType="map" resultType="Role">
    2. select *from t_role where name like '${name}%';
    3. </select>

    测试:

    1. @Test
    2. public void testLike2(){
    3. Map<String,String> map = new HashMap<String,String>();
    4. map.put("name", "黄");
    5. List<Role> list = session.selectList("cn.wh.mapper.RoleMapper.selectLike1",map);
    6. for(Role r:list){
    7. System.out.println(r.getName());
    8. }
    9. }

mybatis 之 占位符#{} 和 ${}的更多相关文章

  1. Mybatis之占位符与拼接符

    1.占位符 1.1  含义: 在持久化框架中,为了将约束条件中的可变参数从sql中分离出来,在原有的参数位置使用特殊的标记来标记该位置,后期通过代码给sql传递参数(即实现sql与代码分离开).这个特 ...

  2. java之mybatis之占位符

    1.mybatis中有两种占位符 #{}和 ${}. 2. #{} 占位符是为了获取值,获取的值用在 where 语句后,insert 语句后,update 语句. #{} 获取值,是根据值的名称取值 ...

  3. Spring与Mybatis整合占位符无法解析问题

    问题:写了一个新的dao接口,进行单元测试时提示: Initialization of bean failed; nested exception is org.springframework.bea ...

  4. mybatis的#{}占位符和${}拼接符的区别

    #{}占位符:占位 如果传入的是基本类型,那么#{}中的变量名称可以随意写 如果传入的参数是pojo类型,那么#{}中的变量名称必须是pojo中的属性.属性.属性- ${}拼接符:字符串原样拼接 如果 ...

  5. Mybatis第六篇【配置文件和映射文件再解读、占位符、主键生成与获取、Mapper代理】

    配置文件和映射文件再解读 映射文件 在mapper.xml文件中配置很多的sql语句,执行每个sql语句时,封装为MappedStatement对象,mapper.xml以statement为单位管理 ...

  6. Mybatis mapper文件占位符设置默认值

    如果要设置占位符默认值的话:需要进行 设置 org.apache.ibatis.parsing.PropertyParser.enable-default-value 属性为true启用占位符默认值处 ...

  7. MyBatis中使用#和$书写占位符有什么区别?

    #将传入的数据都当成一个字符串,会对传入的数据自动加上引号:$将传入的数据直接显示生成在SQL中.注意:使用$占位符可能会导致SQL注射攻击,能用#的地方就不要使用$,写order by子句的时候应该 ...

  8. 【mybatis源码学习】mybtias基础组件-占位符解析器

    一.占位符解析器源码 1.占位符解析器实现的目标 通过解析字符串中指定前后缀中的字符,并完成相应的功能. 在mybtias中的应用,主要是为了解析Mapper的xml中的sql语句#{}中的内容,识别 ...

  9. Mybatis 中 sql 语句的占位符 #{} 和 ${}

    #{} 表示一个占位符号,通过 #{} 可以实现 preparedStatement 向占位符中设置值,自动进行 java 类型和 jdbc 类型转换.#{} 可以有效防止   sql注入. #{}  ...

随机推荐

  1. 使用工厂方法模式实现多数据库WinForm手机号码查询器(附源码)

    先讲一下简单工厂模式.工厂方法模式.抽象工厂模式的东西: 简单工厂模式(Simple Factory Pattern):工厂类中包含了必要的逻辑判断,根据客户端的选择条件动态实例化相关类,也就是说产品 ...

  2. javascript第四章--面向对象的程序设计

    ① 理解对象 ② 创建对象 ③ 继承

  3. 抛弃JQ,回归原生js……

    之前我写过一篇文章叫做<jq不会被淘汰>--而事实上它真的不会被淘汰,因为即使在mvvm框架盛行的今天,原生js的api越来越友好的今天,jq依然在用户量上是霸主-- 但是今天我们要讨论的 ...

  4. enote笔记法(2)——why的使用

    章节:why的使用 用法: why 概念|词汇(比概念更一般的形式的keyword)|短语|句子 用法1: why 概念|why keyword([比概念更一般的形式的keyword]) “why 概 ...

  5. 【Java框架型项目从入门到装逼】第三节 - 如何用Tomcat发布web项目?

    啥叫Tomcat?有道词典是这么说的. 这个我们姑且不管,实际上呢,Tomcat是一种Web服务器,我们自己做好了一个Web项目,就可以通过Tomcat来发布.服务器呢,又分为硬件服务器和软件服务器. ...

  6. 父类清除浮动的原因、(清除浮动代码,置于CSS中方便调用)

    浮动因素在静态网页制作中经常被应用到,比如要让块级元素不独占一行,常常应用设置float的方式来实现.但是应用的时候会发现,设置了子类浮动后,未给父类清除浮动,这样就会造成一下问题: 1.浮动的元素会 ...

  7. vue-router在ie9及以下history模式支持

    参考: https://www.npmjs.com/package/vue-route https://github.com/devote/HTML5-History-API 提要: ie9及以下不支 ...

  8. C语言中静态申请内存遇到的错误分析

    今天调试代码中,遇到了一个比较奇怪的打印,dump出来的数据只有前四位有值,其他后面的都为零. 出于直觉,应该是内存没有申请到.仔细核对代码之后,果真发现了一个语法错误,就是使用指针的指针时 ,对申请 ...

  9. 一个部署了tomcat服务的linux服务器,运行一段时间后出现内存和空间不足的问题

    —— 前段时间项目上的事比较忙,期间笔记都是临时存在本地txt,这些天有点时间了,整理出来,以便日后查看: linux 查看内存使用情况:free -m 释放缓存: /proc/sys/vm/drop ...

  10. Sublime text3 代码格式化插件

    使用 Sublime text 3 格式化HTML代码,需要安装插件,具体安装步骤如下: 1. 打开菜单 -> 首选项(Perferences) -> 插件控制(Packpage Cont ...