分享web开发知识

注册/登录|最近发布|今日推荐

主页 IT知识网页技术软件开发前端开发代码编程运营维护技术分享教程案例
当前位置:首页 > IT知识

hibernate Day2 ???案例代码

发布时间:2023-09-06 01:06责任编辑:顾先生关键词:暂无标签

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;}@Overridepublic String toString() {return "Person [u, 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 ></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> */@Testpublic 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 {@Testpublic 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 ???案例代码

原文地址:http://www.cnblogs.com/1020182600HENG/p/7424274.html

知识推荐

我的编程学习网——分享web前端后端开发技术知识。 垃圾信息处理邮箱 tousu563@163.com 网站地图
icp备案号 闽ICP备2023006418号-8 不良信息举报平台 互联网安全管理备案 Copyright 2023 www.wodecom.cn All Rights Reserved