写道
开发hibernate 牵扯到实体类的编写 映射文件的编写 表的编写
开发流程 三种方式
1由Domain object -> mapping->db。(官方推荐)
2由DB开始,用工具生成mapping和Domain object。(使用较多)
3由映射文件开始。
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;
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的懒加载就不能使用
默认的构造方法 必须要有
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属性 对应的映射的表名称
里面有个tabel属性 对应的映射的表名称
id 指定主键 generator属性指定的是主键生成方式 name实体属性名称
property 指定实体属性 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();
}
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;
工具类
package dao.util;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
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();
}
}
* 这是个工具类 一般不希望别的类去继承修改的
* 并且设置为单例模式 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;
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 org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;
import dao.service.User;
import dao.util.HibernateUtil;
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();
}
}
}
}
* @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();
}
}
}
}
完毕!