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) 实体类属性建议不要使用基本数据类型, 应当 ...
随机推荐
- 人生苦短之Python的urllib urllib2 requests
在Python中涉及到URL请求相关的操作涉及到模块有urllib,urllib2,requests,其中urllib和urllib2是Python自带的HTTP访问标准库,requsets是第三方库 ...
- codeforces B. Polo the Penguin and Matrix 解题报告
题目链接:http://codeforces.com/problemset/problem/289/B 题目意思:给出一个 n 行 m 列的矩阵和数值 d .通过对矩阵里面的数进行 + d 或者 - ...
- 自定义标签(客户化jsp标签)
客户化jsp标签技术是在jsp1.1版本中才出现的,他支持用户在jsp文件中自定义标签,这样可以使jsp代码更加简单,这些可重用的标签能够处理复杂的逻辑运算和事物或定义jsp网页的输出内容和格式. 创 ...
- LoadRunner打开WebTours只显示头部解决办法
LoadRunner打开WebTours只显示头部解决办法 1.遇到这种情况,先查看一下路径HP\LoadRunner\WebTours下的cgierr日志中是否有错误,比如Can't open ...
- linux安装flume及问题
验证是否安装成功: [root@master conf]# /usr/local/src/apache-flume-1.6.0-bin/bin/flume-ng versionError: Could ...
- 在JS中将指定表单内的“具有name数据的表单元素的值”封装为Get形式的字符串
//封装post时候,表单中所有具有name数据的表单元素的值,并返回“n=1&p=a” function serialize(formid) { var arr = []; var ipts ...
- 三 vue学习三 从读懂一个Vue项目开始
源码地址: https://github.com/liufeiSAP/vue2-manage 我们的目录结构: 目录/文件 说明 build 项目构建(webpack)相关代码. config ...
- hibernate的优缺点和适用场合
Hibernate优点: 1.对象化.人员以面相对象的思想来操作数据库.Hibernate支持许多面向对象的特性,如组合,继承,多态等. 2.更好的移植性.对于不同的数据库,开发者只需要使用相同的数据 ...
- cx_Oracle库导入失败引起crontab中python程序运行失败,并且无错误提示
今天遇到一个问题: 一个python脚本命令行运行时很正常,放到crontab中就无法工作,日志也没有记录,找了半天,终于发现问题所在. 在脚本最上方,程序如下: #!/usr/local/bin p ...
- Flutter实战视频-移动电商-35.列表页_上拉加载更多制作
35.列表页_上拉加载更多制作 右侧列表上拉加载配合类别的切换 上拉加载需要一个page参数,当点击大类或者小类的时候,这个page就要变成1 provide内定义参数 首先我们需要定义一个page的 ...