首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件架构设计 >

2 细节分析 入门

2012-08-29 
二 细节分析 入门写道开发hibernate 牵扯到实体类的编写 映射文件的编写 表的编写开发流程 三种方式?1由Do

二 细节分析 入门
写道开发hibernate 牵扯到实体类的编写 映射文件的编写 表的编写开发流程 三种方式
?1由Domain object -> mapping->db。(官方推荐)
?2由DB开始,用工具生成mapping和Domain object。(使用较多)
?3由映射文件开始。Domain Object限制
?1.默认的构造方法(必须的)。
?2有无意义的标示符id(主键)(可选)
?3非final的,对懒加载有影响(可选)
?Domain Java Object(User)
public class User {
?private int id;
?private String name;
?private Date birthDay;?//getter setter…
}解释
默认的构造方法 必须要有
id可选 如果实体类没有这个id 那么就不能充分发挥hibernate的作用
实体类修饰符 final 最好不要使用 否则hibernate的懒加载就不能使用
核心文件 映射文件
<?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="dao.service">
?<class name="User">?
??<id name="id">
???<generator class="native"/>
??</id>
??<property name="name"/>
??<property name="birthday"/>?
?</class>
?
</hibernate-mapping>分析 class 指定一个实体 对应的表 默认的是实体类的小写 如不指定 将是默认的表名 user
里面有个tabel属性 对应的映射的表名称 id 指定主键 generator属性指定的是主键生成方式 name实体属性名称
property 指定实体属性 name指定实体属性名称 Java代码
?1.初始化代码(只做一次)
? Configuration cfg = new Configuration();
? cfg.configure(“config.cfg.xml”);
? 也可以通过cfg.setProperty设置属性。
? SessionFactory sessionFactory = cfg.buildSessionFactory();?
?2.模板代码
Session session = null;Transaction tx = null;
try{
?session = sessionFactory.openSession();
?tx = session.beginTransaction();
?//…你的代码save,delete,update,get…
?tx.commit();
}catch(Exception e){
?if(tx !=null)tx.rollback();throw e;
}finally{
?if(session != null)session.close();
} 例子程序
工具类
package dao.util;import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;/**
?* 这是个工具类 一般不希望别的类去继承修改的
?* 并且设置为单例模式? private修饰构造方法表示这个类不可以实例化
?* 在这个类中有一断静态的代码块 这样的话,这个类就成为单例模式
?* @author Administrator
?*
?*/
public final class HibernateUtil {
??? private static SessionFactory sessionFactory;
?private HibernateUtil(){
??
?}
?static {
??Configuration ctf=new Configuration();
??????? ctf.configure();
??????? //获取连接工厂
??????? sessionFactory=ctf.buildSessionFactory();
?}
?public static SessionFactory getSessionFactory() {
??return sessionFactory;
?}
?
?public static Session getSession(){
??? return sessionFactory.openSession();
?}
}测试类
package dao.test;import java.util.Date;import org.hibernate.HibernateException;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;import dao.service.User;
import dao.util.HibernateUtil;public class Base {?/**
? * @param args
? */
?public static void main(String[] args) {
??// TODO Auto-generated method stub
??//对hibernate进行初始化操作
//??Configuration ctf=new Configuration();
//??????? ctf.configure();
//??????? //获取连接工厂
//??????? SessionFactory sf=ctf.buildSessionFactory();
//??????? //获取连接对象
//??????? Session s=sf.openSession();
//??????? Transaction tx=s.beginTransaction();
??????? User user=new User();
??????? user.setBirthday(new Date());
??????? user.setName("name");
??????? addUser2(user);
??????? System.out.print("end");
?}
?? static void addUser1(User user)
?? {
?????? Session s=null;
?????? Transaction tx=null;
?????? try{
???? ???? s=HibernateUtil.getSession();
???? ???? tx=s.beginTransaction();
???? ???? s.save(user);
???? ???? tx.commit();
?????? }catch(HibernateException e)
?????? {
???? ???? if(tx!=null){
???? ???? ?tx.rollback();
???? ???? ?throw e;
???? ???? }
?????? }finally
?????? {
???? ?? if(s!=null)
???? ?? {
???? ??? s.close();
???? ?? }
?????? }
?? }
??
??
?? static void addUser2(User user)
?? {
?????? Session s=null;
?????? Transaction tx=null;
?????? try{
???? ???? s=HibernateUtil.getSession();
???? ???? tx=s.beginTransaction();
???? ???? s.save(user);
???? ???? tx.commit();
?????? }finally
?????? {
???? ?? if(s!=null)
???? ?? {
???? ??? s.close();
???? ?? }
?????? }
?? }
}完毕!

?

热点排行