什么是POJO?
POJO是最纯粹的Java对象,也就是说这个对象没有继承任何第三方框架的任何类和实现他的任何接口。
轻量级框架:没有侵入性,也就是说没侵入Hibernate任何东西。轻量级框架最显著的一个特点就是没有侵入性,没有侵入性好在那里,就是移植性就会比较好。
类似Hibernate框架适合在那些情况下使用:
★合适的情况
S征对某一个对象,简单的把它查询下来,然后再对它进行编辑,修改,而且编辑修改只是对单个对象,而不是说对所有的对象批量修改,批量的删除等等,在这样的情况下是适合的。
S对象之间有着很清晰的关系。如:User和Group,它们有很清晰的关系,多个用户属于一个组,一个组下有多个用户。如果从关系上来看,多个用户属于一个组,我们可以映射成多对一关系,叫Many to One这样一个关系;那么从组到用户来看,一个组下有多个用户,那么这是一对多的关系,One to Many,这是一个很正常的关系。但如果这种关系已经很错综复杂了,那么其实并不适合使用类似Hibernate这种框架,也就是O-R映射工具。
★不适合的情况:
批量的对数据时行修改的时候,在这种情况下Hibernat是不适合的,还有Apache OJB、JDO等框架都不适合,这是O-R构架的一个弱点。
所谓的映射就是:这个类要存到那个表里,这个类中的属性要存在那个字段上,是这样一个过程。
Hibernate所需要加的Jar包:
1.)hibernate核心Jar包-hibernate3.jar,位于hibernate-x.x下
2.)hibernate-x.x下的lib包里的所有Jar包
3.)相应的数据库驱动程序。
第一个hibernate项目
1、新建java项目
2、创建User Library,加入如下jar
* HIBERNATE_HOME/hibernate3.jar
* HIBERNATE_HOME/lib/*.jar
* MySql jdbc驱动
3、创建hibernate配置文件hibernate.cfg.xml,为了便于调试最好加入log4j配置文件
例如:
4、定义实体类
也就是持久类,POJO类,即要存入数据库的类
5、定义User类的映射文件User.hbm.xml
6、将User.hbml.xml文件加入到hibernate.cfg.xml文件中
7、编写hbm2ddl工具类,将实体类生成数据库表
这是一个工具类,专门把对象模型生成为关系模型,也就是说对象生成表,这样一个模型,这个工具类在一个项目中写一次就可以了。其实这个类起的作用就是将Hibernate.cfg.xml转化为DDl。
8、开发客户端
为了方便跟踪sql执行,在hibernate.cfg.xml文件中加入
Hibernate配置文件:包含数据库连接信息,表的映射信息。
表的配置文件:对类与表的映射配置信息。
Configuration类:读取Hibernate.hbm.xml文件中的内容
SessionFaction类:通过Configuration创建SessionFaction实例,实现将类和表之间的映射。
Session.类。通过Session类保存、更新,删除及查询持久化对象,充当持久化管理器。
Session.Transaction 管理事务
POJO是最纯粹的Java对象,也就是说这个对象没有继承任何第三方框架的任何类和实现他的任何接口。
轻量级框架:没有侵入性,也就是说没侵入Hibernate任何东西。轻量级框架最显著的一个特点就是没有侵入性,没有侵入性好在那里,就是移植性就会比较好。
类似Hibernate框架适合在那些情况下使用:
★合适的情况
S征对某一个对象,简单的把它查询下来,然后再对它进行编辑,修改,而且编辑修改只是对单个对象,而不是说对所有的对象批量修改,批量的删除等等,在这样的情况下是适合的。
S对象之间有着很清晰的关系。如:User和Group,它们有很清晰的关系,多个用户属于一个组,一个组下有多个用户。如果从关系上来看,多个用户属于一个组,我们可以映射成多对一关系,叫Many to One这样一个关系;那么从组到用户来看,一个组下有多个用户,那么这是一对多的关系,One to Many,这是一个很正常的关系。但如果这种关系已经很错综复杂了,那么其实并不适合使用类似Hibernate这种框架,也就是O-R映射工具。
★不适合的情况:
批量的对数据时行修改的时候,在这种情况下Hibernat是不适合的,还有Apache OJB、JDO等框架都不适合,这是O-R构架的一个弱点。
所谓的映射就是:这个类要存到那个表里,这个类中的属性要存在那个字段上,是这样一个过程。
Hibernate所需要加的Jar包:
1.)hibernate核心Jar包-hibernate3.jar,位于hibernate-x.x下
2.)hibernate-x.x下的lib包里的所有Jar包
3.)相应的数据库驱动程序。
第一个hibernate项目
1、新建java项目
2、创建User Library,加入如下jar
* HIBERNATE_HOME/hibernate3.jar
* HIBERNATE_HOME/lib/*.jar
* MySql jdbc驱动
3、创建hibernate配置文件hibernate.cfg.xml,为了便于调试最好加入log4j配置文件
例如:
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<property name="hibernate.connection.url">jdbc:mysql://localhost/qting</property>
<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="hibernate.connection.username">root</property>
<property name="hibernate.connection.password"></property>
<property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
<property name="hibernate.show_sql">true</property>
<mapping resource="com/bjsxt/hibernate/User.hbm.xml"/>
</session-factory>
</hibernate-configuration>
4、定义实体类
也就是持久类,POJO类,即要存入数据库的类
5、定义User类的映射文件User.hbm.xml
<?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>
<class name="com.bjsxt.hibernate.User">
<id name="id">
<generator class="uuid"/>
</id>
<property name="name"/>
<property name="password"/>
<property name="createTime"/>
<property name="expireTime"/>
</class>
</hibernate-mapping>
6、将User.hbml.xml文件加入到hibernate.cfg.xml文件中
<mapping resource="com/bjsxt/hibernate/User.hbm.xml"/>
7、编写hbm2ddl工具类,将实体类生成数据库表
这是一个工具类,专门把对象模型生成为关系模型,也就是说对象生成表,这样一个模型,这个工具类在一个项目中写一次就可以了。其实这个类起的作用就是将Hibernate.cfg.xml转化为DDl。
package pserBean;
import org.hibernate.cfg.Configuration;
import org.hibernate.tool.hbm2ddl.SchemaExport;
public class ExportDB {
public static void main(String[] args) {
//读取hibernate.cfg.xml文件,因为Hibernate默认读取的是Hibernate.prefors文件,所以得在后面加上 . Configure();
Configuration cfg = new Configuration().configure();
//编写工具类,这个类能将对象模型转换为关系模型。
SchemaExport export = new SchemaExport(cfg);
export.create(true, true);
}
}
8、开发客户端
package com.hibernate;
import java.util.Date;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
public class Client {
public static void main(String[] args) {
//读取hibernate.cfg.xml文件
Configuration cfg=new Configuration().configure();
//创建SessionFactory,一个数据库对应一个SessionFactory
SessionFactory sf=cfg.buildSessionFactory();
//相当于JDBC中的Connection,但和Connectio不一样,
//可以理解为对Connection做了一层封装
Session session=null;
try{
//创建Session,从工厂创建出一个
session=sf.openSession();
//打开事务(hibernate默认的事务是False,所以得手动开启事务)
session.beginTransaction();
//设置实例类相应的属性
User user=new User();
user.setName("qtliu");
user.setPassword("qtliu");
user.setCreateTime(new Date());
user.setExpireTime(new Date());
//进行存储
session.save(user);
//手动提交,提交事务你必须得到原先开启事务的上下文,不能随便提交
//可以用Session.getTransanction()来得到先前开启事务的上下文
session.getTransaction().commit();
}catch(Exception e){
e.printStackTrace();
//事务提交后如果失败得回滚
session.getTransaction().rollback();
}finally{
//如果事务不为空
if(session!=null){
//如果事务没有关闭
if(session.isOpen()){
//那么关闭事务
session.close();
}
}
}
}
}
为了方便跟踪sql执行,在hibernate.cfg.xml文件中加入
<property name="hibernate.show_sql">true</property>
Hibernate配置文件:包含数据库连接信息,表的映射信息。
表的配置文件:对类与表的映射配置信息。
Configuration类:读取Hibernate.hbm.xml文件中的内容
SessionFaction类:通过Configuration创建SessionFaction实例,实现将类和表之间的映射。
Session.类。通过Session类保存、更新,删除及查询持久化对象,充当持久化管理器。
Session.Transaction 管理事务