javaEE之Hibernate架构之数据库连接工具模版制作
2017-08-14 13:50
513 查看
O/R Mapping
对象关系映射(ORM)技术,操纵数据库 通过使用描述对象和数据库之间映的射元数据将java程序中的对象自动持久化到数据库
在对数据库操纵时需要写mapping文件
然后通过session.save(user)就能不用写sql语句,自动把user存到数据库
类似工具还有mybatis(更灵活)
Hibernate是一个开放源码的、非常优秀、成熟的O/R Mapping框架。它提供了强大、高性能的Java对象和关系数据的持久化和查询功能。
Hibernate 只是一个将持久化类与数据库表相映射的工具,每个持久化类实例均对应于数据库表中的一条数据行。可以使用面向对象的方法操作此持久化类实例,完成对数据库表的插入、删除、修改等操作。
利用Hibernate操作数据库,我们通过应用程序经过Hibernate持久层来访问数据库,其实Hibernate完成了以前JDBC的功能,不过Hibernate使用面向对象的方法操作数据库。
Hibernate体系结构:
Hibernate入门示例。
第1步: 先建一个Java工程导入使用Hibernate最小必要包。可以到网站下载Hibernate最新的包,如果访问数据库,则需要导入数据库驱动包。最小必要包:
第2步:在src创建配置文件hibernate.cfg.xml,放置在src目录中。
第3步:编写一个会话工厂类。通过会话工厂类产生一个会话Session对象。Session对象是Hibernate的核心。任何对数据库操作都在会话中进行的。
第4步:编写POJO类以及映射文件。
第5步:编写测试文件
一个完整示例,显示了Hibernate编程基本思路。
我们需要建立值对象和它的配置文件:
hibernate.cfg.xml
我们采用线程池获取方式包装hibernate获取服务器连接操作的sesssion对象
也就是我们以后可以直接拿来用的工具模版
然后就能进行操作了:
对象关系映射(ORM)技术,操纵数据库 通过使用描述对象和数据库之间映的射元数据将java程序中的对象自动持久化到数据库
在对数据库操纵时需要写mapping文件
如<class User> <column > </class>
然后通过session.save(user)就能不用写sql语句,自动把user存到数据库
类似工具还有mybatis(更灵活)
Hibernate是一个开放源码的、非常优秀、成熟的O/R Mapping框架。它提供了强大、高性能的Java对象和关系数据的持久化和查询功能。
Hibernate 只是一个将持久化类与数据库表相映射的工具,每个持久化类实例均对应于数据库表中的一条数据行。可以使用面向对象的方法操作此持久化类实例,完成对数据库表的插入、删除、修改等操作。
利用Hibernate操作数据库,我们通过应用程序经过Hibernate持久层来访问数据库,其实Hibernate完成了以前JDBC的功能,不过Hibernate使用面向对象的方法操作数据库。
Hibernate体系结构:
Hibernate入门示例。
第1步: 先建一个Java工程导入使用Hibernate最小必要包。可以到网站下载Hibernate最新的包,如果访问数据库,则需要导入数据库驱动包。最小必要包:
第2步:在src创建配置文件hibernate.cfg.xml,放置在src目录中。
第3步:编写一个会话工厂类。通过会话工厂类产生一个会话Session对象。Session对象是Hibernate的核心。任何对数据库操作都在会话中进行的。
第4步:编写POJO类以及映射文件。
第5步:编写测试文件
一个完整示例,显示了Hibernate编程基本思路。
我们需要建立值对象和它的配置文件:
package cn.hncu.demo.domain; public class Student { private String studId; private String studName; private Integer age; private String deptId; public String getstudId() { return studId; } public void setstudId(String studId) { this.studId = studId; } public String getstudName() { return studName; } public void setstudName(String studName) { this.studName = studName; } public Integer getAge() { return age; } public void setAge(Integer age) { this.age = age; } public String getDeptId() { return deptId; } public void setDeptId(String deptId) { this.deptId = deptId; } }
<?xml version="1.0"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"> <hibernate-mapping package="cn.hncu.demo.domain"> <class name="Student" table="students" catalog="hib"> <!-- id标记是指Student类中的属性变量,该属性是对应表主键字段的 --> <id name="studId" type="java.lang.String"> <!-- column标记是指数据库表中的哪一列(字段) --> <column name="id" length="8"></column> </id> <!-- 其他字段都用property 只有主键用id --> <property name="studName" type="java.lang.String"> <column name="name" length="40"></column> </property> <property name="age" type="java.lang.Integer"> <column name="age"></column> </property> <property name="deptId" type="java.lang.String"> <column name="deptId" length="8"></column> </property> </class> </hibernate-mapping>
hibernate.cfg.xml
<?xml version='1.0' encoding='utf-8'?> <!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd"> <hibernate-configuration> <session-factory> <property name="connection.driver_class">com.mysql.jdbc.Driver</property> <property name="connection.url">jdbc:mysql://127.0.0.1:3306/hib</property> <property name="connection.username">root</property> <property name="connection.password">1234</property> <!-- SQL dialect方言 --> <property name="dialect">org.hibernate.dialect.MySQLDialect</property> <!-- 一定要把我们写的对象映射文件配置进来,否则没法使用hibernate的ORM功能 --> <mapping resource="cn/hncu/demo/domain/Student.hbm.xml" /> </session-factory> </hibernate-configuration>
我们采用线程池获取方式包装hibernate获取服务器连接操作的sesssion对象
也就是我们以后可以直接拿来用的工具模版
package cn.hncu.demo.util; import org.hibernate.HibernateException; import org.hibernate.Session; import org.hibernate.SessionFactory; import org.hibernate.boot.registry.StandardServiceRegistry; import org.hibernate.boot.registry.StandardServiceRegistryBuilder; import org.hibernate.cfg.Configuration; public class HibernateUtil { private static SessionFactory sessionFactory = null; private static ThreadLocal<Session> t = new ThreadLocal<Session>(); static { try { Configuration config = new Configuration().configure(); StandardServiceRegistry serviceRegistry = new StandardServiceRegistryBuilder() .applySettings(config.getProperties()).build(); sessionFactory = config.buildSessionFactory(serviceRegistry); } catch (Throwable e) { throw new ExceptionInInitializerError(e); } } public static Session getSession() throws HibernateException { Session session = t.get(); // 如果连session都拿不到,则session为null,则返回null // 如果拿到session没有开启,则将session开启 if (null == session || !session.isOpen()) { session = (sessionFactory != null) ? sessionFactory.openSession() : null; t.set(session); } return session; } public static SessionFactory getSessionFactory() { return sessionFactory; } // 关闭与数据库的会话 public static void closeSession() throws HibernateException { t.set(null); } }
然后就能进行操作了:
package cn.hncu.demo; import org.hibernate.Session; import cn.hncu.demo.domain.Student; import cn.hncu.demo.util.HibernateUtil; //Hibernate中session是不能关也关不了的 public class StudentManager { public static void main(String[] args) { Session session = HibernateUtil.getSession(); // 开启事务 session.beginTransaction(); Student stu = new Student(); stu.setstudId("S006"); stu.setstudName("jack"); stu.setAge(22); stu.setDeptId("p002"); session.save(stu); session.getTransaction().commit();// 事务提交(如果出异常,hibernate会帮我们回滚的) } }
相关文章推荐
- android 监听短信数据库,制作短信控制工具,控制别人的手机!!(一)
- 让Hibernate自动重新连接数据库——使用c3p0连接池
- Navicat Premium 连接Oracle 数据库(图文教程和Tool工具、安装包)、附下载地址。
- oracle 11g 查询时数据库有值返回空的bug解决(hibernate架构有这个问题)
- 面试题:hibernate怎么连接数据库
- 一个基础的关于javaee连接数据库的代码
- Hibernate 不同数据库的连接及SQL方言
- idea使用数据库连接工具
- Could not open Hibernate Session for transaction, 数据库连接超时解决方法
- pb 制作登陆界面连接数据库
- Hibernate 连接访问多个数据库
- jsp连接数据库dao层的编写,可以形成直接的工具文件
- hibernate如何连接数据库
- 通过hibernate session.connection()获得数据库连接时,导致的查询缓慢甚至假死机问题
- Hibernate与各种数据库连接 配置
- 🈲Eclipse通过jdbc连接数据库制作简单登陆界面【新手必看】
- [转]Hibernate不能自动建表解决办法及Hibernate不同数据库的连接及SQL方言
- javaEE 各类数据库JDBC驱动程序名及连接字符串汇总
- hibernate不同数据库的连接及方言
- 连接数据库模版