hibernate框架的使用
1.ORM框架
Object-relation-maping,这里的对象指的是我java的对象,relation指的是关系型数据库,mapping映射。一句话,就是将java对象映射到一个数据库表。
2.ORM映射的方式
基于XML的映射方式
3.基于注解的映射方式
配置SSH工程
完全使用xml配置
- 配置web.xml
只增加了这个过滤器,其他配置不变。
- 配置spring.xml
- springmvc.xml配置
跟之前ssm工程一模一样,如下:
3.xml和注解相结合的方式
- web.xml配置跟上面一样
- Spring.xml中注销
另外,也不需要配置User.hbm.xml和hibernate.cfg.xml文件了,而是用注解代替,见User类:
springmvc.xml
配置跟ssm工程一模一样,见上。
创建SSH工程
- 使用SessionFactory操作数据库
这种是原生的方式来操作数据库。
- 相关程序见User操作
- 配置就按照上面xml和注解的方式
- 代码
备注:
在原生操作时不需要加@JsonIgnoreProperties(value={"hibernateLazyInitializer","handler"}) 也可以返回json,不会报错。
- 使用HibernateTemplate操作数据库
- 相关程序见Product操作
- 需要我们的dao继承HibernateDaoSupport基类
- 按照上述配置,当执行写操作的时候会报如下错误:
- 但是执行读操作不影响,不会报上错误。原生的sessionfactory也不会报这个错。
- 解决readOnly问题
自定义一个过滤器,该过滤器继承OpenSessionInViewFilter并且重写openSession()方法,如下:
- HQL的使用
- HQL能用在sessionFactory和hibernateTemplate中
- sessionFactory中使用
hibernateTemplate中使用
SQL的使用
- sessionFactory和hibernateTemplate都支持原生的SQL语句
- 使用场景
- hibernateTemplate中使用为例说明:
返回影响的行数。
- 总结
- 生产环境一般使用hibernateTemplate,线程安全
- hibernateTemplate跟spring结合紧密,例如声明式事务
- mybatsi需要自己写SQL语句,并且只支持原生SQL
- Mybatis只需要声明DAO层的接口,不需要自己写实现,最终是动态代理执行的业务逻辑。