Hibernate总结—hibernate配置文件

    Hibernate作为ORM框架的一个强大实现,配置文件是必不可少的。.NET中对ORM框架的实现,用的是EntityFramework,Java这边则是Hibernate。在说Hibernate配置文件之前,先说说EF的配置文件,这样有个共鸣。


    EF的配置文件主要有这么三部分:


1、连接数据库


    连接数据库需要数据库驱动,数据库服务,用户名和密码。


2、映射数据库


    EF和数据库的交互有三种模式,ModelFirst、CodeFirst和DBFirst,可以先建成数据库,然后用EF来和数据库建立关系;同样也可以先生成Model,然后用Model映射建立数据库。


3、实体对象映射


    ORM,实体关系映射,通过名字就可以看出来,它是把数据库以实体对象的形式展现,采用面向对象的方式。数据库表之间的关系,也就自然映射成了实体对象之间的关系。在这个过程中,实体对象类是必不可少的,同样实体关系也是必不可少的。


    那么在Hibernate做实体关系映射时,同样需要这三部分。


1、连接数据库

<!--数据库驱动-->
<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
<!--数据库服务,也就是连接数据库所需要的地址-->
<property name="hibernate.connection.url">jdbc:mysql://localhost:3306/hibernate_one2one_pk_1</property>
<!--数据库的用户名-->
<property name="hibernate.connection.username">root</property>
<!--数据库的密码-->
<property name="hibernate.connection.password">123456</property>
<!--数据库方言-->
<property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>


    Hibernate连接数据库同样也是这几部分,数据库驱动、数据库服务、用户名和密码。不同的数据库有不同的驱动,连接地址的书写方式也不太一样,在hibernate.properties文件中,各种数据库的连接方式都有,需要的话可以去查询。


    最后一个数据库方言,其实也很好理解。不同的数据库SQL语句的写法或执行方式有些不一样,比如mysql的分页查询需要关键字limit,Oracle的分页查询则需要rownum,所以Hibernate为了支持不同数据库生成SQL语句,就给不同的数据库设置了方言,以作区分。


2、映射数据库


    如果说先建好库,然后写Hibernate,那么这一步就可以省略掉了。如果是用Hibernate生成数据库表,那这一步就要好好做。


    在hibernate.cfg.xml中有这么一个属性:


<property name="hibernate.hbm2ddl.auto">update</property>


    这个属性的意思就是,设置hbm文件到ddl文件为update,也就是通过hbm文件生成ddl文件,然后创建数据库表。首先要创建一个库,然后连接这个库,接着创建实体类,并在实体类目录下添加实体映射文件,也就是hbm文件,在hbm文件中设置好表名列名等内容之后,就可以通过它来创建数据库表,这也就是所谓的映射文件。


3、实体对象映射


    这一步就是要映射实体对象了,将每一张表映射为一个实体。首先需要建立一个实体类,然后给该实体类写配置文件。


public class User {

	private String id;
	
	private String name;
	
	private String password;

	public String getId() {
		return id;
	}

	public void setId(String id) {
		this.id = id;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public String getPassword() {
		return password;
	}

	public void setPassword(String password) {
		this.password = password;
	}
}
<hibernate-mapping>
	<class name="com.tgb.User" table="t_user">
		<id name="id">
			<generator class="uuid"/>
		</id>
		<property name="name"/>
		<property name="password"/>
		<property name="createTime"/>
		<property name="expireTime"/>
	</class>
</hibernate-mapping>


    上面的是User这个实体的实体类,描述该实体的每一个属性,并给出getter和setter方法。下面对应的是该实体类的hbm映射文件,Hibernate就是通过这个映射文件将实体对象和数据库表联系在一起的。实体类就不说了,看配置文件,首先是class标签,表明这是哪个类,class标签的name属性也就是实体类的全路径,如果生成数据库表时,不添加table属性,就直接以User为表名,如果给出了table属性值,则按照table属性的值来命名表。下面就是该实体类中的属性,id标签标示这个属性对应主键字段,generator是它的生成策略,uuid是生成uuid的策略,另外还有assigned是手动分配,存入数据时需要给值;native是自动生成,是在数据库中自己递增。其他的是普通属性,用property来形容,在property中还可以设置该属性对应字段的数据类型,限定输入的长度,可不可以为空等。


    把实体类和映射文件创建好之后,把映射文件添加到hibernate.cfg.xml文件中就好了。


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


         到这里为止,Hibernate的基本配置文件就算完成了。至于数据库表之间的关系是如何映射为实体关系的,这个就以后再说,下面就总结一下Hibernate的配置文件。


    Hibernate的配置文件有两种,一是hibernate.cfg.xml,而是hbm.xml文件。


    hibernate.cfg.xml文件是Hibernate一个总的配置文件,Hibernate工作就是从这个配置文件入手的。首先它应该配置它相应的DTD文件,然后是一个标签标识配置文件的开始,接着就是配置文件里面的详细内容,包括数据库的配置、Hibernate特殊用途的配置、映射文件的配置等。


<!--标准的XML文件的起始行,version='1.0'表明XML的版本,encoding='gb2312'表明XML文件的编码方式-->   
<?xml version='1.0' encoding='gb2312'?>   
<!--表明解析本XML文件的DTD文档位置,DTD是Document Type Definition 的缩写,即文档类型的定义,XML解析器使用DTD文档来检查XML文件的合法性。hibernate.sourceforge.net/hibernate-configuration-3.0dtd可以在Hibernate3.1.3软件包中的src\org\hibernate目录中找到此文件-->   
<!DOCTYPE hibernate-configuration PUBLIC   
         "-//Hibernate/Hibernate Configuration DTD 3.0//EN"   
         "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">   
<!--声明Hibernate配置文件的开始-->        
<hibernate-configuration>   
   <!--表明以下的配置是针对session-factory配置的,SessionFactory是Hibernate中的一个类,这个类主要负责保存HIbernate的配置信息,以及对Session的操作-->   
    <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://localhost/hibernate </hibernate>   
          <!--连接数据库是用户名-->   
       <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>   

    

    hbm配置文件就是映射实体的,它里面的标签可以映射表之间的关系,具体的什么关系对应什么标签,下一篇博客接着说,这里就不再说了。


    hibernate.cfg.xml配置文件作为Hibernate工作的入口,它做的工作都是公共性的。hbm配置文件是具体到数据库表的,每一个hbm.xml文件对应一个数据库表,同时也对应一个实体类,实体类和数据库表的映射就是依靠它来的。hbm.xml文件需要配置到hibernate.cfg.xml文件中,通过mapping标签形容,这样Hibernate在查找的时候,就可以根据类的全路径找到相应的实体。

你可能感兴趣的:(Hibernate)