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


    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>

      测试:

      @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}

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

      ${}参数不能为基本数据类型,只能为自定义类型和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());
              }
          }

        

  • 相关阅读:
    同步linux服务器的时间
    Esper学习之四:Context
    Haproxy+Keepalived搭建Weblogic高可用负载均衡集群
    C++中的对象指针
    第十五周oj刷题——Problem M: C++习题 矩阵求和--重载运算符
    《人工智能教程(张仰森)》(二)
    JAVA 并发编程-线程池(七)
    新手学測试----Unit Test(单元測试)
    HDU2193-AVL-数据结构-AVL
    Visual Assist X破解版安装(vs2010助手)
  • 原文地址:https://www.cnblogs.com/forever2h/p/6796357.html
Copyright © 2020-2023  润新知