分享web开发知识

注册/登录|最近发布|今日推荐

主页 IT知识网页技术软件开发前端开发代码编程运营维护技术分享教程案例
当前位置:首页 > 教程案例

Hibernate学习

发布时间:2023-09-06 01:08责任编辑:林大明关键词: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;}@Overridepublic String toString() {return "User [uid=" + uid + ", 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 {@Testpublic void test() throws Exception {//加载配置文件Configuration cfg = new Configuration().configure("config/hibernate.cfg.xml");//创建session工厂SessionFactory sfg = cfg.buildSessionFactory();//打开sessionSession openSession = sfg.openSession();//开起事物openSession.beginTransaction();
//业务逻辑处理**************************User user = new User(1,"西瓜瓜","123");openSession.save(user);
//业务逻辑处理**************************

//提交事物openSession.getTransaction().commit();//关闭sessionopenSession.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();}}}

  

 后面会继续更新……

Hibernate学习

原文地址:http://www.cnblogs.com/xiguamiao/p/7476637.html

知识推荐

我的编程学习网——分享web前端后端开发技术知识。 垃圾信息处理邮箱 tousu563@163.com 网站地图
icp备案号 闽ICP备2023006418号-8 不良信息举报平台 互联网安全管理备案 Copyright 2023 www.wodecom.cn All Rights Reserved