javaEE之Hibernate架构之数据库连接工具模版制作
来源:互联网 发布:禁止网络标语 编辑:程序博客网 时间:2024/06/06 09:54
O/R Mapping
对象关系映射(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会帮我们回滚的) }}
- javaEE之Hibernate架构之数据库连接工具模版制作
- javaEE之------Hibernate学习笔记
- javaee之hibernate的schemaExport
- javaee之hibernate(1)
- javaee之hibernate—session
- JAVAEE面试之Hibernate缓存
- javaee之hibernate之many-to-one
- javaEE之JPA、EJB、JSF架构工程
- JavaEE学习之strut2与Hibernate结合
- javaee之hibernate的基础练习
- javaee之hibernate的加强巩固练习
- javaee之hibernate映射和hql
- javaee之hibernate的缓存与注解
- javaee之hibernate(one-to-many)
- javaEE开发之导出excel工具类
- Hibernate之架构
- Hibernate学习之架构
- Hibernate工具类模版
- Codeforces Round #428 (Div. 2) D. Winter is here(容斥,补题)
- Qt5插件开发
- play1.x 第三弹 :控制器层(Controllers)
- 在Drupal Commerce上运行的真功夫餐饮系统十亿级交易业务
- windows下使用dos命令查看每个java文件的行数
- javaEE之Hibernate架构之数据库连接工具模版制作
- Linux内核启动及根文件系统加载过程
- 免费软件真的免费吗?
- 【Android_View】ImageView源码简析笔记(三)
- NDK运行时库简介
- Weblogic安装教程(转载)
- 根据ip区分内外网
- Python学习(组织文件)
- 2017百度之星1001 chess(排列组合)