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. MySQL学习笔记(三)——计算字段及常用函数

    拼接字段-Concat()函数        将值连接在一起构成单个值.注意:大多数DBMS使用+或者||来实现拼接,mysql则使用Concat()函数来实现. 去空格函数-Trim函数       ...

  2. linux系统配置之bash shell的配置(centos)

    linux系统开机启动过程的最后阶段会由init进程根据启动方案(运行级:0-6)启动许多基本的服务程序,为用户提供各种各样的服务.在启动这些服务的最后会启动一个为用户提供操作环境的服务,用户就是通过 ...

  3. Python: PS 图像特效 — 模糊玻璃

    今天介绍一种基于高斯滤波和邻域随机采样,生成一种毛玻璃的图像特效,简单来说,就是先对图像做高斯滤波模糊,然后对模糊后的图像,通过对邻域的随机采样来赋予当前的像素点,这样,生成的图像有有一定的随机扰动和 ...

  4. shiro加密简单实现

    1.添加shiro依赖 定义shiro的版本号 <shiro.ver>1.2.3</shiro.ver> 加入shiro的依赖 <dependency> <g ...

  5. js中this 的四种用法

    this 在函数执行时,this 总是指向调用该函数的对象.要判断 this 的指向,其实就是判断 this 所在的函数属于谁. 在<javaScript语言精粹>这本书中,把 this  ...

  6. leetcode 395 至少有K个重复字符的最长子串

    找到给定字符串(由小写字符组成)中的最长子串 T , 要求 T 中的每一字符出现次数都不少于 k .输出 T 的长度. 示例 1: 输入: s = "aaabb", k = 3 输 ...

  7. wampServer 设置

    设置端口 打开 C:\wamp\bin\apache\apache2.4.9\conf\httpd.conf 文件 找到“Listen 80”和“ServerName localhost:80”,紧接 ...

  8. layui 复选框checkbox 全选写法

    前语:本来我是不想写layui框架的博客的,有的时候数据经过layui渲染后原生的写法就取不到值了,一定要用它框架的写法,实在蛋疼,故写之,以后用到可以省点时间去度娘! HTML: <div i ...

  9. php字符编码转换中的iconv与mb_convert_encoding用法

    iconv ( 'UTF-8' , 'GBK' , $str ); //将$str字符串 utf-8 编码转换成 gbk: 另外,5.4.0 这个版本起,字符非法时候会返回 FALSE,除非在输出字符 ...

  10. 利用vs自带工具分析程序性能

    测试程序写好后可以通过VS2010分析菜单里选择启用性能向导 选择CPU采样后就选择需要分析的项目 测试项目选择完成后就可以运行分析,结束分析后VS2010会提供个详细报告文档 从分析结果来看GetC ...