hibernate简单总结

虽然,三大框架已经学了两大框架了,但是,都还只是有一个简单的印象。现在就总结一下hibernate的简单印象。
Hibernate把开发者从数据库编程中分离出来,在数据库外裹了一层面向对象的外衣,Java程序中所有进出数据库的操作都交由Hibernate来处理。它会为我们自动生成sql语句来操作数据库。
有了Hibernate后,我们就不再需要写繁琐的sql语句,也不用把实体对象字段一个个拆开又组装。Hibernate还提供了一个和sql语句类似的hql语句,结合Hibernate后功能更为强大,能根据实体的状态来自动对数据库进行更新和插入。
hql语句操作数据库,实际上也是要转化成标准的sql语句的,Hibernate根据用户所编写的xml映射文件来实现hql语句到sql语句的自动转换。xml映射文件是Hibernate中最为关键的配置文件,他定义了实体和数据表之间的联系,架起了两者间的桥梁。


将hibernate跑起来,主要有以下几步:

1、在http://www.hibernate.org/ 上下载hb。将antlr-2.7.6.jar、commons-collections-3.1.jar、dom4j-1.6.1.jar、hibernate3.jar、javassist-3.9.0.GA.jar、jta-1.1.jar、slf4j-api-1.5.8.jar、slf4j-simple-1.6.1.jar、mysql-connection-java-5.0.5-bin.jar这几个包导入到所建的项目下。

2、配置hb的配置文件hibernate.cfg.xml,是hb的控制核心,
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<!-- 让hb在运行时显示执行的sql语句 -->
<property name="show_sql">true</property>
<!-- 使显示的sql格式化 -->
<property name="format_sql">true</property>
<!-- 设定sql的方法,是mysql -->
<property name="dialect">
org.hibernate.dialect.MySQLDialect
</property>
<!-- jdbc驱动类的名字 -->
<property name="connection.driver_class">
com.mysql.jdbc.Driver
</property>
<!-- 数据库连接的url配置 -->
<property name="connection.url">
jdbc:mysql://localhost:3306/mynetjavablog
</property>
<!-- 数据库用户名和密码的配置 -->
<property name="connection.username">root</property>
<property name="connection.password">netjava</property>
</session-factory>
</hibernate-configuration>

以上配置是必须的。与数据库的连接,以前在MVC里,这些都是写在连接数据库的工具类里面的,现在只需在这个配置文件里进行配置就OK了。

3.将hb的配置文件配置好后,接下来就是pojo类和对应的映射文件Userinfo.hbm.xml
在数据库中事先创建好了数据库和userinfo表,pojo类Userinfo类的属性一一对应userinfo表的字段。关键的是映射文件,映射文件中的配置如下
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<!-- 指定类到表的映射 -->
<class name="hibernate.pojo.Userinfo" table="userinfo">
<!-- 主键id的生成机制:native将根据数据库自动生成,mysql是自增长方式 -->
<id name="id" column="id">
<generator class="native"></generator>
</id>
<!-- 设定Userinfo类中每个属性到数据库中表的每个列名的的映射 -->
<property name="username" column="username"></property>
<property name="pwd" column="pwd"></property>

</class>
</hibernate-mapping>

<class name="hibernate.pojo.Userinfo" table="userinfo">这句指明了类到表的映射;
<id name="id" column="id">
<generator class="native"></generator>
</id>这是主键的生成;
<property name="username" column="username"></property>以后的属性都按此进行映射。
另外将此映射文件配置好后,还要记得将它配置到hb的核心控制文件hibernate.cfg.xml中。<session-factory></session-factory>的结束标签前加上<mapping resource="hibernate/pojo/Userinfo.hbm.xml"/>。这里还要注意将包名中的点改为斜线。

4、获取hb中的Session对象的工具类HBUtils。取得根据hibernate.cfg.xml配置中的数据库的Session对象,类似于java.sql.connection对象;
public class HBUtils {
private static SessionFactory sessionFactory;
//取得根据hibernate.cfg.xml配置中的数据库的Session对象,类似于java.sql.connection对象
public static Session getSession(){
return sessionFactory.openSession();
}
//静态块,用于从hibernate.cfg.xml配置文件中初始化sessionFactory
static {
try{
sessionFactory=new Configuration().configure().buildSessionFactory();
}catch(Throwable ex){
throw new ExceptionInInitializerError(ex);
}
}
}


5、现在就可以写Userinfo的操作类UserinfoDAO类了;
public class UserinfoDAO {

//保存一个用户对象到数据库,保存成功后返回id
public int saveUserinfo(Userinfo user){
org.hibernate.Session session=HBUtils.getSession();//得到session
org.hibernate.Transaction tr=session.beginTransaction();
tr.begin();//取得事物对象,开启事物
session.save(user);//保存用户
tr.commit();//提交事物
session.close();
return user.getId();
}
//从数据库中取得指定id的用户对象
public Userinfo getUserinfoByID(int id){
org.hibernate.Session session=HBUtils.getSession();//得到session
Object object=session.get(hibernate.pojo.Userinfo.class,id);
session.close();
return (Userinfo)object;
}
}


6、写一个测试类,进行测试即可,测试类代码
public class Test {

/**
* @param args
*/
public static void main(String[] args) {
Userinfo user=new Userinfo();
user.setUsername("Hibernate测试1");
user.setPwd("hb");
UserinfoDAO userinfoDAO=new UserinfoDAO();
int id=userinfoDAO.saveUserinfo(user);
System.out.println("保存一个用户成功,保存的id是:"+id);
Userinfo lookUser=userinfoDAO.getUserinfoByID(id);
System.out.println("取得的用户是:"+lookUser.toString());

}

}



与MVC比较有相似的,也有不同的,hibernate也要取得数据库的连接,写操作类对数据库进行操作,不过不同之处在与讲数据库的连接都放到配置文件里了,我们就不在需要自己写代码连接了,还有pojo类与数据库中的表的对应也放到了一个映射文件中了,而且,连slq语句都不用我们自己写了。以上就是我对hibernate的简单认识。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值