博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
ORM框架Hibernate (一) 对DAO封装和抽象
阅读量:5953 次
发布时间:2019-06-19

本文共 3885 字,大约阅读时间需要 12 分钟。

  1. 说明
    1. 前面已经给大家介绍了Struts这个框架,Struts是对Web项目的表示层进行了封装,而Hibernate是对Web项目中DAO层进行封装,也即是.NET中我们常用到的D层封装,即对访问数据库的一层进行的封装。
    1. D层中尽管我们引入了一个SQLHlper类,在执行CRUD操作中的一些共同的部分抽象出来了,但是远远不够的还要进行更深层次的封装,Hibernate这个框架封装的比较彻底,使用了这个框架后。
      1. 不用我们自己写SQL语句
      1. 甚至连表都不用自己建立
    1. 使用了Hibernate可以不用自己建表,我们只关心实体,关心面向对象的部分,而不用关心关系型数据库。
      1. 它对面向对象与关系型模式之间解耦了,在一定程度上让我们只关心面向对象部分。
      1. 体现了OOAOODOOP的编程思想
    1. Hibernate是面向对象的程序设计语言和关系数据库之间的桥梁,Hibernate允许程序开发者采用面向对象的方式来操作关系数据库。
  1. 特点
    1. 优点
      1. 轻量级
        1. 是相对于重量级而言,不依赖于容器,易于配置
          1. 比如Struts是一个重量级,它需要容器支持Tomcat
        1. 没有侵略性API,支持透明持久化
          1. 即在写持久化层时,不用实现或继承任何Hibernate的类,对其它类的依赖性小,我们知道Struts,在使用ActionFormAction等类时,必须实现或者继承是Struts父类才可以,Hibernate不用继承。
            1. POJO
              1. POJO是Plain Old Java Objects的缩写,即简单的Java对象,不但任任何角色对象。
              1. 其中有一些属性及其getter setter方法的类,没有业务逻辑,有时可以作为 VO(value -object)或 dto(Data Transform Object)来使用。
              1. 用来表示普通的Java对象,不是JavaBean, EntityBean 或者 SessionBean。POJO不担当任何特殊的角色,也不实现任何特殊的Java框架的接口如,EJB, JDBC等等。
        1. 独立性好
          1. 易于测试,它不像Struts那样即使测试一个小小几行代码的Java类,也需要启动很大的TomcatJboss等,一般启动还要等半天的功夫,在Hibernate中在类中加入Main方法就可以进行测试,很方便。
      1. 它没有侵入性和测试非常简单 这是它流行的一个原因。
    1. 缺点
      1. 优点和缺点是相对的,正式由于它的优点也成为了它的缺点,因为它封装性好,这样对数据库如果进行一些特殊操作不好实现。
      1. 大量的更新或者统计查询操作会不方便。
  1. 环境搭建
    1. Hibernate不仅仅支持Web程序,Java项目等也支持,这一点要比Struts应用范围广,毕竟它属于轻量级,扩展性能好。
    1. 搭建框架同Struts类似,只需把Hibernate包引入即可,多了一个实体配置文件,是这里不细说,看一下搭建好的截图。
      1. 搭建好截图
        1. 文件
  1. 建立实体和简单操作
    1. 建立一个实体类,看一下它是如何不用建表而自己对应数据库的,以User表为例:
      1. User
        1. import java.util.Date;public class User {		private String id;	private String name;	private String password;	private Date createTime;	private Date expireTime;	public String getId() {		return id;	}	public void setId(String id) {		this.id = id;	}	public String getName() {		return name;	}	public void setName(String name) {		this.name = name;	}	public String getPassword() {		return password;	}	public void setPassword(String password) {		this.password = password;	}	public Date getCreateTime() {		return createTime;	}	public void setCreateTime(Date createTime) {		this.createTime = createTime;	}	public Date getExpireTime() {		return expireTime;	}	public void setExpireTime(Date expireTime) {		this.expireTime = expireTime;	}	}
      1. User.hbm.xml映射文件
        1. 该文件是用于实体对数据库表的映射,可以自定义表名或者字段名
      1. Hibernate.cfg.xml系统配置
        1. com.mysql.jdbc.Driver
          jdbc:mysql://localhost:3306/hibernate_first
          root
          123456
          org.hibernate.dialect.MySQLDialect
          true
          true
        1. 这属于系统级别文件,指明表映射文件,以及数据库配置信息。
      1. MySql 效果
    1. 如何不用写SQL语句,像表里插入数据?
      1. Test
        1. import java.util.Date;import org.hibernate.Session;import org.hibernate.SessionFactory;import org.hibernate.cfg.Configuration;public class Test {	/**	 * @param args	 */	public static void main(String[] args) {		//读取hibernate.hbm.xml文件		Configuration cfg=new Configuration().configure();		//建立SessionFactory相当于数据库的一个镜像		SessionFactory factory=cfg.buildSessionFactory();		//取得Session		Session session=null;		try {			session=factory.openSession();			//开启事务			session.beginTransaction();			User user=new User();			user.setName("李龙生");			user.setPassword("123456");			user.setCreateTime(new Date());			user.setExpireTime(new Date());						//保存User对象			session.save(user);			//提交事务			session.getTransaction().commit();								} catch (Exception e) {			e.printStackTrace();			//回滚事务			session.getTransaction().rollback();								}finally{			//关闭Session			if (session!=null) {				if (session.isOpen()) {					session.close();				}			}						}			}}
        1. 这里面涉及到了SessionFatory/Session等对象,专用于操作数据库。
      1. 从下面可以看到,执行后,数据库中多了一条数据
  1. 从对数据库的操作可以看出,省去了很多代码的编写,方便了我们也提高了开发效率,框架带来的好处很多,建议大家多多使用。

 

你可能感兴趣的文章
解决vim中不能使用小键盘
查看>>
jenkins权限管理,实现不同用户组显示对应视图views中不同的jobs
查看>>
我的友情链接
查看>>
CentOS定时同步系统时间
查看>>
批量删除用户--Shell脚本
查看>>
如何辨别android开发包的安全性
查看>>
Eclipse Java @Override 报错
查看>>
知道双字节码, 如何获取汉字 - 回复 "pinezhou" 的问题
查看>>
linux中cacti和nagios整合
查看>>
Parallels Desktop12推出 新增Parallels Toolbox
查看>>
正则表达式验证身份证格式是否正确
查看>>
xml格式文件解析
查看>>
ios百度地图-路径规划
查看>>
Python高效编程技巧
查看>>
配置Eclipse使用maven构建项目默认JDK为1.8
查看>>
jsp内置对象以及jsp动作
查看>>
Struts上路_09-数据类型转换
查看>>
CMake与动态链接库(dll, so, dylib)
查看>>
myeclipse(eclipse)乱码处理
查看>>
SpringBoot 过滤器, 拦截器, 监听器 对比及使用场景
查看>>