<?xml version="1.0"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> <!-- 导入包 --> <hibernate-mapping package="cn.itcast.d_hbm_id"> <!-- 类名 --> <class name="User" table="d_user"> <!-- id元素用于映射主键 子元素generator是用于指定主键生成策略的(以某种方式来生成主键值)。 --> <id name="id" type="string" column="id"> <!-- identity:使用数据库的自动增长策略,不是所有数据库都支持,比如oracle就不支持 <generator class="identity"/> --> <!-- sequence:在 DB2,PostgreSQL,Oracle,SAP DB,McKoi 中使用序列(sequence)自动增长策略 <generator class="sequence"/> --> <!-- hilo:使用高低位算法来生成主键值,只需要一张额外的表,所有数据库都支持 <generator class="hilo"> <param name="table">hi_value</param> <param name="column">next_value</param> <param name="max_lo">100</param> </generator> --> <!-- native:根据底层数据库的能力选择 identity、sequence 或者 hilo 中的一个。 <generator class=""/> --> <!-- increment:由Hibernate维护的自动增长。先查询最大的id值,再加1使用,不推荐使用,因为在多线程下会有问题 <generator class="increment"/> --> <!-- assigned:手工指定主键id值 <generator class="assigned"/> --> <!-- uuid:由Hibernate自动生成UUID并指定为主键值。 <generator class="uuid"/> --> <!-- foreign:当前值是外键 --> </id> <property name="name" type="string" column="name" /> </class> </hibernate-mapping> package cn.itcast.d_hbm_id; /** * 实体 * * @author 风清杨 * @version V1.0 */ public class User { // private Integer id;// 编号 private String id; private String name;// 姓名 public String getId() { return id; } public void setId(String id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } @Override public String toString() { return "User [id=" + id + ", name=" + name + "]"; } } package cn.itcast.d_hbm_id; import org.hibernate.Session; import org.hibernate.SessionFactory; import org.hibernate.Transaction; import org.hibernate.cfg.Configuration; import org.junit.Test; /** * 操作类 * * @author 风清杨 * @version V1.0 */ public class App { private static SessionFactory sessionFactory;// 创建会话工厂 // 初始化配置 static { // 会话工厂生成 sessionFactory = new Configuration()// .configure()// .addClass(User.class)// 添加hibernate实体类(加载对应的映射文件) .buildSessionFactory(); } /** * 保存 */ @Test public void testSave() throws Exception { Session session = sessionFactory.openSession();// 打开Session Transaction tx = null; try { tx = session.beginTransaction();// 开始事务 // -------------------------------- User user = new User(); // user.setId(99); // user.setId("itcast_002"); user.setName("林天"); session.save(user); // session.save(new User()); // -------------------------------- tx.commit();// 提交事务 } catch (Exception e) { tx.rollback();// 回滚事务 throw e; } finally { session.close();// 释放资源 } } /** * 保存 */ @Test public void testSave_100() throws Exception { Session session = sessionFactory.openSession();// 打开Session Transaction tx = null; try { tx = session.beginTransaction();// 开始事务 // -------------------------------- for (int x = 1; x < 101; x++) { User user = new User(); // user.setId(99); user.setName("林天" + x); session.save(user); } for (int x = 1; x < 101; x++) { User user = new User(); // user.setId(99); user.setName("林天" + x); session.save(user); } // -------------------------------- tx.commit();// 提交事务 } catch (Exception e) { tx.rollback();// 回滚事务 throw e; } finally { session.close();// 释放资源 } } @Test public void testGet() throws Exception { Session session = sessionFactory.openSession(); Transaction tx = null; try { tx = session.beginTransaction(); // -------------------------------- User user = (User) session.get(User.class, 99); System.out.println(user.getId()); System.out.println(user.getName()); // -------------------------------- tx.commit(); } catch (RuntimeException e) { tx.rollback(); throw e; } finally { session.close(); } } }