hibernate 总结(1)

hibernate原理与应用
主要内容:
 引入:
  模型不匹配:
  java是面向对象语言,对象模型,其主要概念有:继承 关联  多态等,数据库时关系模型,
  其主要概念有: 表 主键  外键等
  解决办法:
  1、使用jdbc进行转换
  2、ORM (对象关系映射)框架来解决,主流的ORm有Hibernate  Toplink  OJB
Hibernate的安装配置
 1、首先要导入Hibernate 相关jar包
  Hibernate3.2 核心包作用
包 作用 说明
jta.jar 标准的JTA API 必要
commons-logging.jar 日志功能 必要
commons-collections.jar 集合类 必要
antlr.jar ANother Tool for Language Recognition(antlr) 必要
dom4j.jar XML配置和映射解释器 必要 
Hibernate3.jar 核心库 必要
asm.jar ASM字节码库 如果使用“cglib”则必要
asm-attrs.jar ASM字节码库 如果使用“cglib”则必要
ehcache.jar EHCache缓存 如果没有其它的缓存,则它是必要的
cglib.jar CGLIB 字节码解释器 如果使用“cglib”则必要 2、安装配置
  配置文件hibernate.cfg.xml和hibernate.properties,XML和properties两种,
  这两个文件的作用一样,提供一个即可,推荐XML格式,下载目录/etc下是示例配置文件。
  
    开发流程
   1由Domain object -> mapping->db。(官方推荐)
   2由DB开始,用工具生成mapping和Domain object。(使用较多)
   3由映射文件开始
  hibernate.cfg.xml配置文件:
 
  <?xml version="1.0"?>
  <!DOCTYPE hibernate-configuration PUBLIC
   "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
   "
http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">

  <hibernate-configuration>
   <session-factory>
    <!--配置数据库的驱动程序,Hibernate在连接数据库时,需要用到数据库的驱动程序-->
    <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
    <!--设置数据库的连接
url:jdbc:mysql://localhost/hibernate,其中localhost表示mysql服务器名称,此处为本机,    hibernate是数据库名--> 
    <property name="hibernate.connection.url">jdbc:mysql:///test</property>
    <!--连接数据库是用户名-->
    <property name="hibernate.connection.username">root</property>
    <!--连接数据库是密码-->
    <property name="hibernate.connection.password">123456</property>
    <!--数据库连接池的大小-->
    <property name="hibernate.connection.pool.size">20 </property>       
    <!--是否在后台显示Hibernate用到的SQL语句,开发时设置为true,便于差错,程序运行时可以在Eclipse的控制台显示Hibernate的执行Sql语句。项目部署后可以设置为false,提高运行效率-->
    <property name="hibernate.show_sql">true </property>
    <!--jdbc.fetch_size是指Hibernate每次从数据库中取出并放到JDBC的Statement中的记录条数。Fetch Size设的越大,读数据库的次数越少,速度越快,Fetch Size越小,读数据库的次数越多,速度越慢-->
    <property name="jdbc.fetch_size">50 </property>
    <!--jdbc.batch_size是指Hibernate批量插入,删除和更新时每次操作的记录数。Batch Size越大,批量操作的向数据库发送Sql的次数越少,速度就越快,同样耗用内存就越大-->
    <property name="jdbc.batch_size">23 </property>
    <!--jdbc.use_scrollable_resultset是否允许Hibernate用JDBC的可滚动的结果集。对分页的结果集。对分页时的设置非常有帮助-->
    <property name="jdbc.use_scrollable_resultset">false </property>
    <!--connection.useUnicode连接数据库时是否使用Unicode编码-->
    <property name="Connection.useUnicode">true </property>
    <!--connection.characterEncoding连接数据库时数据的传输字符集编码方式,最好设置为gbk,用gb2312有的字符不全-->
    <property name="connection.characterEncoding">gbk </property>     
       
    <!--hibernate.dialect 只是Hibernate使用的数据库方言,就是要用Hibernate连接那种类型的数据库服务器。-->
    <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect </property>
    <!--指定映射文件为“hibernate/ch1/UserInfo.hbm.xml”-->       
    <mapping resource="org/mxg/UserInfo.hbm.xml">
   </session-factory>
  </hibernate-configuration>
  

  UserInfo.hbm.xml配置文件
   <?xml version="1.0"?>
   <hibernate-mapping package=“cn.itcast.domain">
   <class name="User" table="user">
    <id name="id">
     <generator class="native"/>
    </id>
    <property name="name"/>
    <property name="birthday”/>
   </class>
   </hibernate-mapping>
  
  解释:
  HIbernate主键详解------Native        
   Native主键生成方式会根据不同的底层数据库自动选择Identity、Sequence、Hilo主键生成方式        
   特点:根据不同的底层数据库采用不同的主键生成方式。由于Hibernate会根据底层数据库采用不同的映射方式,
    因此便于程序移植,项目中如果用到多个数据库时,可以使用这种方式

<font size="" color="">
基本概念和CURD(增删改查)
 
 1.初始化代码(只做一次)
   Configuration cfg = new Configuration();
   cfg.configure(“config.cfg.xml”);
   也可以通过cfg.setProperty设置属性。
   SessionFactory sessionFactory = cfg.buildSessionFactory(); 
 2.模板代码
  Session session = null;Transaction 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(把对象变成持久对象,但不会同步对象的状态)
HQL和Criteria
 HQL(Hibernate Query Language)
  面向对象的查询语言,与SQL不同,HQL中的对象名是区分大小写的(除了JAVA类和属性其他部分不区分大小写);HQL中查的是对象而不是和表,并且支持多态;HQL主要通过Query来操作,Query的创建方式:
  Query q = session.createQuery(hql);
  from Person
  from User user where user.name=:name
  from User user where user.name=:name and user.birthday < :birthday
 Criteria
  Criteria是一种比HQL更面向对象的查询方式;Criteria的创建方式:
  Criteria crit = session.createCriteria(DomainClass.class);
  简单属性条件如:criteria.add(Restrictions.eq(propertyName, value)),
  criteria.add(Restrictions.eqProperty(propertyName,otherPropertyName))

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值