笔记要点
出错分析与总结

/**================Mybatis参数值的获取:#和$符号的区别===============
* #{}:可以获得map中的值或者pojo对象属性的值;
* ${}:可以获得map中的值或者pojo对象属性的值;
* 区别:
* #{}: 是以预编译的形式,直接将参数设置到sql语句中;
* 使用PreparedStatement的sql封装方法 ,防止sql注入;
* ${}: 取出的值直接封装在sql语句中,不能防止sql注入,会有安全问题;
* 总结:
* 大多数情况下,我们取参数的值都应该去使用#{};
* 但是,原生jdbc不支持占位符的地方,我们就可以使用${}进行取值;
* 比如分表/排序/取到的参数值是表名...:按照年份分表拆分:
* select * from ${year}_salary where xxx;
* select * from tbl_employee order by ${f_name};
* ----------------------------------
* #{}:更丰富的用法:
* 规定参数的一些规则: javatype/jdbcType/mode(存储过程)/.......
* jdbcType通常需要在某种特定的条件下被设置,在我们的数据为null的时候,
* 有些数据库可能不能识别mybatis对null的默认处理;比如Oracle(报错)mysql(没有问题).
*
*
*/

工程组织

接口  EmployeeMapper 

public interface EmployeeMapper {
//多个参数处理,传入map
public Employee getEmpByMap(Map<String,Object> map);
}

映射文件 Employee.xml

<mapper namespace="com.dao.EmployeeMapper"><!--namespace: 名称空间;id: 唯一标识; resultType:返回值类型; -->
<!--public Employee getEmpByMap(Map<String,Object> map);-->
<select id="getEmpByMap" resultType="com.bean.Employee" databaseId="mysql">
select * from ${table_name}
where id = ${id} and last_name = #{lastName}
</select>

测试代码

public class test_tp24 {
public SqlSessionFactory getSqlSessionFactory() throws IOException {
String resource = "mybatis-config.xml";
InputStream inputStream=Resources.getResourceAsStream(resource);
return new SqlSessionFactoryBuilder().build(inputStream);
}
@Test
public void test05() throws Exception{
//默认是不自动提交数据的,需要我们自己手动提交
SqlSession openSession = getSqlSessionFactory().openSession();
try {
EmployeeMapper mapper = openSession.getMapper(EmployeeMapper.class); HashMap<String, Object> map = new HashMap<>();
map.put("lastName", "葫芦娃");
map.put("id", 4);
map.put("table_name", "tbl_employee");
Employee empByMap = mapper.getEmpByMap(map);
System.out.println(empByMap);
//最后手动提交
openSession.commit();
}finally {
openSession.close();
}
}
}

测试结果

DEBUG 11-29 15:22:20,111 ==>  Preparing: select * from tbl_employee where id = 4 and last_name = ?   

(BaseJdbcLogger.java:145)
DEBUG 11-29 15:22:20,132 ==> Parameters: 葫芦娃(String) (BaseJdbcLogger.java:145)
DEBUG 11-29 15:22:20,142 <== Total: 1 (BaseJdbcLogger.java:145) Employee{id=4, lastname='葫芦娃', email='葫芦娃@163.com', gender='0'}

MyBatis 3.0_[tp-24-25]_映射文件_参数处理_#与$取值区别_#{}更丰富的用法的更多相关文章

  1. MyBatis学习 之 二、SQL语句映射文件(2)增删改查、参数、缓存

    目录(?)[-] 二SQL语句映射文件2增删改查参数缓存 select insert updatedelete sql parameters 基本类型参数 Java实体类型参数 Map参数 多参数的实 ...

  2. MyBatis学习 之 二、SQL语句映射文件(1)resultMap

    目录(?)[-] 二SQL语句映射文件1resultMap resultMap idresult constructor association联合 使用select实现联合 使用resultMap实 ...

  3. Java-MyBatis-MyBatis3-XML映射文件:参数

    ylbtech-Java-MyBatis-MyBatis3-XML映射文件:参数 1.返回顶部 1. 参数 你之前见到的所有语句中,使用的都是简单参数.实际上参数是 MyBatis 非常强大的元素.对 ...

  4. mybatis学习$与#号取值区别

    1,多个参数传递用map或实体封装后再传给myBatis, mybatis学习$与#号取值区别 #{} 1.加了单引号,  2.#号写是可以防止sql注入,比较安全 select * from use ...

  5. Mybatis学习系列(二)Mapper映射文件

    Mapper映射文件,作用是用来配置SQL映射语句,根据不同的SQL语句性质,使用不同的标签,mapper文件中常用的标签有<iselect>.<insert>.<upd ...

  6. mybatis3.1-[topic-18-20]-_映射文件_参数处理_单个参数&多个参数&命名参数 _POJO&Map&TO 三种方式及举例

    笔记要点出错分析与总结 /**MyBatis_映射文件_参数处理_单个参数&多个参数&命名参数 * _POJO&Map&TO 三种方式及举例 _ * 单个参数 : #{ ...

  7. Mybatis --- 映射文件、参数处理、参数值的获取、select元素

    映射文件:指导着MyBatis如何进行数据库增删改查, 有着非常重要的意义:   - cache   命名空间的二级缓存配置 - cache-ref   其他命名空间缓存配置的引用. - result ...

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

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

  9. mybatis源码分析(三)------------映射文件的解析

    本篇文章主要讲解映射文件的解析过程 Mapper映射文件有哪几种配置方式呢?看下面的代码: <!-- 映射文件 --> <mappers> <!-- 通过resource ...

随机推荐

  1. k8s中configmap的使用方法

      ConfigMaps允许您将配置构件与映像内容解耦,以保持容器化应用程序的可移植性.本文展示如何创建configmap,修改configmap以及如何把configmap应用于pod. 创建con ...

  2. Nginx负载均衡-如何自定义URL中的hash key2

    upstream backend1 {            server 192.168.3.236:555;            server 192.168.3.236:222;        ...

  3. mysql存储过程demo

    #删除存储过程 -- drop procedure if exists add_test; CREATE PROCEDURE add_test() begin #定义变量 declare client ...

  4. C语言中malloc、free和new、delete的用法和区别

    很多学过C的人对malloc都不是很了解,知道使用malloc要加头文件,知道malloc是分配一块连续的内存,知道和free函数是一起用的.但是但是: 一部分人还是将:malloc当作系统所提供的或 ...

  5. [转帖]鲁大师Q3季度PC处理器排行:AMD、Intel终于五五开了

    鲁大师Q3季度PC处理器排行:AMD.Intel终于五五开了 https://www.cnbeta.com/articles/tech/902375.htm 近日,鲁大师发布了Q3季度PC处理器排行. ...

  6. todo---java中的json探讨

    1.json的命名格式 2.json赋值原则 3.json常用的工具 4.json的处理的第三方软件比较 5.json的起源 6.关于json串的对于null ,"" 的不同的第三 ...

  7. Python程序计算ax^2+bx+c=0方程根

    程序用来计算ax^2+bx+c=0的两个根,有些异常暂时无法处理: #!/usr/bin/python # -*- coding: utf-8 -*- #当程序存在中文时,注释表明使用utf-8编码解 ...

  8. python 之 数据库(数据库安装方法、基本sql语句、存储引擎)

    第十章 数据库 10.1 数据库介绍 1.数据库相关概念 数据库服务器:本质就是一个台计算机,该计算机之上安装有数据库管理软件的服务端 数据库管理系统RDBMS:本质就是一个C/S架构的套接字软件 库 ...

  9. Windows环境下Python3安装Pyspider

      执行命令: pip3 install pyspider Windows 下可能会出现这样的错误提示:Command "python setup.py egg_info" fai ...

  10. springboot基础、注解等

    SpringBoot 1.springboot概念 Spring Boot是用来简化新Spring应用的初始搭建以及开发过程.该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置. ...