三大框架之hibernate入门

<?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>
<!--Database connection settings -->
<property name="connection.driver_class">oracle.jdbc.driver.OracleDriver</property>
<property name="connection.url">jdbc:oracle:thin:@localhost:1521:orcl</property>
<property name="connection.username">scott</property>
<property name="connection.password">tiger</property>
<!--SQL dialect 方言-->
<property name="dialect">org.hibernate.dialect.Oracle10gDialect</property>
<!--Enable Hibernate's automatic session context management -->
<property name="current_session_context_class">thread</property>
<!--Echo all executed SQL to stdout -->
<property name="show_sql">true</property>
<mapping resource="com/it/bean/UserInfo.hbm.xml"/>
</session-factory>
</hibernate-configuration>
<?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="com.it.bean">
<class name="UserInfo" table="userinfo">
<id name="user_id" column="user_id">
<!-- 主键生成策略 -->
<generator class="assigned"></generator>
</id>
<property name="user_name" column="user_name"></property>
<property name="user_sex" column="user_sex"></property>
<property name="user_birth" column="user_birth"></property>
<property name="user_addr" column="user_addr"></property>
<property name="user_pwd" column="user_pwd"></property>
</class>
</hibernate-mapping>
Assigned:主键由外部程序生成,无需Hibernate干预。
identity:采用数据库提供的主键生成机制,如MySql、DB2、SqlServer的自增主键。
sequence:使用数据库的sequence机制。
hilo:通过hi/lo 算法实现的主键生成机制,需要额外的数据库表保存主键生成历史状态。
seqhilo:与hilo 类似,通过hi/lo 算法实现的主键生成机制,只是主键历史状态保存在Sequence中,适用于支持Sequence的数据库,如Oracle。
increment:主键按数值顺序递增。此方式的实现机制为在当前应用实例中维持一个变量,以保存着当前的最大值,之后每次需要生成主键的时候将此值加1作为主键。这种方式可能产生的问题是:如果当前有多个实例访问同一个数据库,那么由于各个实例各自维护主键状态,不同实例可能生成同样的主键,从而造成主键重复异常。因此,如果同一数据库有多个实例访问,此方式必须避免使用。
native:由Hibernate根据底层数据库定义自行判断采用identity、hilo、sequence其中一种作为主键生成方式。
foreign:使用外部表的字段作为主键。
uuid.hex:由Hibernate基于128 位唯一值产生算法,根据IP、当前时间、JVM启动时间、内部自增量生成16 进制数值(编码后以长度32 的字符串表示)作为主键,该方法提供了最好的数据库插入性能和数据库平台适应性。
- uuid.string:与uuid.hex 类似,只是生成的主键未进行编码(长度16),在某些数据库中可能出现问题(如PostgreSQL)。
package com.it.dao;
import java.util.List;
import org.hibernate.Query;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;
import org.hibernate.classic.Session;
import com.it.dao.util.SessionFactoryUtils;
/**
* 基础DAO
* @author xj
*
*/
public class BaseDAO <T>{
/**
* 查询集合--全部
*/
public List<T> find(String hql){
Session session =null;
//事务
Transaction tx = null;
List<T> list =null;
try {
//这里将创建SessionFactory写成了方法(工具类)--创建SessionFactory并得到Session
session=SessionFactoryUtils.getSessionFactory().getCurrentSession();
//开启事务
tx=session.beginTransaction();
//查询Java bean UserInfo--对象这里hql是查询语句:eg:from UserInfo(UserInfo-->是java bean里的对象)
Query query = session.createQuery(hql);
list = query.list();
//提交
tx.commit();
} catch (Exception e) {
e.printStackTrace();
//事务回滚
tx.rollback();
}
return list;
} /**
* 查询带参数
*/
public List<T> find(String hql,String ...params){
Session session =null;
//事务
Transaction tx = null;
List<T> list =null;
try {
session=SessionFactoryUtils.getSessionFactory().getCurrentSession();
//开启事务
tx=session.beginTransaction();
//查询Java bean UserInfo--对象
Query query = session.createQuery(hql);
//给参数赋值
for (int i = 0; i < params.length; i++) {
query.setString(i, params[i]);
}
list = query.list();
//提交
tx.commit();
} catch (Exception e) {
e.printStackTrace();
//事务回滚
tx.rollback();
}
return list;
} }
/**
* 添加
* @param obj
*/
public void add(Object obj){
Session session =null;
Transaction tx = null;
try {
//
session=SessionFactoryUtils.getSessionFactory().getCurrentSession();
tx=session.beginTransaction();
//操作
session.save(obj);
//提交
tx.commit();
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
//事务回滚
tx.rollback();
System.out.println("--我回滚啦---");
}
} /**
* 按对象删除
*/
public void del(Object obj){
Session session =null;
Transaction tx = null;
try {
//
session=SessionFactoryUtils.getSessionFactory().getCurrentSession();
tx=session.beginTransaction();
//操作
session.delete(obj);
//提交
tx.commit();
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
//事务回滚
tx.rollback();
System.out.println("--我回滚啦---");
}
}
/**
* 按编号删除
*/
public void delete(Class<T> clz, String OID){
Session session =null;
Transaction tx = null;
//通过给的id来查询该id的对象
Object o=get(clz,OID);
try {
//
session=SessionFactoryUtils.getSessionFactory().getCurrentSession();
tx=session.beginTransaction();
//操作
session.delete(o);
//提交
tx.commit();
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
//事务回滚
tx.rollback();
System.out.println("--我回滚啦---");
}
} /**
* 修改
* @param obj
*/
public void upd(Object obj){
Session session =null;
Transaction tx = null;
try {
//得到SessionFactory
session=SessionFactoryUtils.getSessionFactory().getCurrentSession();
//开启事务
tx=session.beginTransaction();
//操作
session.update(obj);
//提交
tx.commit();
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
//事务回滚
tx.rollback();
System.out.println("--我回滚啦---");
}
} /**
* 查询
*/
public T get(Class<T> clz, String OID){
Session session =null;
Transaction tx = null;
T t=null;
try {
//
session=SessionFactoryUtils.getSessionFactory().getCurrentSession();
tx=session.beginTransaction();
//操作
t = (T) session.get(getClass(), OID);
//提交
tx.commit();
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
//事务回滚
tx.rollback();
System.out.println("--我回滚啦---");
}
return t;
}




三大框架之hibernate入门的更多相关文章
- Java_Web三大框架之Hibernate 入门(一)
一.Hibernate简介: Hibernate作者——Gavin King Hibernate创始人 < Hibernate in action >作者 EJB 3.0的Entity b ...
- 前端三大框架之一React入门教程
相信大家对框架这个词都很熟悉吧,我一直喜欢js原生来开发,但是目前都要求工作效率,所有使用框架或者是库会使我们开发更加方便和快速,甚至一个人干十个人的活.. 框架优点: 1.方便开发.快速写功能 2. ...
- 三大框架 之 Hibernate框架概述(概述、配置、核心API)
目录 Hibernate框架概述 什么是框架 hibernate简介(JavaEE技术三层架构所用到的技术) hibernate是什么框架 ORM hibernate好处 Hibernate基本使用 ...
- java三大框架之一hibernate使用入门
综述:Hibernate的作用就是让实体类与数据库映射,使数据持久化,用于替代JDBC,使我们不致于写那么多sql语句代码. 1. 首先在官网www.hibernate.org下载hibernate包 ...
- Java三大框架之——Hibernate关联映射与级联操作
什么是Hibernate中的关联映射? 简单来说Hibernate是ORM映射的持久层框架,全称是(Object Relational Mapping),即对象关系映射. 它将数据库中的表映射成对应的 ...
- Java三大框架之——Hibernate
什么是Hibernate? Hibernate是基于ORM(O:对象,R:关系,M:映射)映射的持久层框架,是一个封装JDBC的轻量级框架,主要实现了对数据库的CUPD操作. 注:CRUD是指在做计算 ...
- ECLIPSE/JAVAWEB (二)三大框架之Hibernate框架 持续更新中...
(一)发展历史 在Struts框架中使用jdbc连接来读写数据库,我们最常见的就是打开数据库连接.使用复杂的sql语句进行读写.关闭连接,获得的数据又需要转换或封装后往外传,这是一个非常繁琐的过程. ...
- java框架篇---hibernate入门
Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,使得Java程序员可以随心所欲的使用对象编程思维来操纵数据库. Hibernate可以应用在任何使用JDB ...
- java利用myeclipse自带三大框架搭建三大框架(Hibernate+Struts2+Spring)过程详解
搭建过程因人而异,我的搭建过程大致是这样的: 1.创建一个javaweb项目: 2.导入Spring框架,上图: 2.1: 2.2: 2.3: 3.导入struts2框架,上图: 3.1: 3.2: ...
随机推荐
- 企业做数据缓存是使用Memcached还是选Redis?
企业是使用Memcached还是选Redis? 在构建一款现代且由数据库驱动的Web应用程序并希望使其拥有更为出色的性能表现时,这个问题总会时不时出现.并给每一位开发人员带来困扰.在考虑对应用程序的性 ...
- CSS常见技巧
一.CSS Sprite(雪碧图|精灵图)指什么? 有什么作用? CSS雪碧 即CSS Sprite,也有人叫它CSS精灵,是一种CSS图像合并技术,该方法是将小图像和背景图片合并到一张图片上,然后利 ...
- 使用Nginx反向代理 让IIS和Tomcat等多个站点一起飞
使用Nginx 让IIS和Tomcat等多个站点一起飞 前言: 养成一个好习惯,解决一个什么问题之后就记下来,毕竟“好记性不如烂笔头”. 这样也能帮助更多的人 不是吗? 最近闲着没事儿瞎搞,自己在写一 ...
- python_单元测试unittest
Python自带一个单元测试框架是unittest模块,用它来做单元测试,它里面封装好了一些校验返回的结果方法和一些用例执行前的初始化操作. 步骤1:首先引入unittest模块--import un ...
- JS中关于字符串的几个常用又容易忘记的方法
1>.字符串连接:concat(): 左边字符串. concat(连接的字符串1,字符串2,....); 获取指定位置的字符:charAt(): 返回指定位置的字符: 字符串.charAt(i ...
- JavaScript中undefined与null的区别
通常情况下, 当我们试图访问某个不存在的或者没有赋值的变量时,就会得到一个undefined值.Javascript会自动将声明是没有进行初始化的变量设为undifined. 如果一个变量根本不存在会 ...
- DataTable转换成IList<T>的简单实现
DataTable的无奈 很多时候,我们需要去操作DataTable.但DataTable的操作,实在是太不方便了.Linq?lambda表达式?统统没有... 特别是对现有结果集做进一步筛选,这样的 ...
- 抛弃jQuery:DOM API之选择元素
原文链接:http://blog.garstasio.com/you-dont-need-jquery/selectors/ 我的Blog:http://cabbit.me/you-dont-need ...
- 架构 Roadmap 笔记分享
虽然我们的架构不是开源的,不过一些笔记可以愿意公开和大家讨论一下,我相信不少人在和我们干着同样的事情,那不如一块儿交流一下,这样我们可以更快. 这里前端,后端都有,前端我们用的是 avalon js, ...
- ASP.NET MVC Model元数据(五)
ASP.NET MVC Model元数据(五) 前言 在上一篇中我们描述了应用于Model上面的各种用于显示控制的特性类,在本篇中将详细的介绍这些特性类的应用,虽然它们跟Model元数据的直接关系并不 ...