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();
			}
		}
	}
}

  

时间: 2024-10-07 07:42:02

hibernate Day2 案例代码的相关文章

SpringMVC+Apache Shiro+JPA(hibernate)案例教学(二)基于SpringMVC+Shiro的用户登录权限验证

序: 在上一篇中,咱们已经对于项目已经做了基本的配置,这一篇文章开始学习Shiro如何对登录进行验证. 教学: 一.Shiro配置的简要说明. 有心人可能注意到了,在上一章的applicationContext.xml配置文件中,包含以下配置. <!-- 項目自定义的Realm --> <bean id="shiroDbRealm" class="org.shiro.demo.service.realm.ShiroDbRealm" ><

SpringMVC+Apache Shiro+JPA(hibernate)案例教学(四)基于Shiro验证用户权限,且给用户授权

最新项目比较忙,写文章的精力就相对减少了,但看到邮箱里的几个催更,还是厚颜把剩下的文档补上. 一.修改ShiroDbRealm类,实现它的doGetAuthorizationInfo方法 package org.shiro.demo.service.realm; import java.util.ArrayList; import java.util.List; import javax.annotation.Resource; import org.apache.commons.lang.St

Hibernate入门案例及增删改查

一.Hibernate入门案例剖析: ①创建实体类Student 并重写toString方法 public class Student { private Integer sid; private Integer age; private String name; public Integer getSid() { return sid; } public void setSid(Integer sid) { this.sid = sid; } public Integer getAge() {

Hibernate入门案例 增删改

一.Hibernate入门案例剖析: ①创建实体类Student 并重写toString方法 public class Student { private Integer sid; private Integer age; private String name; public Integer getSid() { return sid; } public void setSid(Integer sid) { this.sid = sid; } public Integer getAge() {

SpringMVC+Apache Shiro+JPA(hibernate)案例教学(三)给Shiro登录验证加上验证码

序: 给Shiro加入验证码,有多种方式,当然你也可以通过继承修改FormAuthenticationFilter类,通过Shiro去验证验证码.具体实现请百度: 应用Shiro到Web Application(验证码实现) 而今天我要说的,既然使用的SpringMVC,为什么不直接在Controller中就处理验证码验证,让事情变的更简单一点呢? 一.新建ValidateCode.java验证码工具类 package org.shiro.demo.util; import java.util.

java 编程思想 22.11: java bean 案例代码

java 编程思想  22.11:   java bean 案例代码 thinking in java 4免费下载:http://download.csdn.net/detail/liangrui1988/7580155 package org.rui.swing.bean; import java.awt.Color; import java.awt.event.ActionListener; import java.awt.event.KeyListener; import org.rui.

用JS添加文本框案例代码

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-

银联在线支付---利用测试案例代码模拟测试应用

一.工程搭建 新建一个Web工程,命名为PayOnLine,把你下载好的案例代码拷贝到你的工程下,我的代码目录如下: acp_sdk.properties配置文件需要放在类根路劲下,里面的参数配置信息,下面是案例提供的配置提示: 0. 注意: 1)依赖包和upacp_sdk-1.0.0.jar都需加到buildpath. 2)acp_sdk.properties放到src根目录下.另外如果用的不是eclipse/MyEclipse可能这个文件默认不会被拷贝到classes目录下,导致加载不到这个

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

SQL Server 表的管理_关于表的操作增删查改的操作的详解(案例代码) 概述: 表由行和列组成,每个表都必须有个表名. SQL CREATE TABLE 语法 CREATE TABLE table_name ( column_name1 data_type(size), column_name2 data_type(size), column_name3 data_type(size), .... ); 1.查看表 exec sp_help table1; 2.创建表 create tab