模式不匹配:
Java面向对象语言,对象模型,其主要概念有:继承,关联,多态等,数据库是关系模型,其主要概念有:表主键、外键等;
解决办法:
1、 使用JDBC手工转化
2、 使用ORM(Object Relation Mapping)框架来解决,主流的ORM框架有Hibernate(JBOSS),TopLink(Ore),OJB(ap)
配置文件hibernate.cfg.xml和hibernate.properties.properties,XML和properties两种,这两个文件的作用一样,提供一个即可,推荐XML格式,下载目录/etc下是示例配置文件。
可以在配置文件指定:
数据库的URL、用户名,密码、JDBC驱动类,方言等。
启动时Hibernate会在CLASSPATH里找这个配置文件。
映射文件(hbm.xml,对象模式和关系模式的映射)。在/eg墨绿下有完整的hibernate示例。
开发流程:
1、 由Domain object->mapping->db
2、 由DB开始,用工具生成mapping和Domain object。
3、 由映射文件开始
Domian object限制
1、 默认的构造方法(必须的)
2、 有无意义的标示符id(主键)
3、 非final的,对懒加载有影响
Domian Java Object(User)
public class User{
private int id;
private String name;
private Date birthDay;
//getter setter…
}
基本概念和CURD:
1、 hbm.xml
<?xml version=”1.0”? >
<hibernate-mapping=”cn.itcast.domian”>
<class name=”User” table=”user”>
<id name=”id”>
<generator class=” native”/>
</id>
<property name=”name”>
<property name=”birthday”>
</class>
</hibernate-mapping>
1、初始化代码(只做一次)
Configuration cfg=new Configuration();
cfg.configure(“config.cfg.xml”);
也可以通过cfg.setProperty设置属性。
SessionFactory sessionFactory=cfg.buildSessionFactory()
2、 模式代码
Session session=null;Transactory 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();
}
}
Session的几个主要的方法:
1、Save,persist保存数据,persist在事物外不会产生insert语句。
2、delete,删除对象
3、update,更新对象如果数据库中没有记录,会出现异常。
4、get,根据ID查,会立即访问数据库
5、Load,根据ID查(返回的是代理,不会立即访问数据库)
6、saveOrUpdate,merge(根据ID和version的值来确定是save或update),调用merge你的对象还是托管的。
7、lock(把对象变成持久对象,但不会同步对象的状态)。