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. sublime text3 3176 注册码 License

    注册码 sgbteam Single User License EA7E-1153259 8891CBB9 F1513E4F 1A3405C1 A865D53F 115F202E 7B91AB2D 0 ...

  2. win7下使用source insight,没有Courier字体

    http://hi.baidu.com/raoxj/item/0e3a3a3b2461c5be134b14fa 1. “控制面板:--->“字体”--->找到Courier New(建议用 ...

  3. linux应用之基本命令

    linux操作系统的应用层可以细分为两层:1.系统服务层(包括GUI shell.CUI shell.cron.ftp.远程登录openssh等由init调用的服务)2.系统命令和用户应用. linu ...

  4. [原创]Java开发在线打开编辑保存Word文件(支持多浏览器)

    Java调用PageOffice实现在线编辑保存Word文件(以jsp调用为例,支持SSM.SSH.SpringMVC等流行框架) 1. 下载PageOffice开发包:http://www.zhuo ...

  5. Android Jni(Java Native Interface)笔记

    首先记录一个问题,关于如何用javah生成头文件. 为什么要生成头文件?在含有 static{ System.loadLibrary("hellojni"); } 这样代码的类下面 ...

  6. js的浅克隆和深克隆

    谈一谈个人对js浅克隆和深克隆的区别. 之前也看到很多博客在写,当然也有写的非常好的,但是个人觉得既然要分享就不要写的太深奥,尽量以简单易懂为主. 浅克隆其实就是 对象A = 对象B:如果改变了对象B ...

  7. 洛谷 1541 乌龟棋——dp

    题目:https://www.luogu.org/problemnew/show/P1541 以用了几张牌为阶段.注意知道了用了4种牌各几张后,当前位置就是确定的,所以不用记录什么的. #includ ...

  8. 爬虫库之BeautifulSoup学习(四)

    探索文档树: find_all(name,attrs,recursive,text,**kwargs) 方法搜索当前tag的所有tag子节点,并判断是否符合过滤器的条件 1.name参数,可以查找所有 ...

  9. 1.15-1.16 sqoop action

    一.sqoop action1 http://oozie.apache.org/docs/4.0.0/DG_SqoopActionExtension.html 1.准备文件 ## [root@hado ...

  10. TCPflow:在Linux中分析和调试网络流量的利器(转)

    TCPflow是一款功能强大的.基于命令行的免费开源工具,用于在Unix之类的系统(如Linux)上分析网络流量.它可捕获通过TCP连接接收或传输的数据,并存储在文件中供以后分析,采用的格式便于协议分 ...