Hibernate学习

本文介绍Hibernate框架的基本概念,包括其作为对象关系映射工具的作用及优势,并详细指导如何通过六个步骤搭建并使用Hibernate环境。


1.什么叫hibernate?

Hibernate说的最简单实际上是一种能能够 直接操作 JAVA对象数据库 进行 交互 的一个技术,hibernate就是直接桥梁

JAVA对象<-----Hibernate<----数据库

 

HIbernate:是用来访问数据库的一种框架

                   是一个非侵入式的ORMapping框架

                   是一个对象关系映射的框架

                   是一个能够将JAVA对象直接映射到关系型数据库的

                   Hibernate---->JAVA对象------>关系型的数据库

 

       非侵入式框架:
                    就是我们在使用这个框架的时候,不需要让我们原来的代码来 继承于某些特定的类,或者实现某些特定的类 的这种类型框架。

       侵入式框架呢:
                    就是我们在使用这个框架的时候需要 继承或者实现 某些特定的类或者接口的这种类型的框架。

 

       O------->Object(对象)

       R------->Relation(关系型的数据库)

       M------->Mapping->映射


2.为什么我们要学习Hbernate呢?

     JDBC:    操作数据库需要编写复杂的交互代码====>效率比较高,但是代码比较复杂,很多

     Dbutils:  需要编写复杂的Sql代码

     Hibernate: 在这个情况下就应运而生了,它减少了程序员要编写Sql的负担,但是同时也降低了程序运行的效率,  也就是说:最终Sql语句的生成是由Hibernate来完成的,所以效率就降低了

 

3.使用hibernate步骤

* 因为hibernate是持久层(Dao层)的解决方案,既可以建立java工程也可以建立WEB工程


第一步:建立一个JAVA工程或者Web工程

第二步:导入我们的Hibernate的jar包

路径:hibernate-release-5.2.10.Final\lib\required--->改文件夹下面所有架包

 

第三步:在工程的src目录下config 创建一个名字是  hibernate.cfg.xml的全局配置文件

 

hibernate.cfg.xml代码:

<?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="connection.driver_class">com.mysql.jdbc.Driver</property>
        <property name="connection.url">jdbc:mysql:///hibernatetest</property>
        <property name="connection.username">root</property>
        <property name="connection.password">123</property>
    
    <!--配置方言  -->
    <!-- org.hibernate.dialect.MySQL57InnoDBDialect -->
    <!--org.hibernate.dialect.MySQL5InnoDBDialect  -->
        <property name="dialect">org.hibernate.dialect.MySQL57InnoDBDialect</property>
    <!--让数据库自动创建表  -->
        <property name="hbm2ddl.auto">update</property>
    <!--在控制台打印SQL语句  -->
        <property name="show_sql">true</property>
    <!--格式化SQL语句  -->
        <property name="format_sql">true</property>
    <!--添加映射路径  -->
        <mapping resource="com/my/test/User.hbm.xml"/>

   </session-factory>
</hibernate-configuration> 
    

第四步:建立我数据库对应的实体 User类

User类代码:


package com.my.test;

/**
 * Description:User实体类
 * Copyright (c) 2017 J.K
 * Program Name:User.java
 * Date:  2017年9月4日 下午6:50:02
 * 
 * @author  : 西瓜瓜 
 * @version : 1.0
 */
public class User {

	private int uid;//注意设置主键的时候类型
	private String uname;
	private String upwd;
	public User() {
		super();
		// TODO Auto-generated constructor stub
	}
	public User(int uid, String uname, String upwd) {
		super();
		this.uid = uid;
		this.uname = uname;
		this.upwd = upwd;
	}
	public int getUid() {
		return uid;
	}
	public void setUid(int uid) {
		this.uid = uid;
	}
	public String getUname() {
		return uname;
	}
	public void setUname(String uname) {
		this.uname = uname;
	}
	public String getUpwd() {
		return upwd;
	}
	public void setUpwd(String upwd) {
		this.upwd = upwd;
	}
	@Override
	public String toString() {
		return "User [u, uname=" + uname + ", upwd=" + upwd + "]";
	}
		
}

第五步:建立的实体和数据库表之间的映射关系

 在实体User类所对应的包里面创建一个映射文件 -----实体类名.hbm.xml

User.hbm.xml代码:

<?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 package="com.my.test"  auto-import="true">
    <!--auto-import="true" :后面使用HQL语句时,自动导入,不需要写全路径 -->
 
    <class name="User" table="t_user" auto-import="true">
     <!--配置主键  -->
	     <id name="uid"  column="u_id">
	        <!--主键生成策略  -->
	        <!--  
	        class="uuid":      主键是String类型的时候用
	        class="increment": 主键是int类型的时候用
	         -->
	         <generator class="increment"></generator>
	     </id>
    
    <!-- 普通配置属性 -->
       <property name="uname" column="u_name"  type="java.lang.String"> </property>
                 
       <property name="upwd" column="u_pwd"  type="java.lang.String"> </property>
  
    </class>    
        
</hibernate-mapping>         

 

第六步:在hibernate.cfg.xml文件中,添加我们的映射文件的路径(第三步图里面)

路径为全路径名

第七步:编写我们的测试类

 

Test001.java代码(一个简单测试类)

package com.my.test;

import static org.junit.Assert.*;
import java.util.List;
import javax.swing.plaf.synth.SynthSeparatorUI;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
import org.hibernate.query.Query;
import org.junit.Test;

/**
 * Description:测试类
 * Copyright (c) 2017 J.K
 * Program Name:Test001.java
 * Date:  2017年9月4日 下午7:09:48
 * 
 * @author  : 西瓜瓜
 * @version : 1.0
 */
public class Test001 {

		@Test
		public void test() throws Exception {
			//加载配置文件
			Configuration cfg = new Configuration().configure("config/hibernate.cfg.xml");
			//创建session工厂
			SessionFactory sfg = cfg.buildSessionFactory();
			//打开session
			Session openSession = sfg.openSession();
			//开起事物
			openSession.beginTransaction();
			
//业务逻辑处理************************** User user = new User(1,"西瓜瓜","123"); openSession.save(user);
//业务逻辑处理**************************

//提交事物 openSession.getTransaction().commit(); //关闭session openSession.close(); //关闭工厂 openSession.close(); } }

注*:除了业务逻辑,事物代码外,其他的都是重复的,可以封装成hibernate工具类

因此,简化代码如下:

HibernateUtil.java代码:

 

package com.my.utils;

import static org.hamcrest.CoreMatchers.nullValue;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;

/**
 * Description:HibernateUtil工具类
 * Copyright (c) 2017 J.K
 * Program Name:HibernateUtil.java
 * Date:  2017年9月4日 下午9:21:26
 * 
 * @author  : 西瓜瓜 
 * @version : 1.0
 */
public class HibernateUtil {
    
	private static Configuration cfg =null;
	private static SessionFactory sfg =null;

        //加载配置,创建session工厂设置为全局变量
	static{

		cfg = new Configuration().configure("config/hibernate.cfg.xml");
		sfg = cfg.buildSessionFactory();
	}

	
	//打开session(不能设置为全局变量)
	public static Session getSession() {
		
		return sfg.openSession();
		
	}

	
	//关闭资源
	public static void close(Session session,SessionFactory sfg) {
		if(null !=session){
			session.close();
		}
		if(null !=sfg){
			sfg.close();
		}	
		
	}
	
}

  

 

 后面会继续更新……

 

标题基于Python的汽车之家网站舆情分析系统研究AI更换标题第1章引言阐述汽车之家网站舆情分析的研究背景、意义、国内外研究现状、论文方法及创新点。1.1研究背景与意义说明汽车之家网站舆情分析对汽车行业及消费者的重要性。1.2国内外研究现状概述国内外在汽车舆情分析领域的研究进展与成果。1.3论文方法及创新点介绍本文采用的研究方法及相较于前人的创新之处。第2章相关理论总结和评述舆情分析、Python编程及网络爬虫相关理论。2.1舆情分析理论阐述舆情分析的基本概念、流程及关键技术。2.2Python编程基础介绍Python语言特点及其在数据分析中的应用。2.3网络爬虫技术说明网络爬虫的原理及在舆情数据收集中的应用。第3章系统设计详细描述基于Python的汽车之家网站舆情分析系统的设计方案。3.1系统架构设计给出系统的整体架构,包括数据收集、处理、分析及展示模块。3.2数据收集模块设计介绍如何利用网络爬虫技术收集汽车之家网站的舆情数据。3.3数据处理与分析模块设计阐述数据处理流程及舆情分析算法的选择与实现。第4章系统实现与测试介绍系统的实现过程及测试方法,确保系统稳定可靠。4.1系统实现环境列出系统实现所需的软件、硬件环境及开发工具。4.2系统实现过程详细描述系统各模块的实现步骤及代码实现细节。4.3系统测试方法介绍系统测试的方法、测试用例及测试结果分析。第5章研究结果与分析呈现系统运行结果,分析舆情数据,提出见解。5.1舆情数据可视化展示通过图表等形式展示舆情数据的分布、趋势等特征。5.2舆情分析结果解读对舆情分析结果进行解读,提出对汽车行业的见解。5.3对比方法分析将本系统与其他舆情分析系统进行对比,分析优劣。第6章结论与展望总结研究成果,提出未来研究方向。6.1研究结论概括本文的主要研究成果及对汽车之家网站舆情分析的贡献。6.2展望指出系统存在的不足及未来改进方向,展望舆情
【磁场】扩展卡尔曼滤波器用于利用高斯过程回归进行磁场SLAM研究(Matlab代码实现)内容概要:本文介绍了利用扩展卡尔曼滤波器(EKF)结合高斯过程回归(GPR)进行磁场辅助的SLAM(同步定位与地图构建)研究,并提供了完整的Matlab代码实现。该方法通过高斯过程回归对磁场空间进行建模,有效捕捉磁场分布的非线性特征,同时利用扩展卡尔曼滤波器融合传感器数据,实现移动机器人在复杂环境中的精确定位与地图构建。研究重点在于提升室内等无GPS环境下定位系统的精度与鲁棒性,尤其适用于磁场特征明显的场景。文中详细阐述了算法原理、数学模型构建、状态估计流程及仿真实验设计。; 适合人群:具备一定Matlab编程基础,熟悉机器人感知、导航或状态估计相关理论的研究生、科研人员及从事SLAM算法开发的工程师。; 使用场景及目标:①应用于室内机器人、AGV等在缺乏GPS信号环境下的高精度定位与地图构建;②为磁场SLAM系统的设计与优化提供算法参考和技术验证平台;③帮助研究人员深入理解EKF与GPR在非线性系统中的融合机制及实际应用方法。; 阅读建议:建议读者结合Matlab代码逐模块分析算法实现细节,重点关注高斯过程回归的训练与预测过程以及EKF的状态更新逻辑,可通过替换实际磁场数据进行实验验证,进一步拓展至多源传感器融合场景。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值