hibernate基于xml详细配置以及简单的一个生成数据库表与保存数据到数据库小程序

(1)在使用之前要下载好hibernatejar包,还有数据库的jar包,比如mysql的或者oracle的jar包。并且build path。

hrbernate.cfg.xml是一个总的配置文件,这个配置文件放在哪里都可以,只要设置好路径,在这里将它放到src路径下,这样就不必进行设置能够直接调用。在里面配置和数据库相关的信息。做一个例子,并且配置相关信息如下:

<?xml version='1.0' encoding='utf-8'?>

<!DOCTYPE hibernate-configuration PUBLIC
        "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
        "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
  <session-factory>
  
  
    <!-- Database connection settings,这里com.mysql.jdbc.Driver是mysql的数据库-->
    <property name="connection.driver_class">com.mysql.jdbc.Driver</property>
    <!-- hibernate_xml表示自己创建的数据库名称 -->
    <property name="connection.url">jdbc:mysql://localhost:3306/hibernate_xml?characterEncoding=utf-8</property>
    <property name="connection.username">root</property>
    <property name="connection.password">root</property>
    
    
    


    <!-- JDBC connection pool (use the built-in) -->
    <property name="connection.pool_size">1</property>
    
    


    <!-- SQL dialect,根据什么数据库进行相关的配置,
       在D:\Java相关程序\hibernate-release-4.3.11.Final\documentation\devguide\en-US\html_single中的index.html中可以找到dialect,找到mysql的,因为这里用mysql 数据库-->
    <property name="dialect">org.hibernate.dialect.MySQL5InnoDBDialect</property>
    
    


    <!-- Enable Hibernate's automatic session context management -->
    <property name="current_session_context_class">thread</property>
    
    <!-- Disable the second-level cache  -->
    <property name="cache.provider_class">org.hibernate.cache.internal.NoCacheProvider</property>
    
    


    <!-- Echo all executed SQL to stdout ,true表示能看到自动生成的sql语句是什么样子的-->
    <property name="show_sql">true</property>
    


    <!-- Drop and re-create the database schema on startup -->

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



     <!-- 为了让Hibernate能够处理User对象的持久化,需要将它的映射信息加到Hibernate中,这种是用于对基于xml的时候的配置 -->
    <mapping resource="com/User.hbm.xml"/>
  </session-factory>
</hibernate-configuration>

然后创建一个持久化类User:

package com;


public class User {


	    private Long id;
	    private String userName;
	    private String pwd;
	    private String sex;
	    private Integer age;
		public Long getId() {
			return id;
		}
		public void setId(Long id) {
			this.id = id;
		}
		public String getUserName() {
			return userName;
		}
		public void setUserName(String userName) {
			this.userName = userName;
		}
		public String getPwd() {
			return pwd;
		}
		public void setPwd(String pwd) {
			this.pwd = pwd;
		}
		public String getSex() {
			return sex;
		}
		public void setSex(String sex) {
			this.sex = sex;
		}
		public Integer getAge() {
			return age;
		}
		public void setAge(Integer age) {
			this.age = age;
		}
	    
	
}

在这之后,还要创建一个User.hbm.xml,用于向Hibernate提供关于将对象持久化到关系数据库中的信息.注意这个文件要放到和User一样的包名下面。代码如下:

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC 
	"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
	"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">


<hibernate-mapping >
	<!-- 一个class对应一个实体类 ,name="com.User"表示实体类的路径,table="t_user"是数据库中对应的实体类的表名称-->
	<class name="com.User"  table="t_user">
		           
		<!-- 在这里id是作为主键的 ,native:跨数据库时使用,由底层方言产生。 使用native时Hibernate默认会去查找Oracle中的hibernate_sequence序列。 
如果Oracle中没有该序列,连Oracle数据库时会报错。如果是uuid,则要使得id为String类型,否则会报错。如果为sequence,则用该加上<param name="sequence">seq_user</param>这样在oracle数据库中机会生成一个seq_user的序列-->
		<id name="id">
			<generator class="native"/>
		</id>


		<!-- 下面是对普通属性的配置,name表示在实体类中的名称,column表示对应的数据库中的名称,如果不写,则默认和实体类中一样 -->
		<property name="userName" column="user_name"></property>
		<property name="pwd" ></property>
		<property name="sex" ></property>

		<property name="age" ></property>



	</class>

</hibernate-mapping>

需要注意的是,为了让Hibernate能够处理User对象的持久化,需要将它的映射信息加到Hibernate中,加上如下的配置
    <mapping resource="com/User.hbm.xml"/>

然后,配置基本上完成,接下来需要创建数据库。在这里我们可以通过创建一个CreateTable文件创建数据库表,而不是在数据库的工具中进行配置:

package test;

import org.hibernate.cfg.Configuration;
import org.hibernate.tool.hbm2ddl.SchemaExport;

public class CreateTable {

	public static void main(String[] args) {
		//读取配置文件hibernate.cfg.xml,hibernate.cfg.xml会读取User.hbm.xml文件
		 Configuration cfg=new Configuration().configure();
		 SchemaExport se=new SchemaExport(cfg);
		 se.create(true, true);

	}

}
结果如下图:


当然,如果我们不仅没有将hibernate.cfg.xml直接放到src下,而且放到了其他包下面,并且改成了hb.cfg.xml,则如下做:


(2)接下来在上面的基础上,我们实现将对象保存到数据的一个简单演示。

可以在test包下面创建一个TestSave文件:

package test;

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.boot.registry.StandardServiceRegistry;
import org.hibernate.boot.registry.StandardServiceRegistryBuilder;
import org.hibernate.cfg.Configuration;

import com.User;

public class TestSave {

	public static void main(String[] args) {
            //读取配置文件hibernate.cfg.xml,hibernate.cfg.xml会读取User.hbm.xml文件
		   Configuration cfg=new Configuration().configure();
		   //创建一个注册类
		   StandardServiceRegistry srb=new StandardServiceRegistryBuilder().applySettings(cfg.getProperties())
				                                                            .build();
		   
		   //创建sessionFactory
		   SessionFactory sessionFactory=cfg.buildSessionFactory(srb);
		   //创建session,因为session封装的方法是用来操作对象的,这里将对象保存到数据库中,所以也是操作数据库的
		   Session session=sessionFactory.openSession();
		   //开启事务
		   session.beginTransaction();
		   //保存数据到数据库中
		   User u=new User();
		   u.setAge(20);
           u.setPwd("342");
           u.setUserName("张飒");
           session.save(u);//将数据保存到数据库,这里hibernate会自动创建sql语句。
           //结束事务
           session.getTransaction().commit();
 //关闭事务
           session.close();

	}

}


hibernate自动创建sql语句如下:


这样,上述操作成功保存到了数据表中。




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值