Hibernate环境的搭建


  •  

    1. 导入Hibernate所需的jar包

    1)导入lib\required目录下的jar包

     

    2)导入lib\jpa-metamodel-generator下的jar包

     

    3)因为hibernate没有日志包,所以需要导入第三方的日志包及jar包

     

    1. 编写实体类User

    User.java

    	package com.tao.entity;
    	
    	public class User {
    	
    	        /*hibernate要求实体类有一个属性唯一的*/
    	//	private int uid;
    	        
    	        private String uid;
    	        private String username;
    	        private String password;
    	        private String address;
    	//	public int getUid() {
    	//		return uid;
    	//	}
    	//	public void setUid(int uid) {
    	//		this.uid = uid;
    	//	}
    	        
    	        public String getUsername() {
    	                return username;
    	        }
    	        public String getUid() {
    	                return uid;
    	        }
         }
    	}
    


     

    1. 配置实体类和数据库表--对应关系(映射关系)
      1. 在User.java包下创建User.hbm.xml文件
      2. 添加xml文件的dtd的约束

    文件在project\hibernate-core\src\main\resources\org\hibernate目录下寻找

    文件名为hibernate-mapping-3.0.dtd

    1. 配置映射关系

    User.hbm.xml

    		<?xml version="1.0" encoding="UTF-8"?>
    		<!DOCTYPE hibernate-mapping PUBLIC 
    		    "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
    		    "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
    		<hibernate-mapping>
    		        <!-- 1 配置类和表对应 
    		                class标签
    		                name属性:实体类全路径
    		                table属性:数据库表名称
    		        -->
    		        <class name="cn.itcast.entity.User" table="t_user">
    		                <!-- 2 配置实体类id和表id对应 
    		                        hibernate要求实体类有一个属性唯一值
    		                        hibernate要求表有字段作为唯一值
    		                -->
    		                <!-- id标签
    		                        name属性:实体类里面id属性名称
    		                        column属性:生成的表字段名称
    		                 -->
    		                <id name="uid" column="uid">
    		                        <!-- 设置数据库表id增长策略 
    		                                native:生成表id值就是主键自动增长
    		                        -->
    		                        <generator class="uuid"></generator>
    		                </id>
    		                <!-- 配置其他属性和表字段对应 
    		                        name属性:实体类属性名称
    		                        column属性:生成表字段名称
    		                -->
    		                <property name="username" column="username"></property>
    		                <property name="password" column="password"></property>
    		                <property name="address" column="address"></property>
    		        </class>
    		</hibernate-mapping>
    



     

    1. 创建Hibernate的核心配置文件
      1. 核心配置的文件位置和名字为固定的

    位置:src的根目录

    名称:hibernate.cfg.xml

    1. 引入dtd约束

    约束文件位置:project\hibernate-core\src\main\resources\org\hibernate

    约束文件名称:hibernate-configuration-3.0.dtd

    1. 添加配置信息
      1. 配置数据库(必须)
      2. 配置hibernate信息(可选)
      3. 把映射文件放到核心配置文件中(必须)
    2. 数据可配置信息

    数据库的配置信息可以在相关配置文件

    路径:project\etc

    名称:hibernate.properties


    		<?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>
    		                <!-- 第一部分: 配置数据库信息 必须的 -->
    		                <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
    		                <property name="hibernate.connection.url">jdbc:mysql:///hibernate_day01</property>
    		                <property name="hibernate.connection.username">root</property>
    		                <property name="hibernate.connection.password">root</property>
    		                
    		                <!-- 第二部分: 配置hibernate信息  可选的-->
    		                <!-- 输出底层sql语句 -->
    		                <property name="hibernate.show_sql">true</property>
    		                <!-- 输出底层sql语句格式 -->
    		                <property name="hibernate.format_sql">true</property>
    		                <!-- hibernate帮创建表,需要配置之后 
    		                        update: 如果已经有表,更新,如果没有,创建
    		                -->
    		                <property name="hibernate.hbm2ddl.auto">update</property>
    		                <!-- 配置数据库方言
    		                        在mysql里面实现分页 关键字 limit,只能使用mysql里面
    		                        在oracle数据库,实现分页rownum
    		                        让hibernate框架识别不同数据库的自己特有的语句
    		                 -->
    		                <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
    		                
    		                <!-- 第三部分: 把映射文件放到核心配置文件中 必须的-->
    		                <mapping resource="cn/itcast/entity/User.hbm.xml"/>
    		        </session-factory>
    		</hibernate-configuration>
    		
    


     

    1. 实现添加操作
      1. 加载hibernate核心配置文件
      2. 创建SessionFactory对象
      3. 使用SessionFactory创建Session对象
      4. 开启事物
      5. 写具体逻辑crud操作
      6. 提交事物
      7. 关闭资源

    	package com.tao.hibernatetest;
    	
    	import org.hibernate.Session;
    	import org.hibernate.SessionFactory;
    	import org.hibernate.Transaction;
    	import org.hibernate.cfg.Configuration;
    	import org.junit.Test;
    	
    	import cn.itcast.entity.User;
    	import cn.itcast.utils.HibernateUtils;
    	
    	public class HibernateDemo {
    	
    	        @Test
    	        public void testAdd() {
    	                //第一步 加载hibernate核心配置文件
    	                // 到src下面找到名称是hibernate.cfg.xml
    	                //在hibernate里面封装对象
    	                Configuration cfg = new Configuration();
    	                cfg.configure();
    	                
    	//		第二步 创建SessionFactory对象
    	        //读取hibernate核心配置文件内容,创建sessionFactory
    	        //在过程中,根据映射关系,在配置数据库里面把表创建
    	        SessionFactory sessionFactory = cfg.buildSessionFactory();
    	        
    	//		SessionFactory sessionFactory = HibernateUtils.getSessionFactory();
    	        
    	        //第三步 使用SessionFactory创建session对象
    	        // 类似于连接
    	        Session session = sessionFactory.openSession();
    	        
    	        //第四步 开启事务
    	        Transaction tx = session.beginTransaction();
    	
    	        //第五步 写具体逻辑 crud操作
    	        //添加功能
    	        User user = new User();
    	        user.setUsername("小马");
    	        user.setPassword("1314520");
    	        user.setAddress("美国");
    	        //调用session的方法实现添加
    	        session.save(user);
    	        
    	        //第六步 提交事务
    	        tx.commit();
    	
    	        //第七步 关闭资源
    	        session.close();
    	        sessionFactory.close();
    	        }
    	}
    


     

    1. 对事务操作的改进1

    因为SessionFactory在程序中只有一个,所以它是单例模式,我们应该创建衣一个工具类,使其得到单例模式,创建一个Util包,创建一个HibernateUtils.java文件

    HibernateUtils.java

    	package cn.itcast.utils;
    	
    	import org.hibernate.SessionFactory;
    	import org.hibernate.cfg.Configuration;
    	
    	public class HibernateUtils {
    	
    	        static Configuration cfg = null;
    	        static SessionFactory sessionFactory = null;
    	        //静态代码块实现
    	        static {
    	                //加载核心配置文件
    	                cfg = new Configuration();
    	                cfg.configure();
    	                sessionFactory = cfg.buildSessionFactory();
    	        }
    	        
    	        //提供方法返回sessionFactory
    	        public static SessionFactory getSessionFactory() {
    	                return sessionFactory;
    	        }
    	        
    	        public static void main(String[] args) {
    	                
    	        }
    	}
    


     

    1. 对事物操作的改进2

    因为我们对数据库操作经常要用到回滚或者异常处理,而这种代码结构不严谨所以应该用到以下的代码结构

    try{

    开启事务

    提交事务

    }catch(){

    回滚事务

    }finally{

    关闭

    }

    修改代码如下

     

    	package com.tao.hibernatetest;
    	
    	import org.hibernate.Session;
    	import org.hibernate.SessionFactory;
    	import org.hibernate.Transaction;
    	import org.junit.Test;
    	
    	import cn.itcast.entity.User;
    	import cn.itcast.utils.HibernateUtils;
    	
    	public class HibernateSelect {
    	        
    	        //事务规范代码
    	        @Test
    	        public void testTx() {
    	                Session session = null;
    	                Transaction tx = null;
    	                try {
    	                        //与本地线程绑定的session
    	                        session = HibernateUtils.getSessionobject();
    	                        //开启事务
    	                        tx = session.beginTransaction();
    	                        
    	                        //添加
    	                        User user = new User();
    	                        user.setUsername("小马1");
    	                        user.setPassword("250");
    	                        user.setAddress("美国");
    	                        
    	                        session.save(user);
    	                        
    	//			int i = 10/0;
    	        //提交事务
    	        tx.commit();
    	        }catch(Exception e) {
    	                e.printStackTrace();
    	                //回滚事务
    	                tx.rollback();
    	        }finally {
    	                //关闭操作
    	//			session.close();
    	//			sessionFactory.close();
    	        }
    	        }
    	}
    


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值