java基础知识(17)---面试宝典

72、hibernate中对象的三种状态?
瞬时态:用new创建的对象,它没有持久化,没有处于Session中,处于此状态的对象叫临时对象;(未与Hibernate发生关系)
持久态:已经持久化,加入到了Session缓存中。如通过hibernate语句保存的对象。处于此状态的对象叫持久对象;(正在与hibernate发生关系)
游离态(托管态): 持久化对象脱离了Session的对象。如Session缓存被清空的对象。特点:已经持久化,但不在Session缓存中。处于此状态的对象叫游离对象;(与Hibernate发送过关系,但是现在没有关系了)

73、Hibernate中session的load()和get()的区别
二者在Hibernate都可以实现根据主键(oid)查询出对应的记录他们的区别如下:
1、get()方法执行的时候,会立即向数据库发出查询语句,称为立即加载。
而load()方法执行完之后, 只有等真正使用该对象属性的时候,才会发出sql语句,称为延迟加载;
2、如果数据库中没有对应的记录,get()方法返回的是null。而load()方法出现异常ObjectNotFoundException 。

74、MyBatis的执行流程
1、读取Mybatis配置文件
2、根据读取到的配置文件生成SqlSessionFactory
3、创建SqlSession对象(开启事务)
4、操作目标数据库
5、提交事务
6、关闭SqlSession

75、MyBatis的优点 和缺点
优点:
0、易于上手和掌握
1、对JDBC进行封装,简化操作。
2、可将Sql语句写在xml中,方便统一管理和优化
3、解除的SQL与代码的耦合
缺点:
1、Sql工作量很大,尤其是当表中字段比较多的时候
2、sql依赖数据库,导致数据库移植型比较差

76、MyBatis中用#和$的区别
1、使用#传入参数,MyBatis中会产生PreparedStatement并且可以安全性地设置参数 (用问号 ?)的值。因为sql语句已经编译好了,传入参数的时候,不会重新产生sql语句安全性高。
2、用 $会产生sql注入的问题:
$ (something)则直接将大括号里的something插入字符串。
生成静态SQL所以可能会产生sql注入问题。所以,使用原则是能用的#就不用$
3、在特定场景下,例如根据页面信息动态设计排序字段 : order by ‘{param}’,这时候只能使用$了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值