MyBatis 3.0_[tp-24-25]_映射文件_参数处理_#与$取值区别_#{}更丰富的用法
笔记要点
出错分析与总结
/**================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]_映射文件_参数处理_#与$取值区别_#{}更丰富的用法的更多相关文章
- MyBatis学习 之 二、SQL语句映射文件(2)增删改查、参数、缓存
目录(?)[-] 二SQL语句映射文件2增删改查参数缓存 select insert updatedelete sql parameters 基本类型参数 Java实体类型参数 Map参数 多参数的实 ...
- MyBatis学习 之 二、SQL语句映射文件(1)resultMap
目录(?)[-] 二SQL语句映射文件1resultMap resultMap idresult constructor association联合 使用select实现联合 使用resultMap实 ...
- Java-MyBatis-MyBatis3-XML映射文件:参数
ylbtech-Java-MyBatis-MyBatis3-XML映射文件:参数 1.返回顶部 1. 参数 你之前见到的所有语句中,使用的都是简单参数.实际上参数是 MyBatis 非常强大的元素.对 ...
- mybatis学习$与#号取值区别
1,多个参数传递用map或实体封装后再传给myBatis, mybatis学习$与#号取值区别 #{} 1.加了单引号, 2.#号写是可以防止sql注入,比较安全 select * from use ...
- Mybatis学习系列(二)Mapper映射文件
Mapper映射文件,作用是用来配置SQL映射语句,根据不同的SQL语句性质,使用不同的标签,mapper文件中常用的标签有<iselect>.<insert>.<upd ...
- mybatis3.1-[topic-18-20]-_映射文件_参数处理_单个参数&多个参数&命名参数 _POJO&Map&TO 三种方式及举例
笔记要点出错分析与总结 /**MyBatis_映射文件_参数处理_单个参数&多个参数&命名参数 * _POJO&Map&TO 三种方式及举例 _ * 单个参数 : #{ ...
- Mybatis --- 映射文件、参数处理、参数值的获取、select元素
映射文件:指导着MyBatis如何进行数据库增删改查, 有着非常重要的意义: - cache 命名空间的二级缓存配置 - cache-ref 其他命名空间缓存配置的引用. - result ...
- Mybatis第六篇【配置文件和映射文件再解读、占位符、主键生成与获取、Mapper代理】
配置文件和映射文件再解读 映射文件 在mapper.xml文件中配置很多的sql语句,执行每个sql语句时,封装为MappedStatement对象,mapper.xml以statement为单位管理 ...
- mybatis源码分析(三)------------映射文件的解析
本篇文章主要讲解映射文件的解析过程 Mapper映射文件有哪几种配置方式呢?看下面的代码: <!-- 映射文件 --> <mappers> <!-- 通过resource ...
随机推荐
- Linux awk+uniq+sort 统计文件中某字符串出现次数并排序
https://blog.csdn.net/qq_28766327/article/details/78069989 在服务器开发中,我们经常会写入大量的日志文件.有时候我们需要对这些日志文件进行统计 ...
- C/C++ 多线程(程序猿面试重点)CodeBlocks-CB的pthreads使用
C++ 多线程 本文主要讲一下C++多线程 线程好处 ·使用线程可以把占据长时间的程序中的任务放到后台去处理 ·程序的运行速度可能加快 可以释放一些珍贵的资源如内存占用等等. 但是多线程是为了同步完成 ...
- httpsqs消息队安装
HTTPSQS(HTTP Simple Queue Service)是一款基于 HTTP GET/POST 协议的轻量级开源简单消息队列服务,使用 Tokyo Cabinet 的 B+Tree Key ...
- idea更换项目取消直接在当前窗口打开,设置为询问
- JIRA+JIRA Agile敏捷项目管理工具
jira插件下载地址 http://www.confluence.cn/pages/viewpage.action?pageId=1671327 下载GreenHopper插件 安装Jira-agil ...
- 守护进程daemon
# -*- coding: utf-8 -*- import sys, os, time, atexit from signal import SIGTERM class Daemon: def __ ...
- WCF-方法重载
一.服务端重载 一般写法直接重载,但是会报错,如下. [ServiceContract] public interface IService1 { [OperationContract] string ...
- Java基础笔试练习(四)
1.编译Java Application 源程序文件将产生相应的字节码文件,这些字节码文件的扩展名为( ). A.java B.class C.html D.exe 答案: B 解析: Java源程序 ...
- 开始使用 Manjaro(添加源+字体渲染去模糊+软件安装+优化配置+常见错误)(30)
1. 添加 archlinux 镜像源 1. 步骤一 向 /etc/pacman.d/mirrorlist 中添加国内镜像地址 1.1 方法1:自动添加 1. 输入如下命令查看国内镜像源,并按质量排序 ...
- Python-21-socket编程
一.基础知识 1. C/S架构 C/S架构即客户机/服务器模式. 它可以分为客户机和服务器两层: 第一层: 在客户机系统上结合了界面显示与业务逻辑: 第二层: 通过网络结合了数据库服务器. 简单的 ...