zoukankan      html  css  js  c++  java
  • hibernate笔记(一)


    一、主配置文件hibernate.cfg.xml

    位置:放在src目录下。

    主要包含信息:

    一、数据库信息    数据库方言(类的全名) 及 数据库链接信息

    1.      数据库方言

    2.      数据库连接字符串

    3.      数据库驱动类名

    4.      数据库名

    5.      数据库密码

    二、其他配置

    比如:

    1.	<property name="show_sql">true</property><!-- 是否显示 sql语句-->
    2.	<property name="format_sql">false</property><!--是否格式化显示sql语句-->
    3.	<property name="hbm2ddl.auto">update</property><!--创建表的方式-->
      	<!--
    			create:在创建前,先删除表
    			create-drop:启动时创建 程序结束时 删除表在测试不保留数据时 使用
    			update:一般在项目中使用
    			validate:带有验证功能
    		 -->
    

     

    三、导入映像配置文件

    <mappingresource="com/xiaohui/hibernate/User.hbm.xml"/>
    
    也可以不用配,在配置文件对象 Configuration 加载主配置文件后通过addClass(Obj.class)方法自动的加载同一目录下的类名.hbm.xml映像配置文件。
    

    示例代码

    <session-factory>
    		<!-- 一、数据库信息    数据库方言(类的全名) 及 数据库链接信息 -->
    		<property name="dialect">org.hibernate.dialect.MySQL5Dialect</property>
    		<property name="connection.url">jdbc:mysql:///hibernate</property>
    		<property name="connection.driver_class">com.mysql.jdbc.Driver</property>
    		<property name="connection.username">root</property>
    		<property name="connection.password">root</property>
    		<!-- 二、 其他 配置 -->
    		<property name="show_sql">true</property><!-- 是否显示 sql语句-->
    		<property name="format_sql">false</property>
    		<!--
    			create:在创建前,先删除表
    			create-drop:启动时创建 程序结束时 删除表在测试不保留数据时 使用
    			update:一般在项目中使用
    			validate:带有验证功能
    		 -->
    		<property name="hbm2ddl.auto">update</property>
    		<!--三、 导入配置文件 
    		<mapping resource="com/xiaohui/hibernate/User.hbm.xml"/>
    		-->
    	</session-factory>

    二、映像配置文件 类名.hbm.xml

    位置:和对用的类在同一目录下。

    信息包含  需要映射的类的全名,以及映射到数据库的表名。类的属性名,表的字段名(不设置默认和类的属性名 一致。当属性名为数据库的关键字时,需要用 ` 反单引号括起来)字段名 包含普通字段(如:int,Integer,String,Date,boolean,byte[]),以及自定义对象。

    如:

     

    <hibernate-mapping package="org.hibernate.test.extendshbm">
    	<class name="com.xiaohi.c_hbm_property.Person" table="person">
    		<id name="id" type="int" column="id">
    			<generator class="increment"/>
    		</id>
    		<!-- 			类属性名		类型小写			对应的表列名 -->
    		<property name="name" type="string" not-null="true" length="30"/>
    		<property name="birthday" not-null="true" type="date" />
    		<property name="gender" not-null="true" type="boolean"/>
    		<property name="desc" not-null="true" type="text" column="`desc`"  length="5000"/>
    		<property name="photo" not-null="true" type="binary" length="51200"/>
    	</class>
    </hibernate-mapping>

    一般主键的配置:

    <id name="id">
    			<!-- identity,使用数据库的自动增长,在保存时会忽略手工指定的主键值而由数据库生成 
    				要求此属性要是数字类型
                <generator class="identity"/>
    			-->
                <!-- assigned,手工指定,比如指定UUID 
                <generator class="assigned"/>
                -->
                <!-- uuid,由Hibernate生成UUID并指定为主键值,要求此属性要是String型 
                <generator class="uuid"/>
                -->
                <!-- hilo,高低位算法生成主键,需要用到一个额外的表,所有的数据库都可以使用这种类型 
                <generator class="hilo">
                    <param name="table">hi_value</param>
                    <param name="column">next_value</param>
                    <param name="max_lo">100</param>
           		</generator>
                -->
                <!-- native,根据底层数据库的能力选择 identity、sequence 或者 hilo 中的一个 -->
                <generator class="native"/>
    		</id>
    

    组合主键的配置:

    <!-- 映射联合主键的配置 -->
    		<composite-id>
    			<key-property name="firstName" type="string" />
    			<key-property name="lastName" type="string" />
    		</composite-id>


    当使用组合主键时,javaBean对象需要实现java.io.Serializable接口。并且在获取对象时,使用session.get(obj.class,obj)方法中obj需要设置联合主键的每一个值(单列主键的 一般直接传id值)

    public void getTest(){
    		Session session = sessionFactory.openSession();
    		session.beginTransaction();
    		Person p = new Person();
    		p.setFirstName("古");
    		p.setLastName("天乐");
    		Person user = (Person) session.get(Person.class, p);
    		System.out.println(user.getFirstName()+":"+user.getLastName()+":"+user.getGender());
    		session.getTransaction().commit();
    		session.close();
    	}


    组成关系的映射配置:

    <class name="com.xiaohui.hibernate.User" table="user">
    		<id name="id">
    			<generator class="native"/>
    		</id>
    		<property name="name" type="string"/>
    		<!-- 组成关系映射 -->
    		<component name="address" class="com.xiaohui.e_component.Address">
    			<property name="address"/>
    			<property name="tel"/>
    			<property name="zipCode"/>
    		
    		</component>
    	</class>
    

    生成的表为5个字段 。


     

     

     

     

     

     

     

     

  • 相关阅读:
    开发小技巧: 如何在jQuery中禁用或者启用滚动事件.scroll java程序员
    Spell Checker 新版Chrome的纠错特性 java程序员
    45个漂亮且有创意的HTML5网站展示 java程序员
    70个jquery触摸事件插件——支持手势触摸! java程序员
    40个超酷的jQuery动画教程 java程序员
    极客技术专题【002期】:开发小技巧 如何使用jQuery来处理图片坏链? java程序员
    30个热门的CSS3 Image Hover 脚本 java程序员
    2013年三月GBin1月刊 java程序员
    插入1000万数据的几种优质算法
    批量上传图片(带百分比进度显示)项目源码
  • 原文地址:https://www.cnblogs.com/keanuyaoo/p/3318107.html
Copyright © 2011-2022 走看看