具体说hibernate框架的项目搭建之前,首先说一下什么是框架。。。
框架可以理解成一个半成品的项目,它封装了一些功能,我么需要掌握的是如何驾驭这些功能,不需要操心它是怎么实现的。其实他就是按照我们之前所学的内容实现的。框架可以提高我们开发的效率。
那么,简单介绍一下,什么是hibernate框架?
hibernate是dao层的框架,完成的功能是插入crud(增(create)、查(retrieve)、改(update)、删(delete)).
hibernate是一个ORM框架(对象关系映射)。(Object Relational Mapping)
hibernate是以面向对象的方式进行数据库的增删改查,甚至不用写sql语句。
项目搭建过程:
1、导包 (hibernate-release-5.2.12.Final.rar)
除此之外,还需要一个数据库驱动包。
2、建立实体bean类
①.所有的属性应该设置为private,并附加get和set方法
②.构造函数,如果不写的话是可以的;但是如果写的话,至少要写两个(必须要包含一个空的构造函数)
③.字段名要设置为包装类。(为什么使用包装类?)
eg:小明考试考了零分和没有参加考试是有区别的。如果使用基本类型则无法表示,但是使用包装类,则可以设置为null
④.实体类中必须有一个id(主键)
具体代码示例奉上:(以学生类为例,未写构造方法)
package cn.hd.bean; public class Student { private Integer sid; private String name; private String denger; public Integer getSid() { return sid; } public void setSid(Integer sid) { this.sid = sid; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getDenger() { return denger; } public void setDenger(String denger) { this.denger = denger; } @Override public String toString() { return "Student{" + "sid=" + sid + ", name='" + name + '\'' + ", denger='" + denger + '\'' + '}'; } }
3、建立数据库对应的表
可以省略,hibernate可以帮助我们自动根据实体类生成数据表。(具体代码后面会奉上)
4、 建立映射关系
第一步:建立一个配置文件,命名和位置都没有强硬的规范,一般情况下规定,把这个文件放到对应的bean目录下,命名规范为 实体类名 + .hbm +.xml
第二步:导入约束文件,声明这个文件是hibernate配置文件,导入之后书写配置的时候会有提示信息。
hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
第三步:配置信息。
name="cn.hd.bean.User" table="User"> name="uid" column="uid"> class="native"> name="name" column="name"/> name="psd" column="psd">
补充:关于代理主键和自然主键 我的理解是,当将id也就是主键设置为int类型将它自动递增时,用代理主键中的可以有数据库自己维护,id自动增加的代理主键;而自然主键就是当id为其他类型的时候,需要手动添加主键的时候,去用自然主键。
5、配置hibernate核心配置文件
第一步:创建核心配置文件,文件的命名和位置都必须按照指定来,文件放在src目录下,文件名为hibernate.cfg.xml。
第二步:导入约束文件。
hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
第三步:配置文件。
name="hibernate.connection.driver_class">com.mysql.jdbc.Driver name="hibernate.connection.url">jdbc:mysql://localhost:3306/hibrnate?useUnicode=true&characterEncoding=utf-8 name="hibernate.connection.username">root name="hibernate.connection.password">123 name="hibernate.dialect">org.hibernate.dialect.MySQL5Dialect name="hibernate.show_sql">true name="hibernate.format_sql">true name="hibernate.hbm2ddl.auto">update resource="cn/hd/bean/User.hbm.xml"> resource="cn/hd/bean/Student.hbm.xml">
6、书写dao层测试代码
其中的student对象,就是未建立数据表之前运行;运行后数据表自动创建。
package cn.hd.test; import cn.hd.MyUtils.HibernateUtils; import cn.hd.bean.Student; import cn.hd.bean.User; import org.hibernate.Session; import org.hibernate.SessionFactory; import org.hibernate.Transaction; import org.hibernate.cfg.Configuration; import org.junit.Test; public class Demo { public static void main(String[] args) { /*读取配置文件 .configure()自动读取cfg.xml文件*/ Configuration configuration = new Configuration().configure(); /*获得sessionFactory对象,自动生成表,读取数据库信息,检查数据表是否更新 * 这个对象我们用它只用来获取session * 实际上这行代码 它检查了数据库和实体类 * 如果有变化它会更新 * 非常耗费资源 解决方案:(封装工具类) * */ SessionFactory sessionFactory = configuration.buildSessionFactory(); /*使用sessionFactory获得session对象*/ Session session = sessionFactory.openSession(); /*开启事务 * hibernate 必须开启事务 * 不开启事务不会将数据保存到数据库 * */ Transaction transaction = session.beginTransaction(); /*向数据表中插入一条数据*/ /*User user = new User(); user.setName("张三"); user.setPsd("38383838");*/ Student student = new Student(); student.setName("张三"); student.setDenger("男"); /*添加、保存方法*/ session.save(student); /*提交事务*/ transaction.commit(); /*关闭资源*/ session.close(); sessionFactory.close(); } }如果能够往数据表中添加数据的话,就说明你的hibernate框架项目搭建成功!!!