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>
<?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 column="username"></property><property name="pwd" column="pwd"></property></class></hibernate-mapping>
public class HBUtils {private static SessionFactory sessionFactory;//取得根据hibernate.cfg.xml配置中的数据库的Session对象,类似于java.sql.connection对象public static Session getSession(){return sessionFactory.openSession();}//静态块,用于从hibernate.cfg.xml配置文件中初始化sessionFactorystatic {try{sessionFactory=new Configuration().configure().buildSessionFactory();}catch(Throwable ex){throw new ExceptionInInitializerError(ex);}}}
public class UserinfoDAO {//保存一个用户对象到数据库,保存成功后返回idpublic int saveUserinfo(Userinfo user){org.hibernate.Session session=HBUtils.getSession();//得到sessionorg.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();//得到sessionObject object=session.get(hibernate.pojo.Userinfo.class,id);session.close();return (Userinfo)object;}}
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());}}