一 半自动与全自动的区别
全自动:指ORM映射工具可以在查询对象或关联集合对象时,可以根据对象的关系模型直接获取。例如Hibernate框架。
半自动:值ORM映射工具在查询关联对象或关联集合对象时,需要手动编写sql语言来完成。例如Mybatis。
二 什么是ORM框架
OPM框架是连接数据库的桥梁,只需提供了持久化类与表的映射关系,ORM框架就能在运行时将参照映射文件的信息,将对象的信息持久到数据库中的。
目的:是为了解决面型对象与关系数据库存在的互不匹配的现象的框架。
目前主流的ORM的框架为以下几种
(1)Hibernate 全自动 需要写hql语句
(2)iBATIS mybatis的前身,半自动,自己写sql语句,可操作性强,小巧
(3)mybatis 半自动
(4)eclipselink
(5)JFinal
使用ORM的优势:
当我们实现应用程序的时候,由于会写特别多的数据访问层的代码,从数据库保存,删除,读取对象信息,而这些代码都是重复的。通过使用ORM将大大减少重复的代码。
三sql中一对多,多对一,一对一关系的解析
sql一对一:比如说一个班级有很多学生,可是这个班级只有一个班主任。在这个班级中随便找一个人,就会知道他们的班主任是谁;知道了这个班主任就会知道有哪几个学生。这里班主任和学生的关系就是一对多。
多对一:比如说一个班级有很多学生,可是这个班级只有一个班主任。在这个班级中随便找一个人,就会知道他们的班主任是谁;知道了这个班主任就会知道有哪几个学生。这里学生和班主任的关系就是多对一。
一对一:比如说一个班级有很多学生,他们分别有不同的学号。一个学生对应一个学号,一个学号对应一个学生;通过学号能找到学生,通过学生也能得到学号,不会重复。这里学生和学号的关系就是一对一。
多对多:比如说一个班级有很多学生,他们有语文课、数学课、英语课等很多课。一门课有很多人上,一个人上很多门课。这里学生和课程的关系就是多对多。
四.mybatis中#与$的区别
#占位符:
1> MyBatis处理 #{ } 占位符,使用的 JDBC 对象是PreparedStatement 对象,执行sql语句的效率更高。
2> 使用PreparedStatement 对象,能够避免 sql 注入,使得sql语句的执行更加安全。
3> #{ } 常常作为列值使用,位于sql语句中等号的右侧;#{ } 位置的值与数据类型是相关的。
4> #传入的参数在SQL中显示为字符串(当成一个字符串),会对自动传入的数据加一个双引号。
$占位符:
1> MyBatis处理 ${ } 占位符,使用的 JDBC 对象是 Statement 对象,执行sql语句的效率相对于 #{ } 占位符要更低。
2> ${ } 占位符的值,使用的是字符串连接的方式,有 sql 注入的风险,同时也存在代码安全的问题。
3> ${ } 占位符中的数据是原模原样的,不会区分数据类型。
4> ${ } 占位符常用作表名或列名,这里推荐在能保证数据安全的情况下使用 ${ }。
5.MyBatis缓存
MyBatis包含一个非常强大的查询缓存特性,它可以非常方便地定制和配置缓存。缓存可以极大的提升查询效率。MyBatis系统中默认定义了两级缓存:一级缓存和二级缓存,默认情况下,只有一级缓存默认开启。二级缓存需要手动开启和配置,他是基于namespace级别的缓存。一级缓存被称为sqlSession级别的缓存, 二级缓存被称为表级缓存。
一级缓存:
MyBatis的一级缓存默认是开启的,它在一个sqlSession会话里面的所有查询操作都会保存到缓存中,一般来说一个请求中的所有增删改查操作都是在同一个sqlSession里面的,所以我们可以认为每个请求都有自己的一级缓存,如果同一个sqlSession会话中2个查询中间有一个 insert 、update或delete 语句,那么之前查询的所有缓存都会清空。
使用MyBatis开启一次和数据库的会话,MyBatis会创建出一个SqlSession对象表示一次数据库会话,在对数据库的一次会话中, 有可能会反复地执行完全相同的查询语句,每一次查询都会去查一次数据库,为了减少资源浪费,mybaits提供了一种缓存的方式(一级缓存)。
二级缓存:
二级缓存是全局的,也就是说;多个请求可以共用一个缓存,二级缓存需要手动开启。二级缓存针对的是同一个namespace,所以建议是在单表操作的Mapper中使用,或者是在相关表的Mapper文件中共享同一个缓存。一级缓存无过期时间,只有生命周期,缓存会先放在一级缓存中,当sqlSession会话提交或者关闭时才会将一级缓存刷新到二级缓存中;开启二级缓存后,用户查询时,会先去二级缓存中找,找不到在去一级缓存中找,然后才去数据库查询;
6.mybatis和hibernate的区别
mybatis是半自动,hibernate是全自动
mybatis灵活性更高可以更方便地满足用户的需求,在sql的优化上优于hibernate
hibernate的可移植性远大于mybatis
hibernate的二级缓存需要在配置文件中设置是哪种缓存,在使用时会更安全,在检查到脏数据时会报错,而mybatis在使用二级缓存时需要更小心
mybatis是一个轻量级框架,学习 起来会更轻松,而hibernate的学习就需要花费更多时间
7.分页插件PageHelper
需要先在pom文件中导入插件,通过传入当前页码和每页的数据条数就能完成分页的工作
缺点:对逆向工程不是很适配,只能支持非条件查询
8.延时加载
延迟加载(lazy load)是(也称为懒加载)Hibernate3关联关系对象默认的加载方式,延迟加载机制是为了避免一些无谓的性能开销而提出来的,所谓延迟加载就是当在真正需要数据的时候,才真正执行数据加载操作。即简单理解为就是在使用的时候,在发出sql语句的相关的查询