
1. hibernate的主键生成器:generator元素表示了一个主键生成器它用来为持久化类实例生成唯一的标识 。1.1 程序员自己控制assigned1.2 数据库控制: identity(标识列/自动增长) sequence1.3 hibernate控制:increment uuid/uuid.hex1.4 其它:native公司名_模块名_时间戳student id intworker id varchar2. 主键生成器要求2.1 assigned数据类型不限、保存前必须赋值# 2.2 identity(重点掌握)数字无需赋值2.3 sequence(重点掌握)数字无需赋值 默认使hibernate_sequence这个序列 也可以通过sequence/sequence_name参数赋值2.4 increment数字无需赋值2.5 uuid/uuid.hex (是由容器自动生成的一个32位的字符串.hex代表的是十六进制)32位的字符串无需赋值2.6 native(重点掌握)等于identitysequence直接上代码提供一个工具类entity:studentpackagecom.pyc.first.entity;publicclassStudent{privateInteger sid;privateString sname;publicIntegergetSid(){returnsid;}publicvoidsetSid(Integer sid){this.sidsid;}publicStringgetSname(){returnsname;}publicvoidsetSname(String sname){this.snamesname;}OverridepublicStringtoString(){returnStudent [sidsid, snamesname];}publicStudent(){super();}}Sutdent.hbm.xml java?xml version1.0encodingUTF-8?!DOCTYPE hibernate-mapping PUBLIC-//Hibernate/Hibernate Mapping DTD 3.0//ENhttp://www.hibernate.org/dtd/hibernate-mapping-3.0.dtdhibernate-mappingclassnamecom.pyc.first.entity.Studenttablet_hibernate_studentid namesidtypejava.lang.Integercolumnsid!--generatorclassassigned/--!--程序员自己控制--!--generatorclassidentity/--!--数据库控制(标识列/自动增长)--!--generatorclassincrement/--!--hibernate控制--/idproperty namesnametypejava.lang.Stringcolumnsname/property/class/hibernate-mappingworker.javapackagecom.pyc.first.entity;publicclassWorker{privateString wid;privateString wname;publicStringgetWid(){returnwid;}publicvoidsetWid(String wid){this.widwid;}publicStringgetWname(){returnwname;}publicvoidsetWname(String wname){this.wnamewname;}OverridepublicStringtoString(){returnWorker [widwid, wnamewname];}publicWorker(String wid,String wname){super();this.widwid;this.wnamewname;}publicWorker(){super();}}Worker.hbm.xml?xml version1.0encodingUTF-8?!DOCTYPE hibernate-mapping PUBLIC-//Hibernate/Hibernate Mapping DTD 3.0//ENhttp://www.hibernate.org/dtd/hibernate-mapping-3.0.dtdhibernate-mappingclassnamecom.pyc.first.entity.Workertablet_hibernate_workerid namewidtypejava.lang.Stringcolumnwidgeneratorclassuuid/!--generatorclassuuid/--!--随机生成--!--generatorclassassigned/--!--generatorclasssequence/--!--generatorclasssequenceparam namesequence_nameaaa/param/generator--property namewnametypejava.lang.Stringcolumnwname/property/class/hibernate-mappingUtil包packagecom.pyc.first.util;importorg.hibernate.Session;importorg.hibernate.SessionFactory;importorg.hibernate.cfg.Configuration;/** * 本工具类的作用 * 1.简化代码的书写 * 2.检测hibernate相关的配置是否正确 * * author 96345 * */publicclassSessionFactoryUtils{privatestaticSessionFactory sessionFactory;static{Configuration cfgnewConfiguration().configure(/hibernate.cfg.xml);sessionFactorycfg.buildSessionFactory();}//开启publicstaticSessionopenSession(){Session sessionsessionFactory.getCurrentSession();if(sessionnull){sessionsessionFactory.openSession();}returnsession;}//关闭publicstaticvoidcloseSession(){Session sessionsessionFactory.getCurrentSession();if(session!nullsession.isOpen()){session.close();}}publicstaticvoidmain(String[]args){Session sessionSessionFactoryUtils.openSession();session.beginTransaction();System.out.println(session.isConnected());SessionFactoryUtils.closeSession();System.out.println(session.isConnected());}}Demo包DemoDao.javapackagecom.pyc.first.dao;importjava.io.Serializable;importorg.hibernate.Session;importorg.hibernate.Transaction;importcom.pyc.first.entity.Student;importcom.pyc.first.entity.Worker;importcom.pyc.first.util.SessionFactoryUtils;publicclassDemoDao{/** * 添加学生 * param stu * return */publicSerializableaddStu(Student stu){Session sessionSessionFactoryUtils.openSession();Transaction transactionsession.beginTransaction();//开启事务Serializable savesession.save(stu);//返回事务transaction.commit();SessionFactoryUtils.closeSession();returnsave;}/** * 添加工人 * param work * return */publicSerializableaddWork(Worker wor){Session sessionSessionFactoryUtils.openSession();Transaction transactionsession.beginTransaction();Serializable savesession.save(wor);transaction.commit();SessionFactoryUtils.closeSession();returnsave;}}DemoDaoTest.javapackagecom.pyc.first.dao;importjava.io.Serializable;importorg.junit.After;importorg.junit.Before;importorg.junit.Test;importcom.pyc.first.entity.Student;importcom.pyc.first.entity.Worker;publicclassDemoDaoTest{privateDemoDao demoDaonewDemoDao();BeforepublicvoidsetUp()throwsException{// System.out.println(测试所有要测试的方法之前都会执行的内容一般用来初始化数据所用);}AfterpublicvoidtearDown()throwsException{// System.out.println(测试所有要测试的方法之后都会执行的内容一般用来释放资源所用);}TestpublicvoidtestAddStu(){Student stunewStudent();stu.setSname(rich brian);stu.setSid(73);demoDao.addStu(stu);}TestpublicvoidtestAddWorker(){Worker workernewWorker();worker.setWname(ice gream);worker.setWid(100 DEGREES);Serializable widdemoDao.addWork(worker);System.out.println(wid);}publicvoidtestAddWork(){Worker workernewWorker();worker.setWname(冲冲冲);demoDao.addWork(worker);}}Id包Myts.java:(公司名_模块名_时间戳)packagecom.pyc.first.id;importjava.io.Serializable;importjava.text.SimpleDateFormat;importjava.util.Date;importorg.hibernate.HibernateException;importorg.hibernate.engine.spi.SharedSessionContractImplementor;importorg.hibernate.id.IdentifierGenerator;publicclassMytsimplementsIdentifierGenerator{OverridepublicSerializablegenerate(SharedSessionContractImplementor session,Object object)throwsHibernateException{SimpleDateFormat sdfnewSimpleDateFormat(yyyy-MM-dd HH:mm:ss);returnbook_category_sdf.format(newDate());}}testAddStu图片结果testAddWork:?xml version1.0encodingUTF-8?!DOCTYPE hibernate-mapping PUBLIC-//Hibernate/Hibernate Mapping DTD 3.0//ENhttp://www.hibernate.org/dtd/hibernate-mapping-3.0.dtdhibernate-mappingclassnamecom.pyc.first.entity.Workertablet_hibernate_workerid namewidtypejava.lang.Stringcolumnwid!--generatorclassuuid/--//注释!--generatorclassassigned/--!--generatorclasssequence/--!--generatorclasssequenceparam namesequence_nameaaa/param/generator--generatorclasscom.pyc.first.id.Myts///放开/idproperty namewnametypejava.lang.Stringcolumnwname/property/class/hibernate-mapping