Hibernate入门

来源:互联网 发布:知乎 红楼梦 情榜 编辑:程序博客网 时间:2024/06/05 09:05

 

*常用的or映射框架:Apache OJBJDOToplinkEJB(CMP)JPAIBatis(其中IBatis是对sql的映射)

 

*Hibernate的好处:不用写sql语句,操作相应的对象就能存储,修改。

 

*Hibernate实现了透明持久化:POJO对象没有继承第三方框架的任何类,没有实现任何接口

 

*批量修改数据(批量修改1000条数据):OR映射框架不适合.

 

*Eclipse切换工作目录方法:File->Switch Workspace

 

*自定义jar库的时候:System library(added to the boot class path)不打勾!!

 

*Hibernate主要是对象关系映射。  

 

*Hibernate创始人:Gavin King 2001年出来的。EJB,也是由他参与的。

 

  • Hibernte_first:

 

1、 创建java项目

2、 创建jar

    配置User Libraries方法:proferenes->java->Build Path->User Liberaries

    加入的jar: HIBERNATE_HOME/hibernate3.jar ;   HIBERNATE_HOME/lib/*.jar

        System library不打勾

3、 创建配置文件,为了便于调试最好加入log4j配置文件

        Hibernate配置文件:hibernate.cfg.xml可以改名,在读取配置文件的时候上写名字。 也支持property

    置,现在一般用xml配置。

 

*Mysql的数据文件存储路径:All User ->Application Date->MySQL->MySQL Server 5.1

 

复制发行包里的cfg.xml

<hibernate-configuration>

    <session-factory >

       <!-- urldriverusernamepassword、方言(适配器) -->

       <property name="hibernate.connection.url">jdbc:mysql://localhost/hibernate_first</property>

       <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>

       <property name="hibernate.connection.username">root</property>

       <property name="hibernate.connection.password">root</property>

       <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>

       <property name="hibernate.show_sql">true</property>

       <mapping resource="com/guojie/hibernate/User.hbm.xml"/>

    </session-factory>

</hibernate-configuration>

 

实体类:POJO

    private String id;

    private String name;

    private String password;

    private Date createTime;

    private Date expireTime;

 

 

映射文件:Hibernate中最复杂的就是映射文件,取名标准:实体类名.hbm.xml,一般和实体类放在一起,是描述实体类pojo

<hibernate-mapping>

    <class name="com.guojie.hibernate.User">

       单一主键用id映射!!!

       <id name="id">

           <!--生成策略是uuid 还是native还是其他-->

           <generator class="uuid"></generator>

       </id>

       <property name="name"/>

       <property name="password"/>

       <property name="createTime"/>

       <property name="expireTime"/>

    </class>  

</hibernate-mapping>

 

Log4j配置:

log4j.appender.stdout=org.apache.log4j.ConsoleAppender

log4j.appender.stdout.Target=System.out

log4j.appender.stdout.layout=org.apache.log4j.PatternLayout

log4j.appender.stdout.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n

log4j.rootLogger=warn, stdout

其他的都可以注释掉!

 

 

工具类:作用将实体类生成表(ddl),将对象模型生成关系模型

//工具类:根据映射文件User.hbm.xml配置,将bean生成表,数据库必须是手动自己建的

public class ExportDB {

 

    /**

     * @param args

     */

    public static void main(String[] args) {

       //Configuration cfg = new Configuration();这样是读取property的配置文件的。如果映射文件改名了,则在configure();中传入文件名

       Configuration cfg = new Configuration().configure();

       //将实体类导成表

       SchemaExport export = new SchemaExport(cfg);

       export.create(true, true);

    }

}

 

客户端:

public static void main(String[] args) {

       //读取hibernate.cfg.xml配置文件,如果配置文件改名,则在configure()里面加上参数名

       Configuration cfg = new Configuration().configure();

       //创建SessionFactory

       SessionFactory factory = cfg.buildSessionFactory();

       //创建Session,Session相当于对Connection做了封装,真正用的时候session会到连接池中拿一个Conntection

       //包:org.hibernate.Session,即引入下面一个

       Session session = null;

       try{

           session = factory.openSession();

          

           //开启事务

           session.beginTransaction();

          

           User user = new User();

           user.setName("guojie");

           user.setPassword("郭杰");

           user.setCreateTime(new Date());

           user.setExpireTime(new Date());

          

           //保存数据,**放到缓存和临时记录各一份

           session.save(user);

           //提交事务

           session.getTransaction().commit();

       }catch(Exception e){

           e.printStackTrace();

           //回滚事务

           session.getTransaction().rollback();

       }finally{

           if(session !=null){

              if(session.isOpen()){

                  //关闭session

                  session.close();

              }

           }

       }

          

    }

 

 

 

 

 

 

*Configuratioin作用:加载配置文件

*常用的持久层框架:Hibernate, Apache OJB,JDO,JPA,IBatis(严格意义上不是OR映射框架,只是SQL映射)

*一个数据库对应一个SessionFactory,一个业务请求对应一个Session

Session不能多线程用它.

*批量修改数据(批量修改1000条数据):OR映射框架不适合.

*Eclipse切换工作目录方法:File->Switch Workspace

*自定义jar库的时候:System library(added to the boot class path)不打勾!!

*Session导包的时候导入:org.Hibernate.Session

* Query是查询实体类的!!不是查询数据表的!!

*采用Hibernate开发步骤:

0Hibernate配置文件

1、建议对象关系(实体类)

2、实体类映射文件

3、将映射文件加入到配置文件

4、编写工具类,将实体类生成表。

5、开发客户端

 

JTA:实现两阶段提交协议,第一阶段把日志记录下来(失败了可以回滚),第二阶段提交事务.EJB默认使用JTA事务. Hibernate可以使用JTA事务和JDBC事务.

SessionFactory:和数据库绑定

Transaction:事务

Query:查询用.支持hqlsql,hql查询实体类

Interceptor:拦截器,没有侵入性;

UserType:用户自定义类,类似Struts中转换器.

适配器:不同数据库换不同适配器

 

写完映射文件一定要加入cfg.xml配置文件.

普通属性用property,主键用id映射

 

原创粉丝点击