hibernate.properties和hibernate.cfg.xml的区别
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了hibernate.properties和hibernate.cfg.xml的区别相关的知识,希望对你有一定的参考价值。
参考技术Ahibernate.properties和hibernate.cfg.xml的区别
<img src=img/china.jpg border=0 usemap="#Map" />
<map name=Map id="Map">
<area shape="poly" coords="567,417,562,420,557,420,552,422,552,431,549,437,545,442,546,452,538,460,538,468,543,473,551,483,556,486,563,492,574,477,581,468,588,455,589,441,597,429,594,425,586,423,577,425,574,423,569,415,fg580,441,580,422" href="img/onepiece.jpg" />
<area shape="poly" coords="619,456,617,459,610,471,606,478,604,487,604,497,610,506,615,511,621,496,626,472,626,461,617,479" href="test3." />
hibernate.cfg.xml和hibernate.properties的区别
1. 如果采用properties文件作为配置文件
那么初始化的代码大致为:
Configuration config = new Configuration();
config.addClass(myclass.class);
2. 如果配置文件为XML,则
Configuration config = new Configuration().config();
XML文件格式的配置文件不支持addClass方法!
这是因为在配置文件XML文件中,已经定义了Mapping文 件,因此就不需要在用编码方式导入POJO文件了。
hibernate.cfg.xml在哪
项目需要构建一个Java环境,使用Hibernate作为数据持久层,一兄弟按照网上的说法配置了hibernate,结果搞了几天都没搞好,总是报错“Could not find datasource”,最后还是我自己动手在自己机器上配个环境才引导他弄好。
要配好Hibernate首先的弄清楚Java在寻找hibernate.cfg.xml这个文件的时候在哪些目录中寻找,Java将在以下目录中寻找hibernate.cfg.xml这个文件:
webappsname/WEB-INF/classes/
TOMCATHOME/
TOMCATHOME/lib
所以我们的hibernate.cfg.xml务必放在webapp的WEB-INF/classes/目录下了,放在其他目录下都不是很合适。
另外就是关于hibernate.cfg.xml中的jdbc配置了,网上的说法各异,其实最简单的就是在hibernate.cfg.xml中直接使用jdbc配置了,如下:
<?xml version=”1.0″ encoding=”utf-8″?>
<!DOCTYPE hibernate-configuration PUBLIC “-Hibernate/Hibernate Configuration DTD 3.0EN” “:hibernate.sourcefe./hibernate-configuration-3.0.dtd”>
<hibernate-configuration>
<session-factory>
<property name=”hibernate.connection.driver_class”>.mysql.jdbc.Driver</property>
<property name=”hibernate.connection.url”>jdbc:mysql:localhost/test</property>
<property name=”hibernate.connection.username”>root</property>
<property name=”hibernate.connection.password” />
<property name=”show_sql”>false</property>
<property name=”dialect”>.hibernate.dialect.MySQLDialect</property>
<mapping resource=”hb/Cat.hbm.xml” />
</session-factory>
</hibernate-configuration>
更改其中的driverclass和connection.url、username、password和dialect,再添加一些mapping就可以了,需要注意的是property节点的name属性中最好在前面加上hibernate。有些文章说使用Tomcat的JNDI,不建议这么做。同时要注意的是在hibernate.cfg.xml不要同时使用datasource和连接字符串两种配置(那个兄弟非要使用两种配置结果来不成功),因为没有必要。
其实从部署的角度来看的话,就应该是这样的,首先在生产环境下,很多时候是没有办法拿到Tomcat的管理权限的是配不了JNDI的,而且要去配JNDI无形增加的部署的难度,在hibernate.cfg.xml中配置连接字符串就很方便部署(Hibernate要是像.中那样支持连接字符串加密就好了)。hibernate.cfg.xml存放的位置也是一样的,放在WEB-INF/classes/目录下,部署的时候只要拷贝webapp整个目录就可以完成部署了。
网上的文章用来做参考最好,很多东西还得靠自己领会,特别是碰到问题的时候,尽心书不如无书嘛(也别太相信我写的,说不定那天不管用了。^_^)。
附:使用Tomcat JNDI 数据源配置方法
<?xml version=”1.0″ encoding=”utf-8″ ?>
<!DOCTYPE hibernate-configuration PUBLIC “-Hibernate/Hibernate Configuration DTD 3.0EN” “:hibernate.sourcefe./hibernate-configuration-3.0.dtd”>
<hibernate-configuration>
<session-factory>
<property name=”hibernate.connection.datasource”>java:p/env/jdbc/odbcq</property>
<property name=”show_sql”>false</property>
<property name=”dialect”>.hibernate.dialect.MySQLDialect</property>
<mapping resource=”hb/Cat.hbm.xml” />
</session-factory>
</hibernate-configuration>
参考博客::blogs./haquanwen/p/3812611.
ireport 中 hibernate.cfg.xml not found, 怎么把hibernate.cfg.xml包括进classpath,只能import jar包
在对应的工程右键新建一个hibernate.cfg.xml 就OK!
hibernate.cfg.xml放在哪
放到那不重要,关键用的时候你得找到(一般都放到根目录下)
sessionFactory = new Configuration().configure("/hibernate.cfg.xml").buildSessionFactory();
hibernate.cfg.xml文件中怎么引入properties文件
在实际开发中一般都是hibernate.properties和hibernate.cfg.xml结合使用。一般在属性文件hibernate.properties中存放数据库连接相关的操作数据,在hibernate.cfg.xml文件中存放映射配置,在Users.hbm.xml(.hbm.xml之前的Users时自定义的,可以一个实体类对应一个.hbm.xml文件,也可以多个实体类对应一个.hbm.xml文件)。
之前是将属性和映射配置都存放在hibernate.cfg.xml,如下:
[java] view plain copy
<span class="page_speeder_714273920"><!DOCTYPE hibernate-configuration PUBLIC
"-Hibernate/Hibernate Configuration DTD 3.0EN"
":hibernate./dtd/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<!-- 配置数据库访问信息 -->
<property name="dialect">
.hibernate.dialect.MySQLDialect
</property>
<property name="connection.driver_class">
.mysql.jdbc.Driver
</property>
<property name="connection.url">
jdbc:mysql:localhost:3306/o
</property>
<property name="connection.username">
root
</property>
<property name="connection.password">
root
</property>
<!-- 在控制台显示sql语句 -->
<property name="show_sql">true</property>
<!-- 自动生成或更新数据库表 -->
<property name="hbm2ddl.auto">update</property>
<!-- 注册映射文件 -->
<mapping resource="/study/po/Users.hbm.xml" />
</session-factory>
</hibernate-configuration></span>
上面这种方式来定义属性和映射配置是可以,但是现在开发是将属性定义和映射配置分开,这样可以使得结果更加清晰,需要修改属性就去hibernate.properties文件修改,需要修改映射配置就在hibernate.cfg.xml中去修改。比如:
1.在hibernate.properties中配置连接数据库需要的属性:
[java] view plain copy
<span class="page_speeder_714273920">hibernate.dialect=.hibernate.dialect.MySQLDialect定义方言(定义优化的sql语句)
hibernate.connection.driver_class=.mysql.jdbc.Driver
hibernate.connection.url=jdbc:mysql:localhost:3306/firstdb?characterEncoding=utf8
hibernate.connection.username=root
hibernate.connection.password=root
hibernate.show_sql=true表示是否输出操作数据库的语句
hibernate.format_sql=true表示是个格式化输出sql语句
hibernate.hbm2ddl.auto=update表示是否根据映射文件自动创建数据库表</span>
注:hibernate.hbm2ddl.auto的值为create表示每次运行都会新建表;值为create-drop是在关闭SessionFactory时删除仙剑表;值为update(常用值)时表示如果第一运行时数据库没有对应表,那么会新建表,但是如果存在对应数据表,就不再创建对应的数据表。2.在hibernate.cfg.xml中进行映射配置(注册映射文件):
[java] view plain copy
<span class="page_speeder_714273920"><!DOCTYPE hibernate-configuration PUBLIC
"-Hibernate/Hibernate Configuration DTD 3.0EN"
":hibernate./dtd/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<!-- 注册映射文件 -->
<mapping resource="/study/po/Users.hbm.xml"/>
</session-factory>
</hibernate-configuration></span>
3.在Users.hbm.xml中配置持久化(实体,pojo)类和数据库表的映射:[java] view plain copy
<span class="page_speeder_714273920"><?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-Hibernate/Hibernate Mapping DTD 3.0EN"
":hibernate./dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping package=".study.po">
<class name=".study.po.Users" table="users">
<!-- 主键 -->
<id name="id" column="id">
<!-- 主键生成方式:自动生成 -->
<generator class="native"/>
</id>
<property name="username" column="usernames" type="java.lang.String" not-null="true"/>
<property name="password" column="passwords" type="java.lang.String" not-null="true"/>
</class>
</hibernate-mapping></span>
上面是Users.hbm.xml中具体数据,配置内容可以依照如下格式:[java] view plain copy
<span class="page_speeder_714273920"><hibernate-mapping 属性=”值”>
<class name="类名" table="表名">
<!-- 主键 -->
<id name="主键属性名" column="表主键列名">
<!-- 主键生成方式 -->
<generator class="生成方式"/>
</id>
<property name="属性" column="列名" type="数据类型" not-null="true"/>
<property name="password" column="passwords" type="java.lang.Integer" not-null="true"/>
</class>
</hibernate-mapping></span>
主键:在Hibernate中持久化类都会有一个标识属性,用于标识实例的唯一,该属性映射到数据库表的主键。 主键生成器:<generator class="生成方式"/>生成方式的值有:
increment:表示获取数据库中表最大主键值,并+1后作为新的主键。
identity:自动增长,主要使用在mysql,db2。
native:(开发中一般选择此方式)自动增长,Hibernate会根据数据库从identity,sequence(序列),hilo(高低算法)中选择一种合适的方式生成主键,在mysql中时使用identity,在Oracle中时选择sequence(序列)。
uuid:使用UUID算法生成字符串类型主键(主要用于分布式部署)。
数据表各字段配置:<property name=属性 column="列名" type=数据类型 not-null="true"/>,实体类的属性与数据库表中列名(字段名)对应,在给定数据类型时最好写上此数据类型对应的包名(写上全名)。
hibernate.cfg.xml到哪复制
不是复制的
在eclipse的项目里 新建--》其他-->找到Hibernate--》Hibernate Configuration File
设置好后会自动生成的
hibernate.cfg.xml是什么东西?有什么用?hibernate.xml呢?与hibernate.xml的区别是什么?
hibernate.cfg.xml中写的是链接数据库的四个信息,在Myeclipse开发工具中是可以自动生成的,名字也可以自己定,它的默认名字就是hibernate.cfg.xml,加上个.cfg就是为了明显看出是个配置文件,名字无所谓,
javaweb怎么添加hibernate.cfg.xml
只要你能找到,放在哪里都可以。sessionFactory = new Configuration().configure("WEB-INF/hibernate.cfg.xml").buildSessionFactory();
hibernate实现有两种配置,xml配置与注释配置。
一、hibernate.cfg.xml
<?xml version=\'1.0\' encoding=\'UTF-8\'?>
<!DOCTYPE hibernate-configuration PUBLIC "-Hibernate/Hibernate Configuration DTD 3.0EN" ":hibernate.sourcefe./hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<!--url信息-->
<property name=connection.url>jdbc:mysql:localhost:3306/webases</property>
<!--数据库方言信息-->
<property name=dialect>.hibernate.dialect.MySQLDialect</property>
<!--用户名-->
<property name=connection.username>root</property>
<!--密码-->
<property name=connection.password>123456</property>
<!--数据库驱动信息-->
<property name=connection.driver_class>.mysql.jdbc.Driver</property>
<!--指定Hibernate映射文件路径-->
<mapping resource="/Hibernate/order.hbm.xml" />
</session-factory>
</hibernate-configuration>
二、注解方式:
首先是需要加入4个jar包:hibernate-mons-annotations.jar 、 hibernate-annotations.jar、ejb3-persistence.jar 、 hibernate-jpa-2.0-api-1.0.1.Final.jar
不同的地方:
(1):hibernate.hbm.xml 文件中把引用:xxx.hbm.xml改为引用实体类:
即把:<mapping resource="/wsw/hibernate/model/Order.hbm.xml"/>
改为:<mapping class=".wsw.hibernate.model.Order" />
(2):获取SessionFactory方式发生了变化:
即:由SessionFactory sf = new Configuration().configure().buildSessionFactory()
改为:SessionFactory sf = new AnnotationConfiguration().configure().buildSessionFactory()
(3):注解方式不需要在xxx.hbm.xml把实体类与表进行映射。而采用在实体类中进行注解。
注意:(1):如果实体类属性名与表字段名不一致的时候,要么都注解在属性前,要么都注解在get方法前。不能部分注解在属性前,部分注解在方法前。
(2):如果实体类属性名与表字段名一致的时候,可以部分注解在属性前,部分注解在方法前。
(3):如果在实体类中某些属性不注解:(属性和get都不写注解),默认为表字段名与实体类属性名一致。
(4):如果实体类的某个成员属性不需要存入数据库中,使用@Transient 进行注解就可以了。即类似于:(xxx.hbm.Xml配置中的某些字段不写(就是不需要对这个成员属性进行映射))
(5):表名称可以在实体类前进行注解。
(6):所有这些注解在:javax.persistence包下。而不是在hibernate包中。
哪里使用hibernate.cfg.xml
你的工程是自动编译的吗?把这个类考到你的程序里然后hibernate.cfg.xml放到src下试试import.hibernate.Session;import.hibernate.SessionFactory;import.hibernate.cfg.Configuration;publilassHibernateUtilsprivatestaticSessionFactorysessionFactory;publicstaticSessionFactorygetSessionFactory()returnsessionFactory;publicHibernateUtils()staticConfigurationcfg=newConfiguration();cfg.configure();sessionFactory=cfg.buildSessionFactory();publicstaticSessiongetSession()returnsessionFactory.openSession();publicstaticvoidmain(String[]args)sessionFactory=HibernateUtils.getSessionFactory();System.out.println(sessionFactory);
以上是关于hibernate.properties和hibernate.cfg.xml的区别的主要内容,如果未能解决你的问题,请参考以下文章
用hibernate.properties代替hibernate.cfg.xml配置常用的属性
如何使用 hibernate.properties 文件而不是 hibernate.cfg.xml