目录
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实现分页的几种方式
- 借助数组进行分页
- 借助Sql语句进行分页
- 拦截器分页
- RowBounds实现分页
mybatis实现分页的几种方式_Jaymeng8848的博客-CSDN博客_mybatis分页的几种方式