Hibernate入门

1. hibernate.properties

配置文件, duurl,dbusername,dbpasswd


2. 创建持久化类
Hibernate并不要求持久化类必须实现java.io.Serializable接口,但是对于采用分布式结构的JAVA应用,当Java对象在不同的进程节点之间传输时,必须序列化这个对象

在Java Web应用中,如果希望对HttpSession中存放的JAVA对象进行持久化,必须实现Serializable接口

Hibernate要求持久化对象必须提供一个不带参数的默认构造方法

public class Custormer implements Serializable


3. 关系映射文件

class.hbm.xml

<id name="id" clumn="ID" type = "long">
<generator class="native"/>
</id>

<protperty name="sex" column="SEX" tpe="string" not-null="true"/>


4. 初始化SessionFactory
Configuration config = new Configuration();
config.addClass(Customer.class); 加载Customer.hbm.xml
sessionFactory = config.buildSessionFactory();


5. 删除一个对象
Session session = sessionFactory.openSession();
Transaction tx = null
try{
tx = session.beginTransation();
session.delete("from Custoer as c");
tx.commit()
}
catch(Exception ex)
{
if(tx !=null)
tx.roolback();
}
finally{
{
session.close();
}


6. Session, save,update,saveOrUpdate

call... setXXX()

Session.get(),load(),find()

call....getXXX()

Java应用程序不能访问持久化类的private类型的方法setXXX , getXXX, 但Hibernate 没有这个限制,可以通过反射来访问

<property name="name" access="field"/>

表明Hibernate运用Java反射机制直接访问类的属性

7. 派生属性

持久化类的有些属性的值必须运行时通过计算才能得出来,这种属性称为派生属性

<property name="totalPrice" formula="(select sum(o.PRICE) from ORDERS O where o.CUSTOMER_id=ID)"/>


8. update=false, insert=false
<property name="price" udate="false" column="PRICE"/>

表示在update or insert 语句中不会包含该字段

9. 如果表中包含许多字段,建议把dynamic-update and dynamic-insert属性设为true,这样在insert and update语句中就只包含需要插入或更新的字段

10. 命名原则

public classMyNamingStrategy implements NamingStrategy{
   public string classToTableName(String className)...
   {}
   public String propertyToColumnName(String propertyName)
   {}
}

config.setNameingStrategey(new MyNamingStrategy())
 


11 级联保存
Customer customer = new Customer("Loasan","Zhang","M",new HashSet(),"A good citizenn");

Order order1 = new Order("Order001",100,customer);
Order order2 = new Order("Order002",200,customer);
customer.getOrders().add(Oerder1);
customer.getOrders().add(Order2);
saveCustomer(customer);

save() 方法保存Customer 对象时,还会级联保存两个Order对象

你可能感兴趣的:(Hibernate)