分享web开发知识

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

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

hibernate之小白一

发布时间:2023-09-06 02:00责任编辑:苏小强关键词:暂无标签

关于hibernate框架,以下是我自己的见解,每个人的理解各不同,希望各位读者根据自己的需要来查询自己想要的。以下我来给你们分享我学习hibernate的一些理论和实践:

  • 首先我们来了解一下hibernate的概述:什么是框架,什么是hibernate,什么是ORM
  • 其次来了解hibernate入门:开发环境的搭建和一些简单功能的实现
  • 然后是hibernate配置文件:映射配置文件和核心配置文件
  • 再然后我们看一下hibernate的核心API
  • 最后写其代码,一睹其风采。

1.hibernate的概述

对于框架的理解,那是简单而粗暴的,无非就是少些代码,对代码进行整理,将一些主要代码整合起来。举一个简单的例子:就像盖房子你得先搭起整个架子,然后再慢慢写其他的功能。

对于hibernate,是一个标准的ORM框架(也就是对象关系映射),入门门槛高,它的sql语句是不用程序猿写的。sql语句是自动生成,但对sql语句进行优化、修改是比较困难的。

对于ORM,这是一种思想,我理解的是比较浅的,关于ORM你们可查完美资料。在hibernate中ORM思想:使得实体类和数据库中的表相对应,实体类里面的属性和库中的字段对应。下面是ORM思想的一个图。

2.hibernate入门和配置文件

工程示意图:

下面就来剖析上面的工程:

(1)在cn.itcast.entity包下有俩个文件,依次是User实体类,实体类映射配置文件

(2)cn.itcast.hibernatetest下有一个测试类

(3)cn.itcast.util包下是一个工具类

(4)hibernate.cfg.xml是核心配置文件,还有下面的log4.properties文件是一个日志文件。

既然咱说到这里了,咱就一会再说那几个核心API,下面咱开始代码之旅:

先看咱的实体类,非常简单,就几个属性,在生成set,get方法:

 1 package cn.itcast.entity; 2 ?3 public class User { 4 ????/* Hibernate要求实体类有一个属性值唯一的 */ 5 ????private int uid; 6 ????private String username; 7 ????private String password; 8 ????private String address; 9 10 ????public String getPassword() {11 ????????return password;12 ????}13 ????public void setPassword(String password) {14 ????????this.password = password;15 ????}16 ????public int getUid() {17 ????????return uid;18 ????}19 ????public void setUid(int uid) {20 ????????this.uid = uid;21 ????}22 ????public String getUsername() {23 ????????return username;24 ????}25 ????public void setUsername(String username) {26 ????????this.username = username;27 ????}28 ????public String getAddress() {29 ????????return address;30 ????}31 ????public void setAddress(String address) {32 ????????this.address = address;33 ????}34 ????@Override35 ????public String toString() {36 ????????return "User [uid=" + uid + ", username=" + username + ", password=" + password + ", address=" + address + "]";37 ????}38 }

其次,在配置User实体类的映射文件:

 1 <?xml version="1.0" encoding="UTF-8"?> 2 <!DOCTYPE hibernate-mapping PUBLIC ?3 ????"-//Hibernate/Hibernate Mapping DTD 3.0//EN" 4 ????"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"> 5 <hibernate-mapping> 6 ????<!-- 1.配置类和表对应 。class标签:1).name属性:实体类全路径。2).table属性:数据库表名 --> 7 ????<class name="cn.itcast.entity.User" table="t_user"> 8 ????????<!-- 2.配置实体类id和表id对应。hibernate要求实体类有一个属性唯一值 ,hibernate要求表有一个属性唯一值 --> 9 ????????<id name="uid" column="uid">10 ????????????<!-- 设置数据库表id增长策略 -->12 ????????????<generator class="native"></generator>13 ????????</id>14 ????????<property name="username" column="username"></property>15 ????????<property name="password" column="password"></property>16 ????????<property name="address" column="address"></property>17 ????</class>18 </hibernate-mapping>

在上面代码中,我写的很详细,大家在写配置文件的时候,表头也很重要,一般情况下,你直接复制到你配置文件中去就可以使用,有提示。而非一般情况下,是没有提示的,为了这个问题,小编我可是费了好多功夫,在以后的日子里,我会把这一问题给大家分享出来。

然后再配置我们的核心配置文件:

 1 <?xml version=‘1.0‘ encoding=‘UTF-8‘?> 2 <!DOCTYPE hibernate-configuration PUBLIC 3 ??????????"-//Hibernate/Hibernate Configuration DTD 3.0//EN" 4 ??????????"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"> 5 <hibernate-configuration> 6 ????<session-factory> 7 ????????<!-- 第一部分:配置数据库信息,必须的 --> 8 ????????<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property> 9 ????????<property name="hibernate.connection.url">jdbc:mysql:///hibernate</property>10 ????????<property name="hibernate.connection.username">root</property>11 ????????<property name="hibernate.connection.password">root</property>12 13 ????????<!-- 第二部分:配置hibernate信息,可选的 -->14 ????????<!-- 输出底层sql语句 -->15 ????????<property name="hibernate.show_sql">true</property>16 ????????<!-- 输出底层sql语句格式 -->17 ????????<property name="hibernate.format_sql">true</property>18 19 ????????<!-- hibernate帮创建表,需配置之后,update:如果已经有表就更新,没有就创建 -->20 ????????<property name="hibernate.hbm2ddl.auto">update</property>21 22 ????????<!--配置数据库方言;在mysql中实现分页使用limit,只能在mysql中。让hibernate框架识别不同数据库的自己的语句 -->23 ????????<property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>24 25 ????????<!-- 第三部分:hibernate配置表:需要配置之后 -->26 ????????<mapping resource="cn/itcast/entity/User.hbn.xml" />27 ????</session-factory>28 </hibernate-configuration>

再然后看工具类 

 1 package cn.itcast.utils; 2 ?3 import org.hibernate.SessionFactory; 4 import org.hibernate.cfg.Configuration; 5 ?6 public class HibernateUtils { 7 ????static Configuration cfg = null; 8 ????static SessionFactory sessionFactory = null; 9 ????// 提供静态代码块实现10 ????static {11 ????????// 加载核心配置文件12 ????????cfg = new Configuration().configure();13 ????????sessionFactory = cfg.buildSessionFactory();14 ????}15 ????// 提供方法返回值sessionFactory16 ????public static SessionFactory getSessionFactory() {17 ????????return sessionFactory;18 ????}19 ????public static void main(String[] args) {}
??????//在这里面我们使用了静态代码块,它只执行一次,因为在真实的项目中,咱的SessionFactory只会创建一个,而且不需要关闭。补一句,log4日志文件复制Copy就ok。20 }

最后咱们看测试代码:

 1 package cn.itcast.hibernatetest; 2 ?3 import org.hibernate.Session; 4 import org.hibernate.SessionFactory; 5 import org.hibernate.Transaction; 6 import org.junit.Test; 7 ?8 import cn.itcast.entity.User; 9 import cn.itcast.utils.HibernateUtils;10 11 public class HibernateDemo {12 ????@Test13 ????public void add() {14 ????????SessionFactory sessionFactory = HibernateUtils.getSessionFactory();15 ????????// 第三步:使用SessionFactory创建session对象16 ????????Session session = sessionFactory.openSession();17 ????????// 第四步:开启事务18 ????????Transaction tx = session.beginTransaction();19 ????????// 第五步:写具体逻辑crud操作20 ????????User user = new User();21 ????????user.setUsername("张圣诞");22 ????????user.setAddress("美国");23 ????????user.setPassword("5201205");24 ????????session.save(user);25 ????????// 第六步:提交事务26 ????????tx.commit();27 ????????// tx.rollback();28 ????????// 第七步:关闭事务29 ????????session.close();30 ????????sessionFactory.close();31 ????}32 }

此方法执行之后,hibernate就会给我创建数据库表,并添加数据到数据库中。不过咱这样写终究是有一些问题的,比如说性能啊、代码简洁度啊、规范性啊什么的,那么我会在之后几天,我会给大家补充的。

那么hibernate会给咱生成sql语句:

那么到现在,我们简单的hibernate工程就完结了,你学到了嘛,希望对你有用哦。。


到最后,我们来看看四个重要的API:

1.首先是Configuration,我来写句代码:Configuration cfg = new Configuration().configure();//这是到src下去找名称为hibernate.cfg.xml配置文件,把文件放到对象里面去(也就是加载核心配置文件)

2.SessionFactory(重点),使用Configuration对象创建SessionFactory对象,在创建SessionFactory过程中一般是一个项目就创建一个,具体实现我们使用工具类,用静态方法创建。让其只执行一次

3.Session(重点),session类似于jdbc中的connection.调用session里面不同方法可实现crud操作,如save,get,delete,update等,session对象为单线程对象,不能共用,只能自己用

4.transaction,事务对象,通过session开启事务,提交事务,有异常的话回滚事务。对了,事务还有四个特性:原子性、一致性、隔离性、持久性。


无论你是来自著名或不著名的城市,都欢迎你,因为我们都在砥砺前行!

hibernate之小白一

原文地址:https://www.cnblogs.com/mnxz99/p/9200651.html

知识推荐

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