Hibernate——hibernate的配置测试
Hibernate
Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,它将POJO与数据库表建立映射关系,是一个全自动的orm框架,hibernate可以自动生成SQL语句,自动执行,使得Java程序员可以随心所欲的使用对象编程思维来操纵数据库。
语言特点
- 将对数据库的操作转换为对Java对象的操作,从而简化开发。通过修改一个“持久化”对象的属性从而修改数据库表中对应的记录数据。
- 提供线程和进程两个级别的缓存提升应用程序性能。
- 有丰富的映射方式将Java对象之间的关系转换为数据库表之间的关系。
- 屏蔽不同数据库实现之间的差异。在Hibernate中只需要通过“方言”的形式指定当前使用的数据库,就可以根据底层数据库的实际情况生成适合的SQL语句。
- 非侵入式:Hibernate不要求持久化类实现任何接口或继承任何类,POJO即可。
核心API
Hibernate的API一共有6个,分别为:Session、SessionFactory、Transaction、Query、Criteria和Configuration。通过这些接口,可以对持久化对象进行存取、事务控制。
Session
Session接口负责执行被持久化对象的CRUD操作(CRUD的任务是完成与数据库的交流,包含了很多常见的SQL语句)。但需要注意的是Session对象是非线程安全的。同时,Hibernate的session不同于JSP应用中的HttpSession。这里当使用session这个术语时,其实指的是Hibernate中的session,而以后会将HttpSession对象称为用户session。
SessionFactory
SessionFactory接口负责初始化Hibernate。它充当数据存储源的代理,并负责创建Session对象。这里用到了工厂模式。需要注意的是SessionFactory并不是轻量级的,因为一般情况下,一个项目通常只需要一个SessionFactory就够,当需要操作多个数据库时,可以为每个数据库指定一个SessionFactory。
Transaction
Transaction 接口是一个可选的API,可以选择不使用这个接口,取而代之的是Hibernate 的设计者自己写的底层事务处理代码。 Transaction 接口是对实际事务实现的一个抽象,这些实现包括JDBC的事务、JTA 中的UserTransaction、甚至可以是CORBA 事务。之所以这样设计是能让开发者能够使用一个统一事务的操作界面,使得自己的项目可以在不同的环境和容器之间方便地移植。
Query
Query接口让你方便地对数据库及持久对象进行查询,它可以有两种表达方式:HQL语言或本地数据库的SQL语句。Query经常被用来绑定查询参数、限制查询记录数量,并最终执行查询操作。
Criteria
Criteria接口与Query接口非常类似,允许创建并执行面向对象的标准化查询。值得注意的是Criteria接口也是轻量级的,它不能在Session之外使用。
Configuration
Configuration 类的作用是对Hibernate 进行配置,以及对它进行启动。在Hibernate 的启动过程中,Configuration 类的实例首先定位映射文档的位置,读取这些配置,然后创建一个SessionFactory对象。虽然Configuration 类在整个Hibernate 项目中只扮演着一个很小的角色,但它是启动hibernate 时所遇到的第一个对象。
Hibernate的一些包的作用
net.sf.hibernate.*
该包的类基本上都是接口类和异常类
net.sf.hibernate.cache.*
JCS的实现类
net.sf.hibernate.cfg.*
配置文件读取类
net.sf.hibernate.collection.*
Hibernate集合接口实现类,例如List,Set,Bag等等,Hibernate之所以要自行编写集合接口实现类是为了支持lazy loading
net.sf.hibernate.connection.*
几个数据库连接池的Provider
net.sf.hibernate.dialect.*
支持多种数据库特性,每个Dialect实现类代表一种数据库,描述了该数据库支持的数据类型和其它特点,例如是否有AutoIncrement,是否有Sequence,是否有分页sql等等
net.sf.hibernate. eg.*
Hibernate文档中用到的例子
net.sf.hibernate.engine.*
这个包的类作用比较散
net.sf.hibernate.expression.*
HQL支持的表达式
net.sf.hibernate.hq.*
HQL实现
net.sf.hibernate. id.*
ID生成器
net.sf.hibernate.impl.*
最核心的包,一些重要接口的实现类,如Session,SessionFactory,Query等
net.sf.hibernate.jca.*
JCA支持,把Session包装为支持JCA的接口实现类
net.sf.hibernate.jmx.*
JMX是用来编写App Server的管理程序的,大概是JMX部分接口的实现,使得App Server可以通过JMX接口管理Hibernate
net.sf.hibernate.loader.*
也是很核心的包,主要是生成sql语句的
net.sf.hibernate.lob.*
Blob和Clob支持
net.sf.hibernate.mapping.*
hbm文件的属性实现
net.sf.hibernate.metadata.*
PO的Meta实现
net.sf.hibernate.odmg.*
ODMG是一个ORM标准,这个包是ODMG标准的实现类
net.sf.hibernate.persister.*
核心包,实现持久对象和表之间的映射
net.sf.hibernate.proxy.*
Proxy和Lazy Loading支持
net.sf.hibernate. ps.*
该包是PreparedStatment Cache
net.sf.hibernate.sql.*
生成JDBC sql语句的包
net.sf.hibernate.test.*
测试类,你可以用junit来测试Hibernate
net.sf.hibernate.tool.hbm2ddl.*
用hbm配置文件生成DDL
net.sf.hibernate.transaction.*
Hibernate Transaction实现类
net.sf.hibernate.type.*
Hibernate中定义的持久对象的属性的数据类型
net.sf.hibernate.util.*
一些工具类,作用比较散
net.sf.hibernate.xml.*
XML数据绑定
Hibernate的配置
最终项目的结构如下
第一步:开始配置hibernate需要导入许多个包,这个需要上官网下载,下载最新版就可以,下载地址:http://hibernate.org/orm/
下载解压后在里面找到这个路径将以下目录下的全部jar包导入你的eclipse中创建的lib中,并引入
第二步:创建持久化类,并配置其.hbm.xml文件
先解释一下什么叫持久化类
通俗点说就是,数据库中的表的字段是咋样持久化的属性就咋样,表名就是类名,之后可以系统生成set和get方法
我先创建User的持久化类:User.java
public class User {
private int id;
private String username;
private String passowrd;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassowrd() {
return passowrd;
}
public void setPassowrd(String passowrd) {
this.passowrd = passowrd;
} }
在创建其.hbm.xml文件,这个文件位置跟持久化类的位置一样,同级
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Generated 2017-8-25 9:27:23 by Hibernate Tools 5.2.3.Final -->
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping >
<class name="com.bean.User" table="user">
<id name="id" type="java.lang.Integer">
<generator class="native"/>
</id>
<property name="username" type="java.lang.String"/>
<property name="passowrd" type="java.lang.String"/>
</class>
</hibernate-mapping>
第三步:配置hibernate.cfg.xml文件
这个文件的位置是在src下,与包同级
<?xml version='1.0' encoding='utf-8'?>
<!--标准的XML文件的起始行,version='1.0'表明XML的版本,encoding='utf-8'表明XML文件的编码方式,不能把第一行给占了-->
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
<!--声明Hibernate配置文件的开始-->
<hibernate-configuration>
<!--表明以下的配置是针对session-factory配置的,SessionFactory是Hibernate中的一个类,这个类主要负责保存HIbernate的配置信息,以及对Session的操作-->
<session-factory>
<!--配置数据库的驱动程序,Hibernate在连接数据库时,需要用到数据库的驱动程序-->
<property name="connection.driver_class">com.mysql.jdbc.Driver</property>
<!--设置数据库的连接jdbc:mysql:///zhou,其中localhost表示mysql服务器名称,此处为本机,zhou是数据库名-->
<property name="connection.url">jdbc:mysql:///zhou</property>
<!--连接数据库的用户名-->
<property name="connection.username">root</property>
<!--连接数据库的密码-->
<property name="connection.password">123456</property>
<!--是否在后台显示Hibernate用到的SQL语句,开发时设置为true,便于差错,程序运行时可以在Eclipse的控制台显示Hibernate的执行Sql语句。项目部署后可以设置为false,提高运行效率-->
<property name="show_sql">true</property>
<!--hibernate.dialect 只是Hibernate使用的数据库方言,就是要用Hibernate连接那种类型的数据库服务器。默认是使用这种方言-->
<property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect </property>
<!--update当项目启动时更新数据库,create是启动时创建依据持久类的数据库表 -->
<property name="hbm2ddl.auto">update</property>
<!-- XML注入方法 -->
<mapping resource="com/bean/User.hbm.xml"/>
<!-- 注解(annotation)注入方法 -->
<!-- <mapping class="com.bean.User"/> -->
</session-factory>
</hibernate-configuration>
第四步:编写测试,看是否流程通畅
public static void main(String[] args) {
// TODO Auto-generated method stub
//读取配置文件的信息
Configuration config=new Configuration().configure();
//创建session的工厂模式
SessionFactory factory=config.buildSessionFactory();
//开启session
Session session= factory.openSession();
//开启事务
Transaction transaction= session.beginTransaction();
User user= session.find(User.class, 1);
System.out.println(user.getUsername()+"---"+user.getPassowrd());
//提交事务
transaction.commit();
//关闭这两个
session.close();
factory.close(); }
这些就是hibernate的最基本的配置及流程的通畅
【版本声明】本文为博主原创文章,转载请注明出处。
Hibernate——hibernate的配置测试的更多相关文章
- [JavaEE] Hibernate连接池配置测试
转载自51CTO http://developer.51cto.com/art/200906/129914.htm Hibernate支持第三方的连接池,官方推荐的连接池是C3P0,Proxool,以 ...
- hibernate单表junit测试
首先,创建java project ,导入需要的jar包 添加hibernate.cfg.xml <?xml version='1.0' encoding='UTF-8'?> <!D ...
- hibernate.hbm2ddl.auto配置详解
hibernate.cfg.xml 中hibernate.hbm2ddl.auto配置节点如下:<properties><property name="hibernate. ...
- Hibernate入门案例配置以及增、删、改、查看
享受痛苦就是走向成功的第一步. 一.创建一个项目(lib里面是需要的夹包小奶瓶要导包) 二.书写大配置文件 大配置文件必须放置在项目根目录(专业classpath下):界定:就是src 1名称:hib ...
- Mingyang.net:hibernate.hbm2ddl.auto配置详解【转】
原文地址:http://www.cnblogs.com/feilong3540717/archive/2011/12/19/2293038.html hibernate.cfg.xml 中hibern ...
- hibernate进阶--一对多映射配置
hibernate作为一款优秀的ORM框架,广受大家喜爱,也被Java社区公认为持久层的首选.虽然jdbc为Java数据库操 作带来了诸多便利,但是并没有统一SQL语句的写法,而且具体操作数据库的代码 ...
- Hibernate笔记——C3P0配置
Hibernate作为持久层(ORM)框架,操作数据库,自然也就离不开数据库连接池了.其支持多种连接池,这里就用最熟悉的C3P0连接池. C3P0连接池前面已经介绍了并使用很多次了就不再详细说明了. ...
- 概述hibernate入门安装配置
1.jdbc连接的优缺点 JDBC的优点 直接底层操作,提供了很简单.便捷的访问数据库的方法,跨平台性比较强.灵活性比较强,可以写很复杂的SQL语句. JDBC的缺点 1).因为JAVA是面向对象的, ...
- hibernate.cfg.xml配置(Oracle+c3p0)
说明:数据库:Oracle10g:连接池:c3p0 结构: 一.配置hibernate.cfg.xml <?xml version="1.0" encoding=" ...
随机推荐
- memcache 细究(一)
memcached是高性能的分布式的内存缓存服务器.由国外社区网站LIVEJOURNAL的开发团队开发. 使用目的: 通过缓存数据库查询结果,减少数据库的访问次数,以提高动态web应用的速度.提高可扩 ...
- IDEA使用01 创建java项目、创建web项目
注意:本教程使用的开发环境是:(专业版) 1 创建javaSE项目 1.1 file -> new -> project 注意:如果是第一次使用,就需要配置 project SDK , ...
- JS - 讨论 - 编码习惯 - JavaScript代码到底要不要写分号?
如题:烦请大家在评论区给出原创意见!多谢!
- JS - 数据类型的值拷贝函数(深拷贝)
function mottoClone (obj) { if (obj === null || typeof obj !== 'object') return obj; if (obj instanc ...
- MySQL IO线程及相关参数调优
一.关于一个SQL的简单的工作过程 1.工作前提描述 1.启动MySQL,在内存中分配一个大空间innodb_buffer_pool(其中log_buffer) 2.多用户线程连接MySQL,从内存分 ...
- docker~为什么没人说说.dockerignore
回到目录 最近一直专注于docker的开发之中,而在使用Dockerfile时发现有个问题,当你的发布目录只能是obj\Docker\publish,而指向其它目录dockefile并不认它,只有如何 ...
- man rsync翻译(rsync命令中文手册)
本文为命令rsync的man文档翻译,几乎所有的选项都翻译了,另外关于筛选规则部分只翻译了一部分.由于原文很多地方都比较啰嗦,所以译文中有些内容可能容易让国人疑惑,所以我个人在某些地方加上了注释.若有 ...
- (转)java并发之Executor
场景: 线程池在面试时候经常会碰到,在工作中用的场景更多,所以很有必要弄清楚. 1 简介 Java自1.5以来加入了处理一批线程的方法,也就是java并发包里的Executor.本文主要介绍Execu ...
- ETL作业调度工具TASKCTL软件安装乱码问题解决
前两天在安装批量作业调度软件TASKCTL4.5时,将安装介质解压出来后执行安装脚本时,一安装就出现下图乱码. 然后就度娘了一下,发现安装遇到乱码的人还挺多的,大多数解答都说TASKCTL软件里面很多 ...
- HDU 6069
Counting Divisors Problem Description In mathematics, the function d(n) denotes the number of diviso ...