`

第一章 Hibernate环境搭建

阅读更多
如果是WEB工程,我们只需要将这些包复制到lib目录下即可,如果是Java工程,那这里我们就需要建一个User lib库,将这些jar包添加到我们的UserLib库,然后将Userlib库加入到我们的工程即可,注意一点,我们这里因为用到了SQLServer2005数据库,故我在这里还加入了sqljdbc4.jar这个包,

添加配置文件
在添加配置文件之前,我们先将数据库建立起来
create table Users(
userId NVARCHAR(32),
userName NVARCHAR(20),
userPwd NVARCHAR(20),
primary key(userId)
)
注意这里, 主键userId我用的是32位的一个字符串来存储的.

然后我们建立我们的model层:
package chapter1.model;

public class User {
private String userId;
private String userName;
private String userPwd;

public User() {
super();
}

public User(String userName, String userPwd) {
super();
this.userName = userName;
this.userPwd = userPwd;
}

public User(String userId, String userName, String userPwd) {
super();
this.userId = userId;
this.userName = userName;
this.userPwd = userPwd;
}

public String getUserName() {
return userName;
}

public void setUserName(String userName) {
this.userName = userName;
}

public String getUserPwd() {
return userPwd;
}

public void setUserPwd(String userPwd) {
this.userPwd = userPwd;
}

public String getUserId() {
return userId;
}

public void setUserId(String userId) {
this.userId = userId;
}
}

Hibernate需要知道怎样去加载(load)和存储(store)持久化类的对象。这正是Hibernate映射文件发挥作用的地方。映射文件告诉Hibernate它,应该访问数据库(database)里面的哪个表(table)及应该使用表里面的哪些字段(column)。
以下是配置文件内容:
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
        "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
        "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">

<hibernate-mapping>
<class name="chapter1.model.User" table="Users">
<id name="userId" type="java.lang.String">
<column name="userId" length="32" />
<generator class="uuid.hex" />
</id>
<property name="userName" type="java.lang.String" column="userName" />
<property name="userPwd" type="java.lang.String">
<column name="userPwd" />
</property>
</class>
</hibernate-mapping>
注意这里,配置文件的命名有一定的规则,为 ModelClassName.hbm.xml,一定要注意,dtd文件的引用不要删除.并且此文件必须和model存放在一个包下面.
<class name="chapter1.model.User" table="Users">
这一句是告诉Hibernate,我的这个Model和数据库中的哪张表对应起来

<id name="userId" type="java.lang.String">
<column name="userId" length="32" />
<generator class="uuid.hex" />
</id>
id标签是Hibernate中的主键标签,和数据库中的主键字段对应
name对应Model中的属性, type对应Model中属性的类型
标签column对应数据库中的主键字段,length为数据库中的长度,length属性可以不写.
generator是主键生成机制,因为我们现在用Hibernate来生成数据库中的数据,所以得告诉Hibernate,我用什么样的方式来生成主键,后面会介绍其他方式.
还有一个二合一的写法:
<id name="userId" type="java.lang.String" column="userId" length="32">
<generator class="uuid.hex" />
</id>

<property name="userName" type="java.lang.String" column="userName" />
<property name="userPwd" type="java.lang.String">
<column name="userPwd" />
</property>
property是非主键属性与数据库字段的对应关系,也是有两种写法,
name指定Model中的属性名, type指定属性在Java中的类型, 如果在映射文件中没有设置type属性的话,Hibernate会自己试着去确定正确的转换类型和它的映射类型。在某些情况下这个自动检测机制(在Java 类上使用反射机制)不会产生你所期待或需要的缺省值。date属性就是个很好的例子,Hibernate无法知道这个属性(java.util.Date类型的)应该被映射成:SQL date,或timestamp,还是time 字段。

 添加hibernate.cfg.xml文件
此配置文件是告诉Hibernate连接数据库的信息, 以及一些全局环境的设置,
<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE hibernate-configuration PUBLIC
        "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
        "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<!-- 设置使用数据库的语言 -->
<property name="dialect">org.hibernate.dialect.SQLServerDialect</property>
<!-- 确定以何种方式产生Session-->
<property name="current_session_context_class">thread</property>
<!-- 关闭缓存-->
<property name="cache.provider_class">org.hibernate.cache.NoCacheProvider</property>
<!-- 是否自动创建对应的数据库表-->
<property name="hbm2ddl.auto">create</property>
<!-- 设置是否显示执行的语言 -->
<property name="show_sql">true</property>
<!-- 数据库连接属性设置 -->
<property name="connection.driver_class">com.microsoft.sqlserver.jdbc.SQLServerDriver</property>
<property name="connection.url">jdbc:sqlserver://localhost:1433;DatabaseName=Hibernate</property>
<property name="connection.username">sa</property>
<property name="connection.password">wdpc</property>
<!-- 设置 c3p0连接池的属性-->
<property name="connection.useUnicode">true</property>
<property name="hibernate.c3p0.max_statements">100</property>
<property name="hibernate.c3p0.idle_test_period">3000</property>
<property name="hibernate.c3p0.acquire_increment">2</property>
<property name="hibernate.c3p0.timeout">5000</property>
<property name="hibernate.connection.provider_class">
org.hibernate.connection.C3P0ConnectionProvider
</property>
<property name="hibernate.c3p0.validate">true</property>
<property name="hibernate.c3p0.max_size">3</property>
<property name="hibernate.c3p0.min_size">1</property>

<!-- 加载映射文件-->
<mapping resource="chapter1/model/User.hbm.xml" />
</session-factory>
</hibernate-configuration>

<property name="hbm2ddl.auto">create</property>
设置此属性后,每次都会先执行drop table ***的操作,故第一次创建表成功后,就要去掉此操作.

HibernateUtil,相当于我们以前获取Connection类的DbManager类
package commons.util;

import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;

public class HibernateUtil {
private static final SessionFactory sessionFactory;
private static String CONFIG_FILE_LOCATION = "/hibernate.cfg.xml";

static {
try {
// 根据hibernate.cfg.xml创建SessionFactory会话工厂
sessionFactory = new Configuration()
.configure(CONFIG_FILE_LOCATION).buildSessionFactory();
} catch (Throwable ex) {
// Make sure you log the exception, as it might be swallowed
System.err.println("Initial SessionFactory creation failed." + ex);
throw new ExceptionInInitializerError(ex);
}
}

public static SessionFactory getSessionFactory() {
return sessionFactory;
}
}

Dao层:
package chapter1.dao;

import org.hibernate.Session;

import chapter1.model.User;

import commons.util.HibernateUtil;

public class UserDao {
public void create(User user) {
Session session = HibernateUtil.getSessionFactory().getCurrentSession();
session.beginTransaction();
session.save(user);
session.getTransaction().commit();
HibernateUtil.getSessionFactory().close();
}

public static void main(String[] args) {
UserDao userDao = new UserDao();
userDao.create(new User("wdpc2", "791126"));
}
}


核心接口简介
Hibernate的核心接口一共有5个,分别为:Session、SessionFactory、Transaction、Query和Configuration。这5个核心接口在任何开发中都会用到。通过这些接口,不仅可以对持久化对象进行存取,还能够进行事务控制。下面对这五个核心接口分别加以介绍。

Session接口:
Session接口负责执行被持久化对象的CRUD操作(CRUD的任务是完成与数据库的交流,包含了很多常见的SQL语句。)。但需要注意的是Session对象是非线程安全的。同时,Hibernate的session不同于JSP应用中的HttpSession。这里当使用session这个术语时,其实指的是Hibernate中的session,而以后会将HttpSesion对象称为用户session。

SessionFactory接口:
SessionFactory接口负责初始化Hibernate。它充当数据存储源的代理,并负责创建Session对象。这里用到了工厂模式。需要注意的是SessionFactory并不是轻量级的,因为一般情况下,一个项目通常只需要一个SessionFactory就够,当需要操作多个数据库时,可以为每个数据库指定一个SessionFactory。

Configuration接口:
Configuration接口负责配置并启动Hibernate,创建SessionFactory对象。在Hibernate的启动的过程中,Configuration类的实例首先定位映射文档位置、读取配置,然后创建SessionFactory对象。

Transaction接口:
Transaction接口负责事务相关的操作。它是可选的,开发人员也可以设计编写自己的底层事务处理代码。

Query和Criteria接口:
Query和Criteria接口负责执行各种数据库查询。它可以使用HQL语言或SQL语句两种表达方式。
  • 大小: 7.1 KB
分享到:
评论

相关推荐

    第1章准备源代码阅读环境与Hibernate的基本配置

    本章除了讲解如何搭建源代码阅读环境,还介绍了Hibernate项目的基本配置、详细的实体映射配置等内容,详细的Hibernate项目配置将在第二章讲解。对于熟识Hibernate开发的读者,可以只看本章小结给出建议内容即可。1.2...

    MyEclipse 使用指南

    第一章 开发环境搭建 5 第二章 常用开发操作和技巧 25 第三章 重构 55 第四章 管理数据库 95 第五章 管理服务器并进行Web开发 126 第六章 进行Struts开发 172 第七章 进行Hibernate开发 210 第八章 进行Spring开发 ...

    java web技术开发大全(最全最新)

    第1章 搭建开发环境 1.1 本书使用的软件和框架的版本 1.2 JDK6的下载与安装 1.3 Eclipse3.4 的下载与安装 1.4 MyEclipse6.5 的下载与安装 1.5 Eclipse:IDEforJavaEEDevelopers的下载与安装 1.6 Tomcat6的...

    Java_HibernateDemoDay1

    第一天:Hibernate 的入门(Hibernate 的环境搭建、Hibernate 的API、Hibernate 的 CRUD) 第二天:Hibernate 的一级缓存、其他的 API 第三天:Hibernate 的一对多配置、Hibernate 的多对多的配置 第四天:Hibernate...

    java web开发技术大全

    第1章 搭建开发环境 1.1 本书使用的软件和框架的版本 1.2 JDK6的下载与安装 1.3 Eclipse3.4 的下载与安装 1.4 MyEclipse6.5 的下载与安装 1.5 Eclipse:IDEforJavaEEDevelopers的下载与安装 1.6 ...

    Java Web程序设计教程

    2.4项目实战——第一个javaee应用:helloworld 28 2.4.1开始创建第一个javaee应用 28 2.4.2熟悉helloworld框架结构 29 本章小结 32 课后练习 32 第3章jsp和servlet 33 3.1开发第一个jsp+servlet应用 33 3.1.1...

    低清版 大型门户网站是这样炼成的.pdf

    第4章 orm中间件名流hibernate 3接管持久层 191 4.1 orm简介 191 4.1.1 持久化与持久层 191 4.1.2 jdbc劣势 192 4.1.3 实体域模型与关系数据模型 193 4.1.4 orm中间件 196 4.2 hibernate简介 196 4.2.1 ...

    SpringBoot企业级博客系统(未加密+源码)

    第2章 开启 Spring Boot 的第一个 Web 项目 通过 Spring Initializr 来快速初始化一个 Spring Boot 原型,方便学员来极速体验Spring Boot。本课程也将会采用Gradle作为项目管理工具,让学员掌握最前瞻的构建工具。...

    Spring Boot带前后端 渐进式开发企业级博客系统

    第2章 开启 Spring Boot 的第一个 Web 项目 通过 Spring Initializr 来快速初始化一个 Spring Boot 原型,方便学员来极速体验Spring Boot。 本课程也将会采用Gradle作为项目管理工具,让学员掌握最前瞻的构建工具...

    Eclipse开发入门与项目实践 源代码

    第一部分 开发入门 第1章 Eclipse概述及开发环境搭建 2 1.1 Eclipse概述 2 1.1.1 Eclipse的由来和发展 2 1.1.2 Eclipse的结构和平台内核 2 1.2 Eclipse开发环境的搭建 3 1.2.1 JDK的安装 4 1.2.2 JDK...

    JAVA程序开发大全---上半部分

    第2章 MyEclipse集成开发环境的使用 6 2.1 MyEclipse集成开发工具界面 6 2.1.1 MyEclipse的菜单栏 7 2.1.2 MyEclipse的工具栏 13 2.1.3 MyEclipse的透视图 14 2.1.4 MyEclipse的视图 17 2.1.5 MyEclipse的编辑器 20 ...

    21天学通Java Web开发.pdf

    全书分为6篇共21章内容,第一篇为Java Web基础篇,介绍了执行环境和开发环境的搭建及JSP的语法基础。第二篇为JSP 2.0开发篇,介绍了JSP指令元素、JSP动作元素、JSP内置对象、JSP和JavaBean等内容。第三篇为Servlet...

    Java_Web编程新手自学手册.pdf

    第7~12章是提高篇,讲解了搭建Java Web开发环境,HTML,和XML,JSP指令和内置对象,标签和动作指令,Servlet详解,JavaBean组件技术等内容;第13~15章是数据库篇,讲解了数据库技术,使用JDBC连接数据库,数据库...

    Eclipse RCP与Spring OSGi技术详解与最佳实践

    《Eclipse RCP与Spring OSGi:技术详解与最佳实践》共分3个部分:基础篇(第1-5章)详细介绍了与Eclipse RCP相关的一系列核心概念、Eclipse RCP开发环境的搭建,以及SWT、JFace、Forms、Nebula和WindowBuilder等...

    JSP网络编程学习笔记源代码 part2

    全书内容分为7篇,共23章,第一篇为“JSP应用开发基础”,主要讲述JSP技术背景情况、JSP技术的基本原理及开发环境的搭建;第二篇为“Servlet核心技术”,主要讲述Servlet的技术特点、请求和响应、数据共享、会话跟踪...

    经典JAVA.EE企业应用实战.基于WEBLOGIC_JBOSS的JSF_EJB3_JPA整合开发.pdf

     本书内容主要包括三部分,第一部分介绍java ee开发的基础知识,以及如何搭建开发环境,包括安装jboss、weblogic应用服务器,以及如何使用svn、netbeans等。第二部分详细讲解了jsf ri、jta、jndi、rmi、jms、...

    springmybatis

    前面一章,已经搭建好了eclipse,mybatis,mysql的环境,并且实现了一个简单的查询。请注意,这种方式是用SqlSession实例来直接执行已映射的SQL语句: session.selectOne(...

    工程硕士学位论文 基于Android+HTML5的移动Web项目高效开发探究

    第一章 绪论 1 1.1 研究背景与意义 1 1.2国内外相关研究现状 2 1.2.1 在线认证检测平台开发现状 2 1.2.2 HTML5 3 1.2.3 Android 3 1.2.4 Android移动Web项目开发的三种解决方案:Native, Web和Hybrid优缺陷分析 4 ...

    iuhyiuhkjh908u0980

    我们的Hello World程序是你开发基于Struts2框架程序的第一步.这里我们会提供循序渐进的教程来开发基于Struts2框架的Hello World程序. 教程包含基本的步骤像创建目录结构,建立build.xml文件来使用Ant构建工具创建程序...

Global site tag (gtag.js) - Google Analytics