资讯专栏INFORMATION COLUMN

MyBatis理解与掌握(输入与输出)

why_rookie / 2992人阅读

摘要:输入参数类型指定输入参数类型,通过从输入对象中获取参数值放置在中。查询结果处理指定输出结果类型,将查询结果的一行记录数据映射为指定类型的对象。

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注入,是因为参数是在在sql编译后传递,数据库只会把参数作为查询条件进行判断。

"select * from t_user where id =" + id;
String id = "1 or 1=1";   //sql 注入出现

如果使用的是拼接的方式,对参数不同的sql语句会多次编译,增加了编译次数,降低效率。
原因:占位符方式,sql语句到数据库中取数据前才把参数加入进去。拼接是sql语句和参数一同编译,参数不同,编译后生成的sql语句不同,需要多次编译。

输入参数类型 parameterType

指定输入参数类型, mybatis 通过 ognl 从输入对象中获取参数值放置在 sql中。

(1)简单类型(字符串类型,Integer,int...)

parameterType="Integer"
应用场景:sql中只有一个参数的时候使用

(2)自定义类型

parameterType="com.george.pojo.Employee"
注意要写类的全路径
sql的参数会从自定义类的属性中获取,执行时,会根据参数名称在对象中反射调用方法,如果相同名称的属性不存在,会发生异常,所以__参数名称必须和属性名称保持一致__
应用场景:sql中多个参数有相同的含义,使用自定义类型
User user = session.selectOne("selectUser",user );

(3)参数类型可以为集合类型

parameterType="Map"
sql的参数会从Map集合中根据key获取参数值。所以,参数名称必须和Map集合的key名称一样
应用场景:sql中多个参数没有任何的关系时,采用Map集合类型。
User user = session.selectOne("selectUser",map);

查询结果处理 resultType

指定输出结果类型, mybatis 将 sql 查询结果的一行记录数据映射为 resultType 指定类型的对象。

封装成一个类

Mybatis框架的输出主要针对的就是 查询结果输出


    select id , name ,description,img_url,sort,is_display
    from bbs_brand
    
     
       is_display = #{isDisplay}
     
     
       and name = #{name}
     
    
    order by id desc
    limit #{startRow},#{pageSize}
封装成一个Map

将字段名作为key,查询结果值作为value,放到Map中

Map map = session.selectOne("selectUser");

使用场景:当数据间没有任何的关系,采用Map集合类型。

封装String与简单类型

将查询结果转换为String类型

返回的是查询结果的第一个字段

使用场景:
当获取数量或单一字段值的时候,使用简单类型接收数据

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/77144.html

相关文章

  • MyBatis理解掌握(简介)

    摘要:语句在代码中硬编码,造成代码不易于维护,实际应用变化的可能较大,变动需要改变代码。对结果集解析存在硬编码查询列名,变化导致解析代码变化,系统不易于维护,如果能将数据库记录封装成对象解析比较方便。 MyBatis理解与掌握(简介) @(MyBatis)[Java, 框架, MyBatis] 简介   Mybatis是一个数据持久层框架,MyBatis消除了几乎所有的JDBC代码和参数的手...

    Pocher 评论0 收藏0
  • MyBatis理解掌握(动态SQL)

    摘要:理解与掌握动态框架就是简单的条件判断,利用语句我们可以实现某些简单的条件选择。有了元素我们就可以动态的更新那些修改了的字段。 MyBatis理解与掌握(动态SQL) @(MyBatis)[Java, 框架, MyBatis] if if 就是__简单的条件判断 __,利用if语句我们可以实现某些简单的条件选择。先来看如下一个例子: select * from user whe...

    blankyao 评论0 收藏0
  • java篇

    摘要:多线程编程这篇文章分析了多线程的优缺点,如何创建多线程,分享了线程安全和线程通信线程池等等一些知识。 中间件技术入门教程 中间件技术入门教程,本博客介绍了 ESB、MQ、JMS 的一些知识... SpringBoot 多数据源 SpringBoot 使用主从数据源 简易的后台管理权限设计 从零开始搭建自己权限管理框架 Docker 多步构建更小的 Java 镜像 Docker Jav...

    honhon 评论0 收藏0
  • BAT程序员必备技能

    摘要:前言想要进入等一线互联网公司,以下是你必需具备的技能。包由解释程序自动加载,不需要显示说明。包包括许多具有特定功能的类,有日期向量哈希表堆栈等,其中类支持与时间有关的操作。包定义了应用程序编程接口,是应用程序环境的中性平台组件结构。 前言 想要进入BAT等一线互联网公司,以下是你必需具备的技能。如果你掌握的不牢固,那就赶快巩固,如果你还没有涉及,现在就立马学习起来吧。 1.Java语言...

    fobnn 评论0 收藏0
  • MyBatis理解掌握(关联查询)

    摘要:订单信息与订单明细为一对多关系。例如先从单表查询,需要时再从关联表去关联查询,大大提高数据库性能,因为查询单表要比关联查询多张表速度要快。作用将关联查询信息映射到一个对象中。 MyBatis理解与掌握(关联查询) @(MyBatis)[Java, 框架, MyBatis] 一对一查询 案例:查询所有订单信息,关联查询下单用户信息 showImg(https://segmentfault...

    MiracleWong 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<