zoukankan      html  css  js  c++  java
  • 初识hibernate——环境搭建

    一  配置过程

    1. 创建一个项目


    2. 导包
        required里的包

        optional里的c3p0连接池的三个包

        数据库驱动包

        Junit

        
    3.创建Hibernate的配置文件(hibernate.cfg.xml)

    4.创建持久化的实体类对象User
                

    5.创建对象与关系型数据库之间的映射(user.hbm.xml或使用注解)

    6.通过Hibernate访问数据库

    二  示例

    配置文件实现:

    1.创建项目hibernate-01

    2.导入需要的包

    3.创建Hibernate的配置文件(hibernate.cfg.xml)

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE hibernate-configuration PUBLIC
        "-//Hibernate/Hibernate Configuration DTD//EN"
        "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
    <hibernate-configuration>
       <session-factory>
            <!-- 数据库连接 -->
            <property name="connection.driver_class">com.mysql.jdbc.Driver</property>
            <property name="connection.url">jdbc:mysql://localhost:3306/work</property>
            <property name="connection.username">root</property>
            <property name="connection.password">root</property>
            
            <property name="current_session_context_class">thread</property>
    
            <!-- 连接池Jdbc connection pool C3P0-->
            <property name="connection.pool_size">1</property>
            <!-- 方言dialect -->
            <property name="dialect">org.hibernate.dialect.MySQLDialect</property>
            
            <!-- 是否显示sql语句Echo all executed SQL to stdout -->
            <property name="show_sql">true</property>        
    		<property name="format_sql">true</property>
    		
    		<!-- 同步程序与数据库中的表 -->
    		<property name="hbm2ddl.auto">update</property>	
     
    		<!-- 映射文件配置,配置文件名必须包含其相对于根的全路径 -->
    		<mapping resource="com/jn/pojo/user.hbm.xml"/>
        </session-factory>
    </hibernate-configuration>
    

    4.创建持久化的实体类对象User

    package com.jn.pojo;
    
    public class User {
    	
    	private int id;
    	private String name;
    	private int age;
    		
    	public int getId() {
    		return id;
    	}
    
    	public void setId(int id) {
    		this.id = id;
    	}
    
    	public String getName() {
    		return name;
    	}
    
    	public void setName(String name) {
    		this.name = name;
    	}
    
    	public int getAge() {
    		return age;
    	}
    
    	public void setAge(int age) {
    		this.age = age;
    	}
    
    	@Override
    	public String toString() {
    		return "User [id=" + id + ", name=" + name + ", age=" + age + "]";
    	}
    }
    

    5.创建对象与关系型数据库之间的映射(user.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>
    	<!-- 配置User类与数据库表user之间的映射关系 -->
    	<class name="com.jn.pojo.User" table="user">
    		<!-- 主键的配置需要使用id标签
    			在配置主键时: 实体类中属性名, 实体类中属性的类型
    					指定主键的创建规则
    		 -->
    		<id name="id" type="int">
    			<column name="id"></column>
    			<generator class="native"></generator>
    		</id>
    		<!-- 配置普通属性 -->
    		<property name="name" type="java.lang.String">
    			<column name="name" ></column>
    		</property>
    		
    		<property name="age" type="int">
    			<column name="age" ></column>
    		</property>
    		
    	</class>
    </hibernate-mapping>
    

    6.通过Hibernate访问数据库:测试类MainTest.java

    package com.jn.test;
    
    import org.hibernate.Session;
    import org.hibernate.SessionFactory;
    import org.hibernate.boot.registry.StandardServiceRegistryBuilder;
    import org.hibernate.cfg.Configuration;
    import org.hibernate.service.ServiceRegistry;
    import org.junit.Test;
    
    import com.jn.pojo.User;
    
    public class MainTest {
    
    	@Test
    	public void test(){
    		
    		//1. 加载配置文件, 创建配置对象
    		/**
    		 * 默认情况下, 如果configure方法调用的是无参的, 则会加载SRC文件夹下的名字为hibernate.cfg.xml的配置文件
    		 * 如果配置文件名不是hibernate.cfg.xml, 那么可以在configure方法中指定配置文件
    		 */
    		Configuration configuration = new Configuration().configure("hibernate.cfg.xml");
    		
    		//2. 创建SessionFactory
    		ServiceRegistry sr = new StandardServiceRegistryBuilder().applySettings(configuration.getProperties()).build();
    		
    		SessionFactory sessionFactory = configuration.buildSessionFactory(sr);
    		
    		//3. 获取Session对象
    		/**
    		 * sessionFactory.getCurrentSession(), 获取当前线程的Session对象
    		 */
    		Session session = sessionFactory.openSession();
    		
    		//4. 操作数据库
    		// 开启事务
    		session.beginTransaction();
    		
    		// 创建实体类对象
    		User user = new User();
    		
    		user.setName("tom");
    		user.setAge(23);
    		
    		// 将实体类对象保存到数据库中
    		/**
    		 * save方法会将实体类对象, 保存到数据库的中表中.
    		 * 在这个过程中, 代码中不需要写SQL语句, 它的insert语句是由Hibernate根据ORM的关系映射自动创建了
    		 */
    		session.save(user);
    		
    		// 提交事务
    		session.getTransaction().commit();
    		
    		//5. 关闭对象
    		session.close();
    		
    		sessionFactory.close();
    		
    	}
    }
    

      

    7.项目结构:

    注解实现: 

    1.创建项目hibernate-02

    2.导入需要的包

    3.创建Hibernate的配置文件(hibernate.cfg.xml)

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE hibernate-configuration PUBLIC
        "-//Hibernate/Hibernate Configuration DTD//EN"
        "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
    <hibernate-configuration>
       <session-factory>
            <!-- 数据库连接 -->
            <property name="connection.driver_class">com.mysql.jdbc.Driver</property>
            <property name="connection.url">jdbc:mysql://localhost:3306/work</property>
            <property name="connection.username">root</property>
            <property name="connection.password">root</property>
            
            <property name="current_session_context_class">thread</property>
    
            <!-- 连接池Jdbc connection pool C3P0-->
            <property name="connection.pool_size">1</property>
            <!-- 方言dialect -->
            <property name="dialect">org.hibernate.dialect.MySQLDialect</property>
            
            <!-- 是否显示sql语句Echo all executed SQL to stdout -->
            <property name="show_sql">true</property>        
    		<property name="format_sql">true</property>
    		
    		<!-- 同步程序与数据库中的表 -->
    		<property name="hbm2ddl.auto">update</property>	
     
    		<!-- 映射文件配置,配置文件名必须包含其相对于根的全路径 -->
    		<mapping class="com.jn.pojo.User"/>
        </session-factory>
    </hibernate-configuration>
    

    4.创建持久化的实体类对象User

    package com.jn.pojo;
    
    import javax.persistence.Column;
    import javax.persistence.Entity;
    import javax.persistence.GeneratedValue;
    import javax.persistence.GenerationType;
    import javax.persistence.Id;
    import javax.persistence.Table;
    
    @Entity
    @Table(name="user")
    public class User {
    	
    	private int id;
    	private String name;
    	private int age;
    	
    	@Id	
    	@Column(name="id")
    	@GeneratedValue(strategy=GenerationType.AUTO)
    	public int getId() {
    		return id;
    	}
    
    	public void setId(int id) {
    		this.id = id;
    	}
    	
    	@Column(nullable=true)
    	public String getName() {
    		return name;
    	}
    
    	public void setName(String name) {
    		this.name = name;
    	}
    
    	@Column(nullable=true)
    	public int getAge() {
    		return age;
    	}
    
    	public void setAge(int age) {
    		this.age = age;
    	}
    
    	@Override
    	public String toString() {
    		return "User [id=" + id + ", name=" + name + ", age=" + age + "]";
    	}
    }
    

    5.创建对象与关系型数据库之间的映射(User中注解实现)

    6.通过Hibernate访问数据库:测试类MainTest.java

    package com.jn.test;
    
    import org.hibernate.Session;
    import org.hibernate.SessionFactory;
    import org.hibernate.boot.registry.StandardServiceRegistryBuilder;
    import org.hibernate.cfg.Configuration;
    import org.hibernate.service.ServiceRegistry;
    import org.junit.Test;
    
    import com.jn.pojo.User;
    
    public class MainTest {
    
    	@Test
    	public void test(){
    		
    		//1. 加载配置文件, 创建配置对象
    		/**
    		 * 默认情况下, 如果configure方法调用的是无参的, 则会加载SRC文件夹下的名字为hibernate.cfg.xml的配置文件
    		 * 如果配置文件名不是hibernate.cfg.xml, 那么可以在configure方法中指定配置文件
    		 */
    		Configuration configuration = new Configuration().configure("hibernate.cfg.xml");
    		
    		//2. 创建SessionFactory
    		ServiceRegistry sr = new StandardServiceRegistryBuilder().applySettings(configuration.getProperties()).build();
    		
    		SessionFactory sessionFactory = configuration.buildSessionFactory(sr);
    		
    		//3. 获取Session对象
    		/**
    		 * sessionFactory.getCurrentSession(), 获取当前线程的Session对象
    		 */
    		Session session = sessionFactory.openSession();
    		
    		//4. 操作数据库
    		// 开启事务
    		session.beginTransaction();
    		User user = (User) session.get(User.class, 1);  //获取id为1的user
    		System.out.println(user);
    		user.setAge(21);
    		System.out.println(user);
    		// 提交事务
    		session.getTransaction().commit();
    		
    		//5. 关闭对象
    		session.close();
    		
    		sessionFactory.close();
    		
    	}
    }
    

    7.项目结构:

      

    三  Hibernate开发步骤—API应用步骤

    l  创建hibernate配置,读取Hibernate配置文件及信息

    l  用读取的配置信息生成SessionFactory对象

    l  从SessionFactory对象获取 一个Session对象

    l  用Session对象生成事务

    l  通过Session对象的方法进行操作

    l  提交或回滚事务

    l  释放session and session factory资源

    四  hibernate的优点

    (1)首先是开源和免费的License,方便功能定制,需要时可以查看源码或者修改源码。
    (2)其次它是一个轻量级封装框架,避免引入过多复杂代码,减轻程序员调试负担。
    (3)再次它是一个有可扩展性、API开放的框架,可以在功能不够用时进行其功能的扩展。
    (4)最后就是Hibernate的程序开发使用者众多,促使产品有稳定的发展保证。

     

     

      

      

  • 相关阅读:
    GeoHash核心原理解析
    线程安全与可重入函数
    malloc和free的实现
    数字金字塔最大路径和——递归
    TCP连接建立与断开
    Gray Code
    C压缩字符串中的空格
    C++链接与装载
    epoll测试实例
    C++之手写strlen函数
  • 原文地址:https://www.cnblogs.com/mlan/p/7827588.html
Copyright © 2011-2022 走看看