快速入门MyBatis

复习总结

day03-----------------MyBatis

1、MyBatis简介

本是apache的一个开源项目,他是一个优秀的持久层框架。它对jdbc操作数据库的过程进行了封装,使开发者只关注SQL本身,而不需要花费精力去处理例如注册驱动、创建connection、创建statement、手动设置参数、结果检索等jdbc复杂的操作。

优点:
1. 简单易学,容易上手
2. 与jdbc相比,消除了大量冗余代码,不需要手动开关连接
3. 能够与spring集成
4. 支持动态sql

缺点:
1. sql语句编写工作量大
2. 依赖于数据库,导致数据库移植性差

2、jdbc问题总结

1. 数据库创建连接、释放繁琐造成资源浪费
2. sql语句在代码中硬编码,不易维护--------MyBatis将sql配置在了XXXmapper.xml中
3. 使用preparedstatement向占位符传参数存在硬编码,不易维护
4. 对结果集进行解析存在硬编码----------MyBatis自动将结果映射到java对象

3、MyBatis的编程步骤是什么?

1. 创建SqlSessionFactory
2. 通过SqlSessionFactory创建SqlSession
3. 通过SqlSession操作数据库
4. 调用session.commit()提交事务
5. 调用Session.close()关闭会话

4、MyBatis和Hibernate的区别

ORM:对象关系映射

1. 都是持久层框架,底层都是封装的jdbc,区别是Mybatis是一个不完全的ORM框架,需要程序员自己编写Sql语句。MyBatis可以通过XML或者注解方式灵活配置要运行的sql语句,并将java对象和sql语句映射生成最终执行的sql,最终将sql执行的结果在映射成java对象。但是MyBatis无法做到数据无关性,适合对关系数据模型要求不高的软件开发。
2. Hibernate是一个完全的ORM框架,不需要程序员自己编写SQL语句。

5、使用MyBatis的mapper接口调用时有哪些要求

1. mapper.xml的namespace必须是mapper接口的类路径
2. 接口方法的名称与映射文件中sql的id一致
3. 接口方法的参数类型与映射文件的parameterType一致
4. 接口方法的返回值类型与映射文件的resultType一致

6、#{}和${}的区别是什么?

1. #{}解析传递进来的参数数据
2. ${}对传递进来的参数原样拼接在SQL中
3. #{}是预编译处理,${}是字符串替换
4. 使用#{}可以有效防止sql注入

7、当实体类中的属性名和表中的字段名不一样 ,怎么办 ?

1. 使用别名,将别名设置成与属性名一致
2. 使用resultMap

8、如何获取自动生成的(主)键值?

1. useGeneratedKeys

2. selectKey

9、简单的说一下MyBatis的一级缓存和二级缓存?

一级缓存是默认使用的,二级缓存需要手动开启。

禁止使用缓存useCache="false"

select语句默认是false

增删改语句默认是true

1. 一级缓存:就是sqlsession,在sqlsession中有一个是数据区域,是map结构,这个区域就是一级缓存区域。一级缓存中的key就是sql语句、条件、statement等信息组成一个唯一值。一级缓存中的value,就是查询出的结果对象----------缓存的数据只在SqlSession内有效。



2. 二级缓存:就是同一个namespace下的mapper,二级缓存中,也有一个map----------所以对SqlSession是共享的。


10、MyBatis的动态sql

MyBatis 的强大特性之一便是它的动态 SQL。如果你有使用 JDBC 或其它类似框架的经验,你就能体会到根据不同条件拼接 SQL 语句的痛苦。例如拼接时要确保不能忘记添加必要的空格,还要注意去掉列表最后一个列名的逗号。利用动态 SQL 这一特性可以彻底摆脱这种痛苦。

10.1. if

10.2. choose (when, otherwise)

10.3. trim (where, set)



10.4. foreach

11、通常一个XML映射文件,都会有一个mapper接口与之对应,谈一谈这个mapper接口的工作原理是什么?mapper接口里的方法可以重载吗?

1. 接口的全限定名就是映射文件的namespace值,接口的方法名就是映射文件中sql的id,接口全限定名+方法名可以唯一定位一个mappedStatement。
2. mapper接口里的方法不能重载,因为是全限定名+方法名的保存和寻找策略。
3. 工作原理:动态代理,为mapper接口生成代理proxy对象,代理对象执行接口方法,转而执行sql,然后将结果返回。

12、Mybatis的Xml映射文件中,不同的Xml映射文件,id是否可以重复?

1. 不同的XML配置文件,如果配置了namespace,那么id可以重复
2. 如果没有配置namespace,那么id不能重复

13、 一对一、一对多的关联查询 ?

14、模糊查询怎么写

15、Mybatis是如何将sql执行结果封装为目标对象并返回的?都有哪些映射形式?

1. 先建立属性名和表的字段之间的映射关系:别名或者resultMap
2. 通过反射创建对象,使用反射给对象的属性逐一赋值并返回

16、动态sql的工作原理

使用OGNL从sql参数对象中计算表达式的值,根据表达式的值动态拼接sql,以此来完成动态sql的功能

17、为什么说Mybatis是半自动ORM映射工具?它与全自动的区别在哪里?

Hibernate属于全自动ORM映射工具,使用Hibernate查询关联对象或者关联集合对象时,可以根据对象关系模型直接获取,所以它是全自动的。而Mybatis在查询关联对象或关联集合对象时,需要手动编写sql来完成,所以,称之为半自动ORM映射工具。

18、接口绑定有几种实现方式,分别是怎么实现的?

接口绑定有两种实现方式,一种是通过注解绑定,就是在接口的方法上面加上 @Select@Update等注解里面包含Sql语句来绑定, 
另外一种就是通过xml里面写SQL来绑定, 在这种情况下,要指定xml映射文件里面的namespace必须为接口的全路径名.

19、什么情况下用注解绑定,什么情况下用xml绑定?

    当Sql语句比较简单时候,用注解绑定, 
    当SQL语句比较复杂时候,用xml绑定,一般用xml绑定的比较多

猜你喜欢

转载自blog.csdn.net/qq_41606459/article/details/86522760