1、编写实体类Person

package com.icss.pojo;

public class Person {
private int uid;
private String uname;
private String pword;
private String addr; public int getUid() {
return uid;
} public void setUid(int uid) {
this.uid = uid;
} public String getUname() {
return uname;
} public void setUname(String uname) {
this.uname = uname;
} public String getPword() {
return pword;
} public void setPword(String pword) {
this.pword = pword;
} public String getAddr() {
return addr;
} public void setAddr(String addr) {
this.addr = addr;
} @Override
public String toString() {
return "Person [uid=" + uid + ", uname=" + uname + ", pword=" + pword
+ ", addr=" + addr + "]";
} }

  2、编写person.hbm.xml

<?xml version="1.0" encoding="utf-8"?>
<!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.icss.pojo.Person" table="t_person">
<id name="uid" column="uid">
<generator class="native"></generator>
</id>
<property name="uname" column="uname"></property>
<property name="pword" column="pword"></property>
<property name="addr" column="addr"></property>
</class>
</hibernate-mapping>

  3、编写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">
<!-- Generated by MyEclipse Hibernate Tools. -->
<hibernate-configuration> <session-factory>
<!-- 配置数据库信息 必须配置 -->
<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="hibernate.connection.url">jdbc:mysql://localhost:3306/hibernate_day01?useUnicode=true&characterEncoding=utf8</property>
<property name="hibernate.connection.username">root</property>
<property name="hibernate.connection.password">root</property>
<!-- 配置数据库方言,就是针对不同的数据库有不同的sql标准 -->
<property name="dialect">org.hibernate.dialect.MySQLInnoDBDialect</property>
<!--下列是Database Explore绑定数据库连接时候定义的数据源名称吧 无关紧要的一个东西,其实就是 Diver name -->
<property name="myeclipse.connection.profile">mysql</property> <!-- 配置hibernate信息 可选 -->
<!-- 输出底层sql语句 -->
<property name="show_sql">true</property>
<!-- 输出底层sql语句并格式化 -->
<property name="format_sql">true</property>
<!-- 使得hibernate帮助我们创建表,因为表不会自己创建,需要我们进行配置使其自动创建 -->
<property name="hibernate.hbm2ddl.auto">update</property>
<!-- 把映射文件加载过来 -->
<mapping resource="com/icss/pojo/person.hbm.xml" />
</session-factory> </hibernate-configuration>

  4、编写工具类

package com.icss.util;

import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration; public class HibernateUtils {
private static SessionFactory sf = null; private HibernateUtils() {
// TODO Auto-generated constructor stub
} public static SessionFactory getSessionFactory(){
if(sf==null){
Configuration cfg=new Configuration().configure();
sf=cfg.buildSessionFactory();
}
return sf;
}
}  

5、编写hibernate的增删改查     测试

package com.icss.test;

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;
import org.junit.Ignore;
import org.junit.Test; import com.icss.pojo.Person;
import com.icss.util.HibernateUtils; public class HibernateCRUDCache {
/**
* CRUD操作
* 先解决中文问题,在配置数据连接时,指定编码类型,注意&即
* <property name="hibernate.connection.url">
* jdbc:mysql://localhost:3306/hibernate_day01?useUnicode=true&characterEncoding=utf8
* </property>
*/ @Test
public void test1() {
Configuration cfg = new Configuration().configure("hibernate.cfg.xml");
SessionFactory sf=cfg.buildSessionFactory();
Session ss = sf.openSession();
//开启事务
Transaction tx = ss.beginTransaction(); /**
* 添加
* Person p=new Person('zs','123','shanghai');
* ss.save(p);
* 添加时,若是设置了已经存在的id,则save会自动处理id问题,是添加一条记录(id自增)
*/ /**
* 查询
* 通过反射机制 指定使用具体的类和主键来找到对应的数据记录
* Person object = (Person)ss.get(Person.class, 10);
* System.out.println(object);
*/ /**
* 修改
* 先查询指定要修改的对象,然后再修改
* 修改过程中,到person表中,根据id找到指定对象,然后执行update语句完成修改
* Person p=(Person)ss.get(Person.class,13);
* p.setUname("李四");
* ss.update(p);
* 若修改时,id不是查询出来的,自己指定的,则要给出准确的id,且修改时,所有属性均要设置,否则为null
*/ /**
* 删除
* 先查询指定要修改的对象,然后再删除
* Person p = (Person)ss.get(Person.class,10);
* ss.delete(p);
*/ //一级缓存验证
/**
System.out.println("--------------------");
Person p = (Person)ss.get(Person.class,11);
System.out.println(p);
System.out.println("--------------------");
Person p2 = (Person)ss.get(Person.class,11);
System.out.println(p2);
*/ //一级缓存特性
Person p = (Person)ss.get(Person.class,11);
p.setUname("张三");
p.setPword("000");
p.setAddr("上海"); tx.commit(); ss.close();
sf.close();
}
}
/**
* 实体类对象状态(概念) 有三种
* 瞬时态:对象里没有id,对象与session没有关联,一般是添加操作
* Person p=new Person('zs','123','shanghai');
* ss.save(p);
*
* 持久态:对象有id,对象与session有关联 查询操作
* Person p = (Person)ss.get(Person.class,10);
*
* 托管态:对象有id,但对象与session没有关联 自己创建的对象
* 瞬时态与托管态的区别:瞬时态未指定id值,托管态指定了id,但都是自己创建对象
* 注意:对自己创建的对象的指定id值时,save是添加操作,而saveOrUpdates是修改操作!
*
* 在瞬时状态,saveOrUpdate是做insert操作
* 在持久状态,saveOrUpdate是做update操作
* 在托管状态,saveOrUpdate是做update操作
*/

6、编写hibernate的事务     测试  

package com.icss.test;

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.junit.Test; import com.icss.pojo.Person;
import com.icss.util.HibernateUtils; public class HibernateTransaction { @Test
public void test1() {
SessionFactory sf = null;
Session ss = null;
Transaction tx = null;
try {
sf = HibernateUtils.getSessionFactory();
// 使用sessionFactory创建Session对象
ss = sf.openSession();
// 开启事务
tx = ss.beginTransaction();
// 添加功能
Person p = new Person();
p.setUname("王五");
p.setPword("111");
p.setAddr("黄埔");
// 调用session对象的实现方法,完成添加
ss.save(p);
// 模拟一个异常
int x = 10 / 0;
// 提交事务
tx.commit();
} catch (Exception e) {
// 输出异常信息
//e.printStackTrace();
// 有异常,则回滚事务
/**
* 一直事务回滚失败的原因是数据库的原因,
* mysql数据库只有InnoDB引擎支持事务;
* 默认引擎是MyISAM,不支持事务,
* 所以,需要设置数据库的表结构为InnoDB;
* 即alter table 表名 ENGINE=InnoDB;
* 同时,将方言设置为MySQLInnoDBDialect
*/
if (tx != null) {
ss.clear();
tx.rollback();
System.out.println("事务回滚!");
}
} finally {
// 关闭资源
if (ss != null && ss.isOpen()) {
ss.close();
}
if (sf != null && !sf.isClosed()) {
sf.close();
}
}
}
}

  

hibernate Day2 案例代码的更多相关文章

  1. hibernate Day1 案例代码

    1.创建Person类 package com.icss.pojo; public class Person { private int uid; private String uname; priv ...

  2. Hibernate入门案例及增删改查

    一.Hibernate入门案例剖析: ①创建实体类Student 并重写toString方法 public class Student { private Integer sid; private I ...

  3. Hibernate入门案例 增删改

    一.Hibernate入门案例剖析: ①创建实体类Student 并重写toString方法 public class Student { private Integer sid; private I ...

  4. 用JS添加文本框案例代码

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  5. SQL Server 表的管理_关于事务的处理的详解(案例代码)

    SQL Server 表的管理_关于事务的处理的详解(案例代码) 一.SQL 事务 1.1SQL 事务 ●事务是在数据库上按照一定的逻辑顺序执行的任务序列,既可以由用户手动执行,也可以由某种数据库程序 ...

  6. SQL Server 表的管理_关于数据增删查改的操作的详解(案例代码)

    SQL Server 表的管理_关于数据增删查改的操作的详解(案例代码)-DML 1.SQL INSERT INTO 语句(在表中插入) INSERT INTO 语句用于向表中插入新记录. SQL I ...

  7. SQL Server 表的管理_关于表的操作增删查改的操作的详解(案例代码)

    SQL Server 表的管理_关于表的操作增删查改的操作的详解(案例代码) 概述: 表由行和列组成,每个表都必须有个表名. SQL CREATE TABLE 语法 CREATE TABLE tabl ...

  8. SQL Server 表的管理_关于事务操作的详解(案例代码)

    SQL Server 表的管理_关于事务操作的详解(案例代码) 1.概念 事务(transaction): 是将多个修改语句组合在一起的方法,这个方法中的所有语句只有全部执行才能正确完成功能.即要么全 ...

  9. hibernate Day2

    Day21 实体类编写规则(1 ) 实体类中的属性是私有属性(2) 私有属性要生成get与set方法(3) 实体类中有属性作为唯一值(一般使用id值)(4) 实体类属性建议不要使用基本数据类型, 应当 ...

随机推荐

  1. atol的实现【转】

    本文转载自:http://blog.csdn.net/cwqbuptcwqbupt/article/details/7518582 看了atol的实现,发现char到int的转换比较奇怪:c = (i ...

  2. Java 发送Get和Post请求

    package com.htpt.superviseServices.dm.util; import java.io.BufferedReader; import java.io.IOExceptio ...

  3. 烂笔头——JAVA.String

    人们说 Sting+ 的效率很低 String+的编译步骤是: new StringBuilder() new String.valueof() StringBuilder.<init> ...

  4. TCPDUMP 使用详情

    第一种是关于类型的关键字,主要包括host,net,port, 例如 host 210.27.48.2,指明 210.27.48.2是一台主机,net 202.0.0.0 指明 202.0.0.0是一 ...

  5. JNI之JAVA调用C++接口

    1.JNI定义(来自百度百科) JNI是Java Native Interface的缩写,中文为JAVA本地调用.从Java1.1开始,Java Native Interface(JNI)标准成为ja ...

  6. Mysql数据库--语句整理/提升/进阶/高级使用技巧

    一.基础 1.说明:创建数据库CREATE DATABASE database-name 2.说明:删除数据库drop database dbname3.说明:备份sql server--- 创建 备 ...

  7. [转]VC++中操作XML(MFC、SDK)

    XML在Win32程序方面应该没有在Web方面应用得多,很多Win32程序也只是用XML来存存配置信息而已,而且没有足够的好处的话还不如用ini.VC++里操作XML有两个库可以用:MSXML和Xml ...

  8. JNI——C调用JAVA

    步骤: 1. 创建虚拟机 2. 获得class 3. 实例化对象:获得构造方法(方法名为“<init>”),构造参数,调用方法 4. 调用方法:又分为获得方法,构造方法,调用方法 操作方法 ...

  9. Spring3.3 整合 Hibernate3、MyBatis3.2 配置多数据源/动态切换数据源方法

    一.开篇 这里整合分别采用了Hibernate和MyBatis两大持久层框架,Hibernate主要完成增删改功能和一些单一的对象查询功能,MyBatis主要负责查询功能.所以在出来数据库方言的时候基 ...

  10. themeforest 免费模板

    http://www.im286.com/thread-9550365-1-1.html 官网:http://themeforest.net/item/elena-responsive-email-t ...