说明: 整理自互联网、自己学习使用。
1.介绍下Mybatis?(什么是Mybatis?)
- mybatis是一个ORM框架,主要承担着与数据库交互的任务。内部封装了jdbc,使用者无需关注驱动加载、创建连接、创建statement等与业务无关的过程,只需要关注sql语句本身。mybatis支持原生的sql,可以严格控制sql语句的性能。
- mybatis 支持使用xml和注解来实现对象和和数据库表的映射, 避免了jdbc代码和手动设置参数和结果集。
- 可以将各种要执行的statement配置起来, 通过java对象和sql中的动态参数映射成最终的sql语句, 并且可以将mybatis执行的结果集映射出java对象进行返回。
- 适合对性能要求高, 需求变化较多的项目。是一个灵活的DAO层解决方案。
2.Mybatis有哪些优点
- 基于sql语句编程, 灵活性高。 不会对现有的程序或者数据库造成影响。
- xml语句中编写sql可以很好的实现与java代码的解耦。
- 支持动态SQL语句的编写。
- 与各种数据库兼容性高。
- 可以与Spring、SpringBoot很好的集成。
- 提供对象关系映射标签, 支持对象关系组件维护。
3.Mybatis的缺点
- 手写原生sql, 对sql的功底要求高。
- sql依赖数据库, 可移植性差, 不好随意切换数据库。
4.MyBatis与Hibernate有哪些不同?
- Hibernate不完全是一个ORM框架, mybatis 需要程序员手写sql。
- mybatis只需关注sql, 可以对sql进行优化, 适合对关系数据模型要求不高的软件开发。
- hibernate 对象关系映射能力较强, 数据库无关性好。但需要额外的学习hql..
5.Mybatis中#{}
和${}
的区别是什么?
#{}
是参数占位符, 是对具体参数的预处理,Mybatis会将sql语句中的#{}
替换成?
,然后在sql执行之前调用PrepareStatement的参数设置方法, 按序给?占位符设置参数值。比如:ps.sestInt(0,parameterValue)
至于#{item.name}
的取值方式则是使用反射方式从参数对象中获取item对象的name属性值, 相当于parm.getItem().getName()
使用#{}
可以有效的防止SQL注入, 提高系统的安全性。${}
可以理解为是替换{}
内部变量的值。是Properties文件中的变量占位符, 可以用于标签属性或者sql内部, 属于静态的文本替换,${driver}
会被静态替换为com.mysql.jdbc.Driver
6.当实体类的属性名和字段名的不一样怎么办? 如何处理
- 如果只是下划线和驼峰命名的区别直接开启驼峰命名规则用的多。
- 如果不止这个区别
- 在sql 语句中定义字段名的别名, 使得字段名的别名和实体类的属性名一致即可。
<select id=”selectorder” parametertype=”int” resultetype=”com.xx.domain.order”> select order_id id, order_no orderno ,order_price price form orders where order_id=#{id}; </select>
- 使用
<resultMap>
标签来映射字段名和实体类的属性名。
<select id="getOrder" parameterType="int" resultMap="orderresultmap"> select * from orders where order_id=#{id} </select> <resultMap type=”me.gacl.domain.order” id=”orderresultmap”> <!–用 id 属性来映射主键字段–> <id property=”id” column=”order_id”> <!–用 result 属性来映射非主键字段,property 为实体类属性名,column 为数据表中的属性–> <result property = “orderno” column =”order_no”/> <result property=”price” column=”order_price” /> </reslutMap>
7.如何使用模糊查询?
- 在Java代码中直接添加通配符
String name = "%洋%";
List<Person> persons = PersonMapper.selectLike(name);
<select id=”selectLike”>
select * from foo where bar like #{value}
</select>
- 在sql语句中拼接通配符, 会引起sql注入。
<select id=”selectlike”>
select * from foo where bar like "%"#{value}"%"
</select>
8.xml文件中, 除了常见的 select、insert、update、delete 还有哪些标签?
来自京东