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 ...
随机推荐
- 解决RedisDesktopManager连接不上redis问题
linux 下安装redis很简单,在此不做赘述 发现linux上启动redis,测试redis使用正常, 但使用RedisDesktopManager却连接不上,报错如下,报错信息显示:当前使用的P ...
- qbittorrent搜索在线插件
https://raw.githubusercontent.com/khensolomon/leyts/master/yts.py https://raw.githubusercontent.com/ ...
- 使用Wifi pineapple(菠萝派)进行Wi-Fi钓鱼攻击
简介: WiFi Pineapple 是由国外无线安全审计公司Hak5开发并售卖的一款无线安全测试神器. 特性: 用作 Wi-Fi 中间人攻击测试平台 一整套的针对 AP 的渗透测试套件 基于 WEB ...
- DVWA 安全测试靶机本地搭建
前期的搭建步骤这里就不多做表述了,网上文章很多,这里主要讲后续会遇到的问题和需要修改的地方. 首先将config-inc.php.dist 修改为config-inc.php 设置Key值 $_ ...
- [转帖]新iPhone的黑科技:UWB技术揭秘
新iPhone的黑科技:UWB技术揭秘 http://blog.nsfocus.net/iphone-black-technology-uwb-technology-revealed/ 阅读: ...
- [SQL] - 报表查询效率优化
背景 系统将数据对象JSON序列化后存放到数据库字段中.Report 模块需要获取实时数据对象数值,当前在SQL中进行数值判断的耗时长,效率低. 分析 当前执行效率低主要是程序结构设计的不合理. SQ ...
- php扩展安装方式
目录 扩展安装 php源码编译安装 PEAR.PECL phpize 源码安装 扩展安装 以php安装swoole扩展为例. php源码编译安装 下载源码包并编译安装 $ wget http://cn ...
- smarty中常用的流程控制逻辑
if else {if $age > 18} <div>年满十八岁!</div> {else if $age > 16} <div>年满十六岁!< ...
- Missing android.support.FILE_PROVIDER_PATHS meta-data 报错原因分析
此类错误多半因为拼写错误导致.有StackOverflow上便有网友将"FILE_PROVIDER_PATHS"误写成"FILE_PROVIDE_PATHS"的 ...
- C++枚举类型教案
一.枚举类型的应用场景 只需要将需要的变量值一一列举出来,便构成一个枚举类型. 二.枚举类型的定义 ·定义方式: enum 枚举类型名字{枚举常量表}: ·关键字enum:说明接下来定义的是一个枚举类 ...