mybatis动态sql

mybatis中#{}和${}的区别

耗尽温柔 提交于 2020-02-12 06:44:58
1. #将传入的数据都当成一个字符串,会对自动传入的数据加一个双引号。如:order by #user_id#,如果传入的值是111,那么解析成sql时的值为order by "111", 如果传入的值是id,则解析成的sql为order by "id".    2. $将传入的数据直接显示生成在sql中。如:order by $user_id$,如果传入的值是111,那么解析成sql时的值为order by user_id, 如果传入的值是id,则解析成的sql为order by id.    3. #方式能够很大程度防止sql注入。    4.$方式无法防止Sql注入。 5.$方式一般用于传入数据库对象,例如传入表名.    6.一般能用#的就别用$. MyBatis排序时使用order by 动态参数时需要注意,用$而不是# 字符串替换 默认情况下,使用#{}格式的语法会导致MyBatis创建预处理语句属性并以它为背景设置安全的值(比如?)。这样做很安全,很迅速也是首选做法,有时你只是想直接在SQL语句中插入一个不改变的字符串。比如,像ORDER BY,你可以这样来使用: ORDER BY ${columnName} 这里MyBatis不会修改或转义字符串。 重要:接受从用户输出的内容并提供给语句中不变的字符串,这样做是不安全的。这会导致潜在的SQL注入攻击

mybatis中#{}和${}的区别

允我心安 提交于 2020-02-12 04:56:17
1. #将传入的数据都当成一个字符串,会对自动传入的数据加一个双引号。如:order by #user_id#,如果传入的值是111,那么解析成sql时的值为order by "111", 如果传入的值是id,则解析成的sql为order by "id".    2. $将传入的数据直接显示生成在sql中。如:order by $user_id$,如果传入的值是111,那么解析成sql时的值为order by user_id, 如果传入的值是id,则解析成的sql为order by id.    3. #方式能够很大程度防止sql注入。    4.$方式无法防止Sql注入。 5.$方式一般用于传入数据库对象,例如传入表名.    6.一般能用#的就别用$. MyBatis排序时使用order by 动态参数时需要注意,用$而不是# 字符串替换 默认情况下,使用#{}格式的语法会导致MyBatis创建预处理语句属性并以它为背景设置安全的值(比如?)。这样做很安全,很迅速也是首选做法,有时你只是想直接在SQL语句中插入一个不改变的字符串。比如,像ORDER BY,你可以这样来使用: ORDER BY ${columnName} 这里MyBatis不会修改或转义字符串。 重要:接受从用户输出的内容并提供给语句中不变的字符串,这样做是不安全的。这会导致潜在的SQL注入攻击

mybatis中的#{}和${}区别

ⅰ亾dé卋堺 提交于 2020-02-12 03:13:01
#将传入的数据都当成一个字符串,会对自动传入的数据加一个双引号。如:order by #user_id#,如果传入的值是111,那么解析成sql时的值为order by "111", 如果传入的值是id,则解析成的sql为order by "id".    2. $将传入的数据直接显示生成在sql中。如:order by $user_id$,如果传入的值是111,那么解析成sql时的值为order by user_id, 如果传入的值是id,则解析成的sql为order by id.    3. #方式能够很大程度防止sql注入。    4.$方式无法防止Sql注入。 5.$方式一般用于传入 数据库 对象,例如传入表名.    6.一般能用#的就别用$. MyBatis排序时使用order by 动态参数时需要注意,用$而不是# 字符串替换 默认情况下,使用#{}格式的语法会导致MyBatis创建预处理语句属性并以它为背景设置安全的值(比如?)。这样做很安全,很迅速也是首选做法,有时你只是想直接在SQL语句中插入一个不改变的字符串。比如,像ORDER BY,你可以这样来使用: ORDER BY ${columnName} 这里MyBatis不会修改或转义字符串。 重要:接受从用户输出的内容并提供给语句中不变的字符串,这样做是不安全的。这会导致潜在的SQL注入攻击

mybatis 的动态 SQL 语句

自闭症网瘾萝莉.ら 提交于 2020-02-10 17:25:19
动态 SQL 之 <if> 标签   根据实体类的不同取值,使用不同的 SQL 语句来进行查询。比如在 id 如果不为空时可以根据 id 查询,   如果 username 不为空时还要加入用户名作为条件。   持久层 Dao 接口     List<User> findByCondition(User user);   持久层 Dao 映射配置     <select id="findByCondition" parameterType="com.fgy.domain.User" resultType="com.fgy.domain.User">      select * from user where 1=1      <if test="username != null and username != ''">        and username = #{username}      </if>      <if test="sex != null">        and sex = #{sex}      </if>    </select>  测试:     @Test    public void testFindByCondition() {     User user = new User();     user.setUsername("");    

MyBatis(一)

泪湿孤枕 提交于 2020-02-08 01:12:29
一、MyBatis介绍 mybatis是一个 半ORM (Object Relational Mapping对象关系映射)持久层框架, 底层封装了JDBC ,开发只需关注SQL,无需处理加载驱动、创建连接等重复工作。 二、MyBatis优点 解耦 :直接编写SQL,解除SQL与程序代码的耦合; 动态SQL :提供xml标签,支持编写动态sql; 代码少 :减少代码量,不需要手动加载驱动、创建连接等处理过程; 性能好 :直接编写原生态sql,严格控制sql执行性能,灵活度高。 兼容各种数据库 :MyBatis底层使用JDBC来连接数据库,只要JDBC支持的数据库MyBatis都支持; 集成spring ; 对象与字段映射 :提供映射标签,支持对象与数据库的ORM字段关系映射;提供了关系映射标签,支持对象关系组件维护。 三、MyBatis缺点 编写 大量SQL 语句,需要对sql有一定理解; 数据库 移植性差 :SQL语句依赖于数据库,不能随便更换数据库。 四、MyBatis与Hibernate区别 区别 MyBatis Hibernate 框架 半ORM框架 全ORM框架 优点 编写原生态sql,直接对sql性能优化,灵活度高,与代码解耦 对象关系映射能力强,平台无关性好 缺点 需编写大量sql,不支持数据库无关性 不能自主对sql优化,设置映射需考虑性能与对象模型的权衡 适用项目

MyBatis 动态SQL

泪湿孤枕 提交于 2020-02-07 20:20:55
if <select id="findActiveBlogWithTitleLike" resultType="Blog"> SELECT * FROM BLOG WHERE state = ‘ACTIVE’ <if test="title != null"> AND title like #{title} </if> </select> 这条语句提供了一个可选的文本查找类型的功能。如果没有传入"title",那么所有处于"ACTIVE"状态的BLOG都会返回;反之若传入了"title",那么就会把模糊查找"title"内容的BLOG结果返回(就这个例子而言,细心的读者会发现其中的参数值是可以包含一些掩码或通配符的)。 <select id="findActiveBlogLike" resultType="Blog"> SELECT * FROM BLOG WHERE state = ‘ACTIVE’ <if test="title != null"> AND title like #{title} </if> <if test="author != null and author.name != null"> AND author_name like #{author.name} </if> </select> choose, when, otherwise <select id

MyBatis 介绍

久未见 提交于 2020-02-07 15:06:09
MyBatis 介绍 MyBatis 是一款优秀的 ORM(Object Relational Mapping,对象关系映射)框架,它可以通过对象和数据库之间的映射,将程序中的对象自动存储到数据库中。它是 Apache 提供的一个开源项目,之前的名字叫做 iBatis,2010 年迁移到了 Google Code,并且将名字改为我们现在所熟知的 MyBatis,又于 2013 年 11 月迁移到了 Github。 MyBatis 提供了普通 SQL 查询、事务、存储过程等功能,它的优缺点如下。 优点 : 相比于 JDBC 需要编写的代码更少 使用灵活,支持动态 SQL 提供映射标签,支持对象与数据库的字段关系映射 缺点 : SQL 语句依赖于数据库,数据库移植性差 SQL 语句编写工作量大,尤其在表、字段比较多的情况下 总体来说,MyBatis 是一个非常优秀和灵活的数据持久化框架,适用于需求多变的互联网项目,也是当前主流的 ORM 框架。 MyBatis 重要组件 MyBatis 中的重要组件如下: Mapper 配置:用于组织具体的查询业务和映射数据库的字段关系,可以使用 XML 格式或 Java 注解格式来实现; Mapper 接口:数据操作接口也就是通常说的 DAO 接口,要和 Mapper 配置文件中的方法一一对应; Executor:MyBatis 中所有的

MyBatis如何配置动态SQL语句

孤人 提交于 2020-02-07 07:00:26
MyBatis配置动态SQL语句 在 MyBatis 的 SQL映射文件中,有时候需要根据一些查询条件,来选择不同的SQL语句,如果每一个场景都重写SQL,很显然效率没有很高,而 MyBatis 的动态SQL很好的解决了这种问题,根据条件动态的处理 SQL, 特别简单的说就是,写一次SQL,但是根据分支等的跳转,在多个场景下也可以使用,例如: 当查询条件由于参数不同而无法确定具体是什么,可以使用 <where> 标签包含 在 <where> 可以使用 <if test="...."> 分条件进行处理,实现动态 <foreach> 遍历标签放到后面代码中具体说 在此之外,动态SQL同时结局了,在原生 JDBC 中需要拼接SQL语句时由于书写问题,而导致报错 (一) where 和 if 标签 UserMapper 接口 /** * 根据条件查询 * @return */ List < User > findUserByCondition ( User user ) ; UserMapper.xml < select id = " findUserByCondition " resultType = " cn.ideal.domain.User " parameterType = " cn.ideal.domain.User " > select * from user < where

MyBatis学习笔记

廉价感情. 提交于 2020-02-06 08:47:34
mybatis简介 MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以使用简单的 XML 或注解来配置和映射原生类型、接口和 Java 的 POJO(Plain Old Java Objects,普通老式 Java 对象)为数据库中的记录。 HelloWorld 基本流程 1、创建全局配置文件,配置mybatis的一些操作 2、创建sql映射文件,该文件中配置了每个sql,以及sql的封装规则 3、将该sql映射文件注册到全局配置文件中 4、根据全局配置文件创建SqlSessionFactory对象,并且获取SqlSession对象 5、使用SqlSession对象执行写好的sql操作 mybatis全局配置文件 <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd"> < configuration > < environments default = " development " > <

mybatis动态SQL与批量插入

别来无恙 提交于 2020-02-04 16:16:14
一 前言 本篇文章需要有一定得mybatis入门基础才能学习;如果是初学者请参考以下链接进行系统学习 mybatis入门 https://blog.csdn.net/youku1327/article/details/103339617 mybatis初级映射 https://blog.csdn.net/youku1327/article/details/103411829 mybatis配置 https://blog.csdn.net/youku1327/article/details/103604724 当然如果是资深读者,又没有经过系统得学习,可以直接入主本篇,带你一览动态标签使用方式; 动态SQL可以通过给定不同得条件,执行不同得SQL语句,实现动态SQL得方式就是通过mybatis提供得标签语法进行配置; 二 动态SQL标签 2.1 if 标签 if 标签表示条件判断 customer_name 不为空时会执行当前if标签的内容;此时的sql 语句 就是 select * from customer where and customer_name = #{customer_name} gender不为空时会执行if语句;此时执行的sql语句就是 select * from customer where 1 = 1 and gender = #{gender}