手机网站下拉列表,外贸相关岗位人才招聘启事,中铁建设企业门户登录,自己公司网站设计这里写目录标题什么是ORM#xff1f;为什么mybatis是半自动的ORM框架#xff1f;动态sqlJDBC步骤#xff1a;jdbc的缺点#xff1a;JDBC,MyBatis的区别#xff1a;MyBatis相比JDBC的优势缓存一级缓存一级缓存在下面情况会被清除二级缓存最近在面试#xff0c;发现了许多自…
这里写目录标题什么是ORM为什么mybatis是半自动的ORM框架动态sqlJDBC步骤jdbc的缺点JDBC,MyBatis的区别MyBatis相比JDBC的优势缓存一级缓存一级缓存在下面情况会被清除二级缓存最近在面试发现了许多自身的问题第一就是sql不论是经典的学生教师成绩课程表还是员工工资部门表经常被问到找几篇专门的文章准备一下。 左连接右连接内连接等等的sql
索引的建立
什么是ORM
Object Relation Mapping对象关系映射。 对象指的是Java对象关系指的是数据库中的关系模型对象关系映射指的就是在Java对象和数据库的关系模型之间建立一种对应关系 比如用一个Java的Student类去对应数据库中的一张student表类中的属性和表中的列一一对应。Student类就对应student表一个Student对象就对应student表中的一行数据.
为什么mybatis是半自动的ORM框架
用mybatis进行开发需要手动编写SQL语句。而全自动的ORM框架如hibernate则不需要编写SQL语句。用hibernate开发只需要定义好ORM映射关系就可以直接进行CRUD操作了。 由于mybatis需要手写SQL语句所以它有较高的灵活性可以根据需要自由地对SQL进行定制 也因为要手写SQL当要切换数据库时SQL语句可能就要重写因为不同的数据库有不同的方言(Dialect)所以mybatis的数据库无关性低。 虽然mybatis需要手写SQL但相比JDBC它提供了输入映射和输出映射可以很方便地进行SQL参数设置以及结果集封装。并且还提供了关联查询和动态SQL等功能极大地提升了开发的效率。并且它的学习成本也比hibernate低很多MyBatis是一个持久层ORM框架底层是在JDBC的基础上进行了扩展和封装。
动态sql
!-- 示例 --
select idfind resultTypestudent parameterTypestudent
SELECT * FROM student WHERE age 18 if testname ! null and name ! AND name like %${name}%
/if
/selectJDBC
JDBC是Java提供的一个操作数据库的API。 我们平时使用jdbc进行编程大致需要下面几个
步骤
1使用jdbc编程需要连接数据库注册驱动和数据库信息 2操作Connection打开Statement对象 3通过Statement对象执行SQL返回结果到ResultSet对象 4使用ResultSet读取数据然后通过代码转化为具体的POJOPlain Old Java Objects普通的Java对象对象 5关闭数据库相关的资源。
jdbc的缺点
1.工作量比较大需要连接然后处理jdbc底层事务处理数据类型还需要操作ConnectionStatement对象和ResultSet对象去拿数据并关闭他们 2.我们对jdbc编程可能产生的异常进行捕捉处理并正确关闭资源。
JDBC,MyBatis的区别
1从层次上看JDBC是较底层的持久层操作方式而MyBatis都是在JDBC的基础上进行了封装使其更加方便程序员对持久层的操作。 2从功能上看JDBC就是简单的建立数据库连接然后创建statement将sql语句传给statement去执行如果是有返回结果的查询语句会将查询结果放到ResultSet对象中通过对ResultSet对象的遍历操作来获取数据MyBatis是将sql语句中的输入参数和输出参数映射为java对象sql修改和优化比较方便。 3从使用上看如果进行底层编程而且对性能要求极高的话应该采用JDBC的方式如果要灵活使用sql语句的话建议采用MyBatis框架。
MyBatis相比JDBC的优势
1 mybatis使用已有的连接池管理避免浪费资源提高程序可靠性。 2 mybatis提供插件自动生成DAO层代码提高编码效率和准确性。 3 mybatis 提供了一级和二级缓存需要配置打开提高了程序性能。 4 mybatis使用动态SQL语句提高了SQL维护。此优势是基于XML配置(如果不为空或者null) 5 mybatis可使用xml文件管理sql语句使用JDBC对数据库进行操作时sql语句在Java的各个类中。 6 mybatis对数据库操作结果进行自动映射在使用JDBC进行查询时返回一个结果集ResultSet,我们要从结果集中取出结果封装为需要的类型在Mybatis中可以设置将结果直接映射为自己需要的类型比如JavaBean对象、一个Map、一个List等等。 7一致的编码风格大大减少了代码的沟通交流成本。
缓存
一级缓存
默认开启同一个SqlSesion级别共享的缓存在一个SqlSession的生命周期内执行2次相同的SQL查询则第二次SQL查询会直接取缓存的数据而不走数据库当然若第一次和第二次相同的SQL查询之间执行了DML(INSERT/UPDATE/DELETE)则一级缓存会被清空第二次查询相同SQL仍然会走数据库
一级缓存在下面情况会被清除
在同一个SqlSession下执行增删改操作时不必提交会清除一级缓存 SqlSession提交或关闭时关闭时会自动提交会清除一级缓存 对mapper.xml中的某个CRUD标签设置属性flushCachetrue这样会导致该MappedStatement的一级缓存二级缓存都失效一个CRUD标签在mybatis中会被封装成一个MappedStatement 在全局配置文件中设置 这样会使一级缓存失效二级缓存不受影响
二级缓存
默认关闭可通过全局配置文件中的开启二级缓存总开关然后在某个具体的mapper.xml中增加即开启了该mapper.xml的二级缓存。二级缓存是mapper级别的缓存粒度比一级缓存大多个SqlSession可以共享同一个mapper的二级缓存。注意开启二级缓存后SqlSession需要提交查询的数据才会被刷新到二级缓存当中