Hibernate -- 入门示例

1. 步骤

如何开发一个hibernate程序
  * 建立java工程
  * 引入相关的jar包
	   * hibernate的相关jar包
	           hibernate-distribution-3.5.6-Final\lib\required\*.jar
	           hibernate-distribution-3.5.6-Final\hibernate3.jar
	          
	           hibernate-annotations-3.4.0.GA\lib\test\slf4j-log4j12.jar
	           hibernate-annotations-3.4.0.GA\lib\test\log4j.jar
	
	   * junit测试的jar包
	             junit-4.8.2.jar
	
	   * mysql的驱动jar包
	             mysql-connector-java-5.1.10-bin.jar
	             
  * 创建表
            CREATE TABLE customers
			(
			  id          INT PRIMARY KEY,
			  NAME        VARCHAR(12),
			  age           INT,
			  des           TEXT
			)
			
   * 创建表对应的javaBean
	     public class Customer {
				private Integer id;
				private String name;
				private Integer age;
				private String des				             
	     }
	     
   * 创建表和javaBean的映射文件Customer.hbm.xml 该文件和javaBean放置在同一个目录下
        * 该映射文件的规范在hibernate3.jar包下org.hibernate下hibernate-mapping-3.0.dtd
        * 配置如下
          <?xml version="1.0" encoding="UTF-8"?>
			<!DOCTYPE hibernate-mapping PUBLIC 
			    "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
			    "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
			 <hibernate-mapping>
			   <!-- class标签建立javaBean和表之间的映射-->
			   <class name="cn.itcast.primer.Customer" table="customers">
			      <!-- 用id来映射表中的主键 -->
			      <id name="id" type="integer">
			        <column name="id"/>
			        <!-- 配置主键的生成策略-->
			        <generator class="increment"/>
			      </id>
			   
			      <!-- property建立javaBean中的属性和表中列的对应关系
			           type="string":string表示的是hibernate的类型,该类型是java类型和sql类型之间的桥梁
			           java中的类型:String name;  sql中的类型:varchar(255):
			           type="string":  string(唯一)对应的是hibernate中的一个类org.hibernate.type.StringType
			                                映射一个sql的varchar类型到java的String类型
			       -->
			      <property name="name" type="string">
			          <!--column定义表中的列 sql-type表示表中列的类型  -->
			          <column name="name"/>
			      </property>
			      
			       <property name="age" type="integer">
			          <column name="age"/>
			      </property>
			      
			      <property name="des" type="string">
			          <column name="des"/>
			      </property>
			           
			   </class>
			 </hibernate-mapping>
   
  * 创建hibernate的配置文件hibernate.cfg.xml,放置在src下	
	   * 该映射文件的规范在hibernate3.jar包下org.hibernate下hibernate-configuration-3.0.dtd
	   * 配置如下
			<?xml version="1.0" encoding="UTF-8"?>
			<!DOCTYPE hibernate-configuration PUBLIC
				"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
				"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
			<hibernate-configuration>
			   <session-factory>
			      <property name="hibernate.connection.username">root</property>
			      <property name="hibernate.connection.password">root</property>
			      <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
			      <property name="hibernate.connection.url">jdbc:mysql://localhost:3306/test</property>
			      
			      <!-- 配置数据库的方言,让hibernate知道连接的是哪个数据库-->
			      <property name="hibernate.dialect">org.hibernate.dialect.MySQL5Dialect</property>
			   
			      <!-- 显示hibernate生成的sql语句 -->
			      <property name="hibernate.show_sql">true</property>
			   
			   </session-factory>
			</hibernate-configuration>
 
 * 定义App类测试			
			public static void main(String[] args) {
				    //加载hibernate的配置文件hibernate.cfg.xml文件
					   Configuration config=new Configuration();
					 
					   //默认加载类路径下的/hibernate.cfg.xml文件
				       config.configure();
					
				     //加载映射文件
				       //方法一
				       //config.addResource("cn/itcast/primer/Customer.hbm.xml");
					   
				       //方法二(使用该方法加载映射文件,要求1:映射文件和Customer.java文件必须在同一个目录下
				                                     //2  映射文件和Customer.java文件文件的名称相同)
				         config.addClass(Customer.class);
						 
						 /*
						  * 利用上面的配置生成SessionFactory
						  * * sessionFactory保存连接数据库的配置信息和映射文件的信息.
						  */	        
					      SessionFactory sf=config.buildSessionFactory();
					
					
					//从SessionFactory获取session
					   Session session=sf.openSession();
					//开始事务
					   Transaction tx=session.beginTransaction();
			        //创建Customer对象
					   Customer c=new Customer();
					   c.setName("zhang");
					   c.setAge(34);
					   c.setDes("xxx");
					   
					//保存对象
					   session.save(c);
					
					//提交事务
					  tx.commit();
					
					//关闭session
					  session.close();
				}
			     
	     


 2. 示例代码

       

Customer.java , java bean 文件

package cn.itcast.primer;

/**
 * 表对应的javaBean,该javaBean的数据最终要存入到数据库中
 */

public class Customer {
	/*
	 * CREATE TABLE customers
		(
		  id          INT PRIMARY KEY,
		  NAME        VARCHAR(12),
		  age           INT,
		  des           TEXT
		)
	 */
	private Integer id;
	private String name;
	private Integer age;
	private String des;
	
	public Integer getId() {
		return id;
	}
	public void setId(Integer id) {
		this.id = id;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public Integer getAge() {
		return age;
	}
	public void setAge(Integer age) {
		this.age = age;
	}
	public String getDes() {
		return des;
	}
	public void setDes(String des) {
		this.des = des;
	}	
}

Customer.hbm.xml 对象与数据表映射配置文件

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC 
    "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
    "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
 <hibernate-mapping>
   <!-- class标签建立javaBean和表之间的映射-->
   <class name="cn.itcast.primer.Customer" table="customers">
      <!-- 用id来映射表中的主键 -->
      <id name="id" type="integer">
        <column name="id"/>
        <!-- 配置主键的生成策略-->
        <generator class="increment"/>
      </id>
   
      <!-- property建立javaBean中的属性和表中列的对应关系
           type="string":string表示的是hibernate的类型,该类型是java类型和sql类型之间的桥梁
           java中的类型:String name;  sql中的类型:varchar(255):
           type="string":  string(唯一)对应的是hibernate中的一个类org.hibernate.type.StringType
                                映射一个sql的varchar类型到java的String类型
       -->
      <property name="name" type="string">
          <!--column定义表中的列 sql-type表示表中列的类型  -->
          <column name="name"/>
      </property>
      
       <property name="age" type="integer">
          <column name="age"/>
      </property>
      
      <property name="des" type="string">
          <column name="des"/>
      </property>
   
           
   </class>
 </hibernate-mapping>    

hibernate.cfg.xml, hibernate配置文件

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC
	"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
	"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
   <session-factory>
      <property name="hibernate.connection.username">root</property>
      <property name="hibernate.connection.password">root</property>
      <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
      <property name="hibernate.connection.url">jdbc:mysql://localhost:3306/test</property>
      
      <!-- 配置数据库的方言,让hibernate知道连接的是哪个数据库-->
      <property name="hibernate.dialect">org.hibernate.dialect.MySQL5Dialect</property>
   
      <!-- 配置利用javaBean和映射文件生成数据库中的表
           hibernate.hbm2ddl.auto值
              * create:执行时,先查找该表是否存在,如存在先删除表,在创建表
              * none:不能创建表,只能往表中插入数据,如表不存在抛出异常,默认值
              * update:执行时,
                          情况一:
                                先查找该表是否存在,如果表存在,直接插入,如果表不存在,先创建表,再插入数据.
                          情况二:
                                先查找该表是否存在,如果表存在,但表的结构不一样,要修改表的结构
       -->
      <property name="hibernate.hbm2ddl.auto">update</property>
      
      <!-- 显示hibernate生成的sql语句 -->
      <property name="hibernate.show_sql">true</property>
   
      <!-- 显示格式化得sql语句 -->
      <property name="hibernate.format_sql">true</property>
      
   </session-factory>
</hibernate-configuration>		

App.java 操作数据库的java程序

package cn.itcast.primer;

import java.util.List;

import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;
import org.junit.Test;

public class App {

	private static  SessionFactory sf=null;
	static{
		   Configuration config=new Configuration();
	       config.configure();
	       config.addClass(Customer.class);
	       sf=config.buildSessionFactory();
	}
	
	/**
	 * 在hibernate的操作中,crud都要开启事务
	 */
	@Test
	public  void saveCustomer(){
		   Session session=sf.openSession();
		   
		   //开启事务
		   Transaction tx=session.beginTransaction();
		   
		   Customer c=new Customer();
		   c.setName("zhang");
		   c.setAge(34);
		   c.setDes("xxx");
		   
		   session.save(c);
		   
		   //提交事务
		   tx.commit();
		   session.close();
	}
	
	/**
	 * 更新
	 */
	@Test
	public  void updateCustomer(){
		   Session session=sf.openSession();
		   
		   //开启事务
		   Transaction tx=session.beginTransaction();
		   
		   Customer c=new Customer();
		   c.setId(1);
		   c.setName("zhuge");
		   c.setAge(32);
		   c.setDes("情报");
		   
		   session.update(c);
		   
		   //提交事务
		   tx.commit();
		   session.close();
	}
	
	/**
	 * 删除
	 */
	@Test
	public  void deleteCustomer(){
		   Session session=sf.openSession();
		   
		   //开启事务
		   Transaction tx=session.beginTransaction();
		   
		   Customer c=new Customer();
		   c.setId(1);
		   
		   session.delete(c);
		   
		   //提交事务
		   tx.commit();
		   session.close();
	}
	
	
	/**
	 * 查询
	 */
	@Test
	public  void findCustomerById(){
		   Session session=sf.openSession();
		   
		   //开启事务
		   Transaction tx=session.beginTransaction();
		   Customer c=(Customer)session.load(Customer.class, 2);
		   
		   System.out.println(c.getId()+"  "+c.getName());
		   //提交事务
		   tx.commit();
		   session.close();
	}
	
	
	/**
	 * 查询所有的客户信息
	 */
	@Test
	public  void findCustomers(){
		   Session session=sf.openSession();
		   
		   //开启事务
 		   Transaction tx=session.beginTransaction();
            
 		   /*
 		    * Query接口是hibernate的查询接口
 		    *  sql语句:是面向表的  select * from customers
 		    *  hql语句:面向对象的  select o from Customer o;
 		    */
 		   Query query=session.createQuery("from Customer");
		   List<Customer> list=query.list();
		   if(list!=null&&list.size()>0){
		       for(Customer c:list){
			      System.out.println(c.getId()+"  "+c.getName());
		       }
		   }
		   //提交事务
		   tx.commit();
		   session.close();
	}
}





 


     

posted @ 2014-02-18 14:48  今晚打酱油_  阅读(147)  评论(0编辑  收藏  举报