我是靠谱客的博主 失眠帅哥,最近开发中收集的这篇文章主要介绍hibernate jar包_Hibernate基础,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

34c7df13ba865a03a1b211c6c6260058.png

内容

1.hibernate简介2.hibernate环境搭建3.hibernate之Mapper文件解析 4.hibernate之API解析

一.hibernate简介

1.简介

1.官网地址: http://hibernate.org/2.API文档: https://sourceforge.net/projects/hibernate/files/hibernate-orm/1.hibernate是一个ORM框架2.hibernate是对JDBC进行轻量级封装的框架3.全自动化的框架,可以自动生成sql语句,也会自动执行sql,使程序员只需按照面向对像的思想来操作数据库即可。

2.hibernate的映射关系

1.实体类和数据库中表之间的映射关系2.实体类的属性和表的字段之间的映射关系3.实体类的对像和表中的一条记录之间的映射关系

3.hibernate的作用

1.Hibernate不仅负责从Java类映射到数据库表(从Java数据类型到SQL数据类型),而且还提供了数据查询和检索功能。2.它可以显著减少开发时间,可以避免手动编写SQL语句,实现自动生成SQL语句,自动执行!3.Hibernate依然可以使用SQL对数据操作,保证你的技术和知识是有效的一如既往。4.最为关键的一点,Hibernate是ORM模型框架,通过操作实体类(持久化类)进而操作数据库!这样Java程序员可以随心所欲的使用面向对象编程思想来操作纵数据库!

4.hibernate常用API

1.SessionFactory(session工厂)和Mybatis中的SqlSessionFactory用法一致。SessionFactory接口负责初始化Hibernate。它是线程安全的,它充当数据存储源的代理,并负责创建Session对象。这里用到了工程模式。需要注意的是SessionFactory并不是轻量级的,因为一般情况下,一个项目通常只需要一个SessionFactory就够,当需要操作多个数据库时,可以为每个数据库指定一个SessionFactory。​2.Session(会话)和Mybatis中的SqlSession用法一致。Session接口负责执行被持久化对象的CRUD操作(CRUD的任务是完成与数据库的交流,包含了很多常见的SQL语句)。但需要注意的是Session是非线程安全的。注意:和HttpSession没有任何关系。​3.Transaction(事务对像)Transaction 接口是一个可选的API,可以选择不使用这个接口,取而代之的是Hibernate 的设计者自己写的底层事务处理代码。 Transaction 接口是对实际事务实现的一个抽象,这些实现包括JDBC的事务、JTA 中的UserTransaction、甚至可以是CORBA 事务。之所以这样设计是能让开发者能够使用一个统一事务的操作界面,使得自己的项目可以在不同的环境和容器之间方便地移植。

二.hibernate环境搭建

1.步骤

1.引入jar包: hibernate-core.jar和数据库驱动包2.在resource目录下引入hibernate.cfg.xml 和Mybatis-config.xml文件基本类似,主要作用:建立和数据库的连接。3.在Model模型层引入Mapper.xml文件  和Mybatis的Mapper作用相似,主要作用:建立映射关系。4.使用Hiberante的API来初始化hibernate.cfg.xml文件。 使用Session对像进行CRUD操作即可。

1.1 引入jar包

 org.hibernate hibernate-core 5.2.10.Finalmysql mysql-connector-java 5.1.40junit junit 4.9test​ 

1.2 在resource目录下引入hibernate.cfg.xml

<?xml version="1.0" encoding="UTF-8"?>com.mysql.jdbc.Driverjdbc:mysql://localhost:3306/javaeeroottigerorg.hibernate.dialect.MySQLDialecttruetrue

1.3 在模型层引入hbm.xml文件

一般hbm.xml文件的命名规则:类名.hbm.xml文件的方式。<?xml version="1.0" encoding="UTF-8"?>

1.4 使用hibernateAPI来操作数据库

//User类public class User {private Integer id;private String username;private String password;//省略getter和setter}//工具类public class HibernateUtil {static SessionFactory factory;static {// 1.初始化hibernate.cfg.xml文件Configuration cfg = new Configuration().configure("hibernate.cfg.xml");// 2.创建Session工厂factory = cfg.buildSessionFactory();} //获取Session对像public static Session findSession(){return factory.openSession();}}//UserDaopublic class UserDao { //增public void insert(User user) {Session session = HibernateUtil.findSession();// 开启事务Transaction tx = session.beginTransaction();try {session.save(user);// 提交事务tx.commit();} catch (Exception e) {e.printStackTrace();// 回滚事务tx.rollback();}} //删public void delete(User user) {Session session = HibernateUtil.findSession();// 开启事务Transaction tx = session.beginTransaction();try {session.delete(user);// 提交事务tx.commit();} catch (Exception e) {e.printStackTrace();// 回滚事务tx.rollback();}}//改public void update(User user) {Session session = HibernateUtil.findSession();// 开启事务Transaction tx = session.beginTransaction();try {session.update(user);// 提交事务tx.commit();} catch (Exception e) {e.printStackTrace();// 回滚事务tx.rollback();}} //查单个public User selectById(User user){Session session = HibernateUtil.findSession();User findUser = session.get(User.class, user.getId());return findUser;}}//测试(略)

三.Mapper文件解析

1.Mapper常用标签

1.根标签package属性:设置模型类的包名,以简化配置,在class标签中通过指定类名来代替类的完全限定名的写法。2.标签name属性:指定类名(类的完全限定名),代表映射某一个类。table属性:指定数据库中表的名字,该名字对大小写不敏感,但一般使用大写方式(为了和类信息相区分)。3.标签(用来映射主键配置,hibernate要求对像必须有主键)name属性:用来设置对像OID属性(Object ID), 属性名称指定是实体类里面的 getter 和 setter方法的名称,而不是私有成员名称。column属性:用来映射表中的主键4.标签class属性:用来设置主键生成策略,如assigned,表示手动指定主键。后续作详细说明5.标签(代表类映射到表的普通字段)name属性:类的属性名称,属性名称指定是实体类里面的 getter 和 setter方法的名称,而不是私有成员名称。column属性:表的字段名称。注意: 可以不添加column属性,那么认为表的字段名和实体类的变量名相同。type属性:填写列的类型,Hibernate 会自动检测实体的属性类型,一般可以省略不写。 填写方式有三种(java|jdbc|hibernate),建议使用java类型。not-null属性:来限定对像中属性是否不能为空(true不能为空|false不作要求),默认为falselength属性:配置数据库中列的长度。主要用户根据实体类自动创建表时使用, 注意:如果是整数类型,则无效。unique属性:和length的用法一致,自动生成表时,可以对表的字段进行唯一性约束。

四.Config文件解析

1.常用标签

1.根标签2.标签 最终会抽像成SessionFactory对像。3.标签用来设置hibernate常量配置。主要是影响hibernate的全局行为。其中key是固定配置,在AvailableSettings接口有相关常量。4.标签:引入映射文件,让hibernate知道关于表和类的映射配置。resources属性:表示通过相对路径方式引入mapper.xml(注意使用/来配置资源映射文件)

2.property标签之数据连接参数配置

hibernate.connection.driver_class 配置驱动hibernate.connection.url 配置数据库连接urlhibernate.connection.username 配置数据库连接用户名hibernate.connection.password 配置数据库连接密码

3.property标签之数据库之方言

1.mysql数据库是5.0-5.5版本之间:org.hibernate.dialect.MySQLDialect,生成的表结构是InnoDB,支持事务2.mysql数据库非5.7版本(推荐使用)org.hibernate.dialect.MySQL5InnoDBDialect,生成的表结构是InnoDB,支持事务。3.mysql数据库5.7版本org.hibernate.dialect.MySQL57InnoDBDialect,生成的表结构是InnoDB,支持事务。

4.property标签之扩展参数

1.hibernate.show_sql是否在控制台输入sql语句,true表示输出,false表示不输出。2.hibernate.format_sql是否在控制台格式化sql语句,true表示格式化sql,false不进行格式化3.hibernate.hbm2ddl.auto(在开发过程中,该属性一般不设置)hibernate对DDL语句的支持,如创建表的支持(一般会根据实体类自动生成表结构)(1)update属性: Hibernate 会维护表结构。没有表的时候创建表,有表的时候不创建,字段有更新会增加新字段,不删除原有字段。(推荐使用)(2)create属性: 每次 Hibernate 都会删除原来的表,生成新的表结构。(开发环境中测试使用) (3)create-drop属性(??): 每次都会生成新的表结构,每次框架运行结束都会将所有表删除。(开发环境中测试使用) (4)validate属性:hibernate不会生成表结构,只会校验该表结构是否存在,及其中的字段约束是否正确,如果校验不通过,则会抛出异常。

五.hibernate常用API解析

1.常用方法

1.save(Object obj):保存对象2.update(Object obj):更新对象3.saveOrUpdate(Object obj):添加或修改对象4.delete(Object obj):删除对象5.get(Class clz,Serialize id):获取对象6.load(Class clz,Serialize id):获取对象

2 .几个方法的区别

1.Session对像的获取方式OpenSession()与getCurrentSession()区别2.查询数据方法get()方法和load()方法区别3.更新数据方法update()方法和saveOrUpdate()的区别

2.1 openSession()与getCurrentSession()区别

1.openSession()每次调用该方法都获取新的Session,该Session对像非线程安全,要确保每次时行CRUD操作时,都获取新的 Session对像。所以该对像的作用范围是成员方法中。增删改需要事务支持,对查询方法的事务不作要求。2.getCurrentSession()该方法获取的session是线程安全的,该Session对像被hibernate使用ThreadLocal对像进行了管理。同一个线程获取的session对像是同一个,不同的线程获取的session对像不是同一个。增删改查必需处于事务范围。使用getCurrentSession时必须在confing.xml设置全局量thread注意:hibernate5推荐使用该方法来获取session

2.2.get()方法和load()区别

相同点:1.都是根据对像的OID来查询数据。只能查询单条记录。不同点:1.get():不支持lazy加载;当加载数据库中不存在记录时,返回null值。2.load():支持lazy加载,按需加载;当加载数据库中不存在记录时,会抛出ObjectNotFoundException异常。 如果想使用lazy加载,则不能为关闭session.

2.3.update()和saveOrUpdate()的区别

1.update()方法用来更新数据。2.saveOrUpdate()方法即可以新增数据,也可以更新数据。 根据对像的OID去数据库中查询该记录是否存在,如果存在,则进行更新操作,否则,进行插入操作。

最后

以上就是失眠帅哥为你收集整理的hibernate jar包_Hibernate基础的全部内容,希望文章能够帮你解决hibernate jar包_Hibernate基础所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(41)

评论列表共有 0 条评论

立即
投稿
返回
顶部