Mybatis小结

目录

Mybatis框架简介

#{}和${}的区别和作用

模糊查询like语句怎么写

实体类中的属性名和表中的字段名不一样,如何解决

.mybatis实现分页的几种方式

 Mybatis  dao层开发


 Mybatis面试题(总结最全面的面试题!!!)_小杰要吃蛋的博客-CSDN博客_mybatis面试题

Mybatis框架简介

MyBatis框架是一个开源的数据持久层框架。
它的内部封装了通过JDBC访问数据库的操作,支持普通的SQL查询、存储过程和高级映射,几乎消除了所有的JDBC代码和参数的手工设置以及结果集的检索。
MyBatis作为持久层框架,其主要思想是将程序中的大量SQL语句剥离出来,配置在配置文件当中,实现SQL的灵活配置。
这样做的好处是将SQL与程序代码分离,可以在不修改代码的情况下,直接在配置文件当中修改SQL。

#{}和${}的区别和作用

 #传入的数据会进行预编译,它是把#{}中间的参数转义成字符串,如同加入一个双引号。 如:where username=#{username},那么预编译后sql语句为where username=?;

$传入的数据会直接放进sql语句中。如:where username=${username},

如果username是1,那么运行时sql语句为where username=1;如果传入的值是1 or 1=1;,则解析成的sql为:select * from user where username=1 or 1=1(即:select * from user);
#方式能够很大程度防止sql注入,$方式无法防止Sql注入。
$方式一般用于传入数据库对象,例如传入表名.
一般能用#的就别用$,若不得不使用“${xxx}”这样的参数,要手工地做好过滤工作,来防止sql注入攻击。
在MyBatis中,“${xxx}”这样格式的参数会直接参与SQL编译,从而不能避免注入攻击。但涉及到动态表名和列名时,只能使用“${xxx}”这样的参数格式。所以,这样的参数需要我们在代码中手工进行处理来防止注入。

简单说,#{}是经过预编译的,是安全的;${}是未经过预编译的,仅仅是取变量的值,是非安全的,存在SQL注入。

模糊查询like语句怎么写

2.1 在Java代码中添加sql通配符

  • string wildcardname = “%smi%”;

  • list<name> names = mapper.selectlike(wildcardname);

  • <select id=”selectlike”>

  • select * from foo where bar like #{value}

  • </select>

2.2 在sql语句中拼接通配符,会引起sql注入

  • string wildcardname = “smi”;

  • list<name> names = mapper.selectlike(wildcardname);

  • <select id=”selectlike”>

  • select * from foo where bar like "%"${value}"%"

  • </select>

实体类中的属性名和表中的字段名不一样,如何解决

3.1.通过在查询的sql语句中定义字段名的别名,让字段名的别名和实体类的属性名一致。

  • <select id="getOrder" parametertype="int" resultetype="com.mybatis.domain.order">
  • select order_id id, order_no orderNo ,order_price price form orders where order_id=#{id};
  • </select>

3.2.通过<resultMap>来映射字段名和实体类属性名的一一对应的关系。 

  • <select id="getOrder" parameterType="int" resultMap="orderResultMap">
  • select * from orders where order_id=#{id}
  • </select>
  • <resultMap id="orderResultMap" type="com.mybatis.domain.order" >
  • <!–用id属性来映射主键字段–>
  • <id property="id" column="order_id">
  • <!–用result属性来映射非主键字段,property为实体类属性名,column为数据表中的属性–>
  • <result property= "orderNo" column="order_no"/>
  • <result property="price" column="order_price"/>
  • </reslutMap>

.mybatis实现分页的几种方式

 Mybatis  dao层开发

SSM框架之Mybatis(3)dao层开发 - 紫月冰凌 - 博客园

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值