hibernate Day2 案例代码
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 案例代码的更多相关文章
- hibernate Day1 案例代码
1.创建Person类 package com.icss.pojo; public class Person { private int uid; private String uname; priv ...
- Hibernate入门案例及增删改查
一.Hibernate入门案例剖析: ①创建实体类Student 并重写toString方法 public class Student { private Integer sid; private I ...
- Hibernate入门案例 增删改
一.Hibernate入门案例剖析: ①创建实体类Student 并重写toString方法 public class Student { private Integer sid; private I ...
- 用JS添加文本框案例代码
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- SQL Server 表的管理_关于事务的处理的详解(案例代码)
SQL Server 表的管理_关于事务的处理的详解(案例代码) 一.SQL 事务 1.1SQL 事务 ●事务是在数据库上按照一定的逻辑顺序执行的任务序列,既可以由用户手动执行,也可以由某种数据库程序 ...
- SQL Server 表的管理_关于数据增删查改的操作的详解(案例代码)
SQL Server 表的管理_关于数据增删查改的操作的详解(案例代码)-DML 1.SQL INSERT INTO 语句(在表中插入) INSERT INTO 语句用于向表中插入新记录. SQL I ...
- SQL Server 表的管理_关于表的操作增删查改的操作的详解(案例代码)
SQL Server 表的管理_关于表的操作增删查改的操作的详解(案例代码) 概述: 表由行和列组成,每个表都必须有个表名. SQL CREATE TABLE 语法 CREATE TABLE tabl ...
- SQL Server 表的管理_关于事务操作的详解(案例代码)
SQL Server 表的管理_关于事务操作的详解(案例代码) 1.概念 事务(transaction): 是将多个修改语句组合在一起的方法,这个方法中的所有语句只有全部执行才能正确完成功能.即要么全 ...
- hibernate Day2
Day21 实体类编写规则(1 ) 实体类中的属性是私有属性(2) 私有属性要生成get与set方法(3) 实体类中有属性作为唯一值(一般使用id值)(4) 实体类属性建议不要使用基本数据类型, 应当 ...
随机推荐
- Codeforces Round #254 (Div. 2) A. DZY Loves Chessboard —— dfs
题目链接: http://codeforces.com/problemset/problem/445/A 题解: 这道题是在现场赛的最后一分钟通过的,相当惊险,而且做的过程也很曲折. 先是用递推,结果 ...
- Floyd算法(弗洛伊德算法) 百度百科
核心代码 for(int k=1; k<=NODE; ++k)//对于每一个中转点 for(int i=0; i<=NODE; ++i)//枚举源点 for(int j=0; j<= ...
- Java连接redis操作数据
选择2.9.0 jar 版本下载: jedis-2.9.0.jar package com.hao.redis; import org.junit.Before;import org.junit.Te ...
- python装饰器精髓代码
#!/usr/bin/env python #-*- coding:utf-8 -*- import time def foo(func): def inner(): print('fs...') f ...
- codevs 3269 混合背包(复习混合背包)
传送门 [题目大意]给出物品的数量.-1为无限个. [思路]混合背包.... [code] #include<iostream> #include<cstdio> #inclu ...
- vuex 命名空间
默认情况下,模块内部的action mutation getter是注册在全局命名空间的,如果希望你的模块具有更高的封装度和复用性,你可以通过添加namespaced:true的方式使其成为带命名空间 ...
- hibernate学习三 精解Hibernate之核心文件
一 hibernate.cfg.xml详解 1 JDBC连接: 2 配置C3P0连接池: 3 配置JNDI数据源: 4 可选的配置属性: 5 hibernate二级缓存属性 6 hibernate事务 ...
- 8个超炫的 Web 效果
CodePen 是一个在线的 HTML.CSS 和 JavaScript 代码编辑器,能够编写代码并即时预览效果.你在上面可以在线展示自己的作品,也可以看到其他人在网页中实现的各种令人惊奇的效果. 今 ...
- 抓屏工具 faststone capture
百度百科 http://baike.baidu.com/link?url=te51CfOKYIEmqT1jsyRwcB8Pnals5xQ8nUXk6trvBPGSJRBO5G7BEZL7cYQxmx8 ...
- python 之单例
# 单例模式 class MySQL: __instance = None def __init__(self): self.host = '127.0.0.1' self.port = 3306 @ ...