1. hibernate的主键生成器:
generator元素:表示了一个主键生成器,它用来为持久化类实例生成唯一的标识 。
1.1 程序员自己控制:assigned
1.2 数据库控制: identity(标识列/自动增长) sequence
1.3 hibernate控制:increment uuid/uuid.hex
1.4 其它:native
公司名_模块名_时间戳
student id int
worker id varchar
2. 主键生成器要求
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(重点掌握)
等于identity+sequence直接上代码
提供一个工具类entity:
student
packagecom.pyc.first.entity;publicclassStudent{privateInteger sid;privateString sname;publicIntegergetSid(){returnsid;}publicvoidsetSid(Integer sid){this.sid=sid;}publicStringgetSname(){returnsname;}publicvoidsetSname(String sname){this.sname=sname;}@OverridepublicStringtoString(){return"Student [sid="+sid+", sname="+sname+"]";}publicStudent(){super();}}Sutdent.hbm.xml ```java<?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><classname="com.pyc.first.entity.Student"table="t_hibernate_student"><id name="sid"type="java.lang.Integer"column="sid"><!--<generatorclass="assigned"/>--><!--程序员自己控制--><!--<generatorclass="identity"/>--><!--数据库控制(标识列/自动增长)--><!--<generatorclass="increment"/>--><!--hibernate控制--></id><property name="sname"type="java.lang.String"column="sname"></property></class></hibernate-mapping>worker.java
packagecom.pyc.first.entity;publicclassWorker{privateString wid;privateString wname;publicStringgetWid(){returnwid;}publicvoidsetWid(String wid){this.wid=wid;}publicStringgetWname(){returnwname;}publicvoidsetWname(String wname){this.wname=wname;}@OverridepublicStringtoString(){return"Worker [wid="+wid+", wname="+wname+"]";}publicWorker(String wid,String wname){super();this.wid=wid;this.wname=wname;}publicWorker(){super();}}Worker.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><classname="com.pyc.first.entity.Worker"table="t_hibernate_worker"><id name="wid"type="java.lang.String"column="wid"><generatorclass="uuid"/><!--<generatorclass="uuid"/>--><!--随机生成--><!--<generatorclass="assigned"/>--><!--<generatorclass="sequence"/>--><!--<generatorclass="sequence"><param name="sequence_name">aaa</param></generator>--><property name="wname"type="java.lang.String"column="wname"></property></class></hibernate-mapping>Util包
packagecom.pyc.first.util;importorg.hibernate.Session;importorg.hibernate.SessionFactory;importorg.hibernate.cfg.Configuration;/** * 本工具类的作用 * 1.简化代码的书写 * 2.检测hibernate相关的配置是否正确 * * @author 96345 * */publicclassSessionFactoryUtils{privatestaticSessionFactory sessionFactory;static{Configuration cfg=newConfiguration().configure("/hibernate.cfg.xml");sessionFactory=cfg.buildSessionFactory();}//开启publicstaticSessionopenSession(){Session session=sessionFactory.getCurrentSession();if(session==null){session=sessionFactory.openSession();}returnsession;}//关闭publicstaticvoidcloseSession(){Session session=sessionFactory.getCurrentSession();if(session!=null&&session.isOpen()){session.close();}}publicstaticvoidmain(String[]args){Session session=SessionFactoryUtils.openSession();session.beginTransaction();System.out.println(session.isConnected());SessionFactoryUtils.closeSession();System.out.println(session.isConnected());}}Demo包
DemoDao.java
packagecom.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 session=SessionFactoryUtils.openSession();Transaction transaction=session.beginTransaction();//开启事务Serializable save=session.save(stu);//返回事务transaction.commit();SessionFactoryUtils.closeSession();returnsave;}/** * 添加工人 * @param work * @return */publicSerializableaddWork(Worker wor){Session session=SessionFactoryUtils.openSession();Transaction transaction=session.beginTransaction();Serializable save=session.save(wor);transaction.commit();SessionFactoryUtils.closeSession();returnsave;}}DemoDaoTest.java
packagecom.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 demoDao=newDemoDao();@BeforepublicvoidsetUp()throwsException{// System.out.println("测试所有要测试的方法之前都会执行的内容(一般用来初始化数据所用)");}@AfterpublicvoidtearDown()throwsException{// System.out.println("测试所有要测试的方法之后都会执行的内容(一般用来释放资源所用)");}@TestpublicvoidtestAddStu(){Student stu=newStudent();stu.setSname("rich brian");stu.setSid(73);demoDao.addStu(stu);}@TestpublicvoidtestAddWorker(){Worker worker=newWorker();worker.setWname("ice gream");worker.setWid("100 DEGREES");Serializable wid=demoDao.addWork(worker);System.out.println(wid);}publicvoidtestAddWork(){Worker worker=newWorker();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 sdf=newSimpleDateFormat("yyyy-MM-dd HH:mm:ss");return"book_category_"+sdf.format(newDate());}}testAddStu图片结果:
testAddWork:
<?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><classname="com.pyc.first.entity.Worker"table="t_hibernate_worker"><id name="wid"type="java.lang.String"column="wid"><!--<generatorclass="uuid"/>-->//注释<!--<generatorclass="assigned"/>--><!--<generatorclass="sequence"/>--><!--<generatorclass="sequence"><param name="sequence_name">aaa</param></generator>--><generatorclass="com.pyc.first.id.Myts"/>//放开</id><property name="wname"type="java.lang.String"column="wname"></property></class></hibernate-mapping>