mybatis 之 占位符#{} 和 ${}

时间:2022-09-24 19:48:55
  1. #{}占位符用来设置参数,参数的类型可以有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>

    测试:

    mybatis 之 占位符#{} 和 ${}
    @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());
    }
    }
    mybatis 之 占位符#{} 和 ${}

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

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

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

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

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

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

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

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

    测试:

    mybatis 之 占位符#{} 和 ${}
    @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());
    }
    }
    mybatis 之 占位符#{} 和 ${}

    作为连接符使用:

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

    测试:

    mybatis 之 占位符#{} 和 ${}
    @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 之 占位符#{} 和 ${}的更多相关文章

  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的&num;&lbrace;&rcub;占位符和&dollar;&lbrace;&rcub;拼接符的区别

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

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

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

  6. MyBatis中使用&num;和&dollar;书写占位符有什么区别?

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

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

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

  8. Mybatis 中 sql 语句的占位符 &num;&lbrace;&rcub; 和 &dollar;&lbrace;&rcub;

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

  9. 深入Spring Boot:那些注入不了的Spring占位符(&dollar;&lbrace;&rcub;表达式)

    Spring里的占位符 spring里的占位符通常表现的形式是: <bean id="dataSource" destroy-method="close" ...

随机推荐

  1. web api添加拦截器

    实现思路 1.标识控制器有拦截特性: 2.控制器拦截处理: 代码实现 1.标识控制器有拦截特性,代码: [MyFilter] public string PostFindUser([FromBody] ...

  2. Jsp的九大对象,七大动作,三大指令

    jsp九大内置对象:1>out 向客户端输出数据,字节流.如out.print(" dgaweyr"); 2>request 接收客户端的http请求.String g ...

  3. Python之路第一课Day11--随堂笔记&lpar;异步IO&bsol;数据库&bsol;队列&bsol;缓存之二&rpar;

    一.RabbitMQ队列 1.安装: a.官网: 安装 http://www.rabbitmq.com/install-standalone-mac.html b.安装python rabbitMQ ...

  4. 长按事件jquery mobile

    chat_enlarge.addEventListener('touchend', function(event) { if(fingers == 1){ event.preventDefault() ...

  5. BZOJ 2561 最小生成树(最大流)

    题目链接:http://61.187.179.132/JudgeOnline/problem.php?id=2561 题意:给定一个边带正权的连通无向图G= (V,E),其中N=|V|,M=|E|,N ...

  6. 关于Git中的一些常用的命令

    深入了解git的checkout命令 检出命令(git checkout)是Git最常用的命令之一,同时也是一个很危险的命令. 因为这条命令会重写工作区.检出命令的用法如下: 用法一: git che ...

  7. K60 启动过程分析

    很高兴老师借给我一K60的开发板,趁着暑假好好鼓捣鼓捣! 有了上图的过程分析我想心里大概有个低了吧! 以下看代码: /* CodeWarrior ARM Runtime Support Library ...

  8. 自定义实现IEnumerable

    Demo: http://files.cnblogs.com/files/georgeHeaven/Demo.IEnumerable.rar 一.使用场景 在开发过程中,经常需要使用foreach来循 ...

  9. C语言中NULL的定义

    用C语言编程不能不说指针,说道指针又不能不提NULL,那么NULL究竟是个什么东西呢? C语言中又定义,定义如下: #undef NULL #if defined(__cplusplus) #defi ...

  10. linq中group by

    本文导读:LINQ定义了大约40个查询操作符,如select.from.in.where.group 以及order by,借助于LINQ技术,我们可以使用一种类似SQL的语法来查询任何形式的数据.L ...