摘要:输入参数类型指定输入参数类型,通过从输入对象中获取参数值放置在中。查询结果处理指定输出结果类型,将查询结果的一行记录数据映射为指定类型的对象。
MyBatis理解与掌握(输入与输出)
@(MyBatis)[Java, 框架, MyBatis]
占位符和拼接能防止sql注入问题,所一能尽量用#{}就尽量用#{}
用来传入参数,sql在解析的时候会加上 "" 当成字符串来解析 ,如这里 role_id = "roleid";
模糊查询(不同的数据库采用不同的sql拼接方式)
mysql:
select * from t_user where name like concat("%",#{zhang},"%")
oracle:
select * from t_user where name like "%" || #{zhang} || "%"${}:拼接符
存在sql注入问题
$一般用入传入数据库对象,比如数据库表名、列名
注意:数据库表名、列名和排序方式不能使用#,而 应该使用$
表名使用拼串:sql select * from ${tableName};
列名使用拼串:sql select ${colName} from t_user;
排序使用拼串: sql select * from t_user where age = #{age} order by name ${orderType2}
绕过了验证机制,把不应该查询的数据也给查询出来了,存在数据安全问题。拼串存在SQL注入是因为它把参数作为sql语法的一部分进行了编译,数据库会执行这条语句。使用占位符不存在SQL注入,是因为参数是在在sql编译后传递,数据库只会把参数作为查询条件进行判断。
"select * from t_user where id =" + id; String id = "1 or 1=1"; //sql 注入出现
如果使用的是拼接的方式,对参数不同的sql语句会多次编译,增加了编译次数,降低效率。
原因:占位符方式,sql语句到数据库中取数据前才把参数加入进去。拼接是sql语句和参数一同编译,参数不同,编译后生成的sql语句不同,需要多次编译。
指定输入参数类型, mybatis 通过 ognl 从输入对象中获取参数值放置在 sql中。
parameterType="Integer"
应用场景:sql中只有一个参数的时候使用
parameterType="com.george.pojo.Employee"
注意要写类的全路径
sql的参数会从自定义类的属性中获取,执行时,会根据参数名称在对象中反射调用方法,如果相同名称的属性不存在,会发生异常,所以__参数名称必须和属性名称保持一致__
应用场景:sql中多个参数有相同的含义,使用自定义类型
User user = session.selectOne("selectUser",user );
parameterType="Map"
sql的参数会从Map集合中根据key获取参数值。所以,参数名称必须和Map集合的key名称一样
应用场景:sql中多个参数没有任何的关系时,采用Map集合类型。
User user = session.selectOne("selectUser",map);
指定输出结果类型, mybatis 将 sql 查询结果的一行记录数据映射为 resultType 指定类型的对象。
封装成一个类Mybatis框架的输出主要针对的就是 查询结果输出
resultType属性表示将查询结果转换为指定类型的对象时需要遵循的规则:
(1)查询结果的 字段名称回和属性名称进行匹配 ,如果匹配成功,则反射调用,通过set方法,赋值给对象。
(2)如果没有相匹配的字段和属性名称,则不会赋值,特殊情况下,一个属性都没有完成匹配,那么对象不会创建,返回null
(3)在属性名称和字段名称不匹配的情况下,可以通过sql语句中取别名或者在
select u_code as userCode from t_user;
封装成一个Map
将字段名作为key,查询结果值作为value,放到Map中
Map map = session.selectOne("selectUser");
使用场景:当数据间没有任何的关系,采用Map集合类型。
封装String与简单类型将查询结果转换为String类型
返回的是查询结果的第一个字段
使用场景:
当获取数量或单一字段值的时候,使用简单类型接收数据
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/77144.html
摘要:语句在代码中硬编码,造成代码不易于维护,实际应用变化的可能较大,变动需要改变代码。对结果集解析存在硬编码查询列名,变化导致解析代码变化,系统不易于维护,如果能将数据库记录封装成对象解析比较方便。 MyBatis理解与掌握(简介) @(MyBatis)[Java, 框架, MyBatis] 简介 Mybatis是一个数据持久层框架,MyBatis消除了几乎所有的JDBC代码和参数的手...
摘要:理解与掌握动态框架就是简单的条件判断,利用语句我们可以实现某些简单的条件选择。有了元素我们就可以动态的更新那些修改了的字段。 MyBatis理解与掌握(动态SQL) @(MyBatis)[Java, 框架, MyBatis] if if 就是__简单的条件判断 __,利用if语句我们可以实现某些简单的条件选择。先来看如下一个例子: select * from user whe...
摘要:前言想要进入等一线互联网公司,以下是你必需具备的技能。包由解释程序自动加载,不需要显示说明。包包括许多具有特定功能的类,有日期向量哈希表堆栈等,其中类支持与时间有关的操作。包定义了应用程序编程接口,是应用程序环境的中性平台组件结构。 前言 想要进入BAT等一线互联网公司,以下是你必需具备的技能。如果你掌握的不牢固,那就赶快巩固,如果你还没有涉及,现在就立马学习起来吧。 1.Java语言...
摘要:订单信息与订单明细为一对多关系。例如先从单表查询,需要时再从关联表去关联查询,大大提高数据库性能,因为查询单表要比关联查询多张表速度要快。作用将关联查询信息映射到一个对象中。 MyBatis理解与掌握(关联查询) @(MyBatis)[Java, 框架, MyBatis] 一对一查询 案例:查询所有订单信息,关联查询下单用户信息 showImg(https://segmentfault...
阅读 2772·2021-11-19 11:30
阅读 3057·2021-11-15 11:39
阅读 1781·2021-08-03 14:03
阅读 1984·2019-08-30 14:18
阅读 2042·2019-08-30 11:16
阅读 2148·2019-08-29 17:23
阅读 2596·2019-08-28 18:06
阅读 2532·2019-08-26 12:22