HIBERNATE入门(初级入门)
ORM框架:注1:Object Relational Mapping (对象关系映射) 持久层框架: 优势:跨数据库的无缝移植
发布日期:2021-05-04 01:05:55
浏览次数:35
分类:技术文章
本文共 12794 字,大约阅读时间需要 42 分钟。
什么是HIBERNATE
如何在项目中添加hibernate支持(手动添加)
1.添加hibernate相关依赖
Pom.xml源码:4.0.0 com.zking hibedate01 war 0.0.1-SNAPSHOT hibedate01 Maven Webapp http://maven.apache.org 5.2.12.Final 4.12 2.5.13 5.1.44 2.5.1 4.0.1 1.2 1.1.2 8.5.20 1.2.17 2.9.3 log4j log4j ${log4j.version} junit junit ${junit.version} test javax.servlet javax.servlet-api ${servlet.version} provided org.apache.struts struts2-core ${struts2.version} mysql mysql-connector-java ${mysql.version} com.belerweb pinyin4j ${pinyin4j.version} javax.servlet.jsp.jstl jstl ${jstl.version} taglibs standard ${standard.version} com.fasterxml.jackson.core jackson-databind ${jackson.version} jackson-annotations com.fasterxml.jackson.core com.fasterxml.jackson.core jackson-core ${jackson.version} com.fasterxml.jackson.core jackson-annotations ${jackson.version} org.hibernate hibernate-core ${hibernate.version} org.hibernate hibernate-ehcache 5.2.12.Final net.sf.ehcache ehcache 2.10.0 org.slf4j slf4j-api 1.7.7 org.slf4j jcl-over-slf4j 1.7.7 runtime org.apache.logging.log4j log4j-slf4j-impl 2.9.1 org.apache.logging.log4j log4j-api 2.9.1 org.apache.logging.log4j log4j-core 2.9.1 org.apache.logging.log4j log4j-web 2.9.1 runtime com.lmax disruptor 3.2.0 hibedate01 org.apache.maven.plugins maven-compiler-plugin 3.7.0
2.在resource目录下添加hibernate.cfg.xml(核心配置文件)
2.1. 添加DTD支持
打开Window—>
Location:查找核心配置文件:E:\jars\hiberdate\hibernate-configuration-3.0 Key type:URLkey地址:http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd
成功DTD支持2.2. 添加Hibernate的配置
2.2.1 数据库相关(connection.username|connection.password|connection.url|connection.driver_class|dialect)
2.2.2 调试相关(show_sql|format_sql)
hiberdate配置源码:root 123 jdbc:mysql://localhost:3306/hjj?useUnicode=true&characterEncoding=UTF-8&useSSL=false com.mysql.jdbc.Driver org.hibernate.dialect.MySQLDialect true true
3 在开发阶段再创建实体类和实体映射文件(*.hbm.xml)
实体必须实现Serializable接口 User User.bhm.xml
打开Window—>
Location:查找实体映射文件E:\jars\hiberdate\hibernate-mapping-3.0 key type:选择URL key:http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd小结:hibernate.cfg.xml(1)/*.hbm.xml(N)
解释: 项目只能有一个核心文件,但可以有多个实体映射文件 (重点) 实体映射文件一定要加到核心配置文件;4. hibernate核心API讲解
4.1 Configuration
读取hibernate.cfg.xml核心配置文件hiberdate.cfg.xml源码:
root 123 jdbc:mysql://localhost:3306/hjj?useUnicode=true&characterEncoding=UTF-8&useSSL=false com.mysql.jdbc.Driver org.hibernate.dialect.MySQLDialect true true
实体映射文件:xxx.hbm.xm源码l:
4.2 SessionFactory
XxxFactory工厂
#会话
4.3 Session
注1:此session不是jsp里面的session 注2:在会话阶段程序可以通过session接口对数据库执行增-删-改-查(当个对象)操作。
4.3.1 save
4.3.2 get(不讲load方法,在hibernate对象状态时再讲)
4.3.3 delete(先查再删除,保证程序的健壮性)
User u = (User) session.get(User.class,99); if(null!=u){ session.delete(u);//比如id=99不存在,直接删除就会报错 }
4.3.4 update
先查再改 局部修改
4.4 Transaction(自动事务和手动事务讲解)
commit/rollback
4.5 Query(hql一章讲)
查全部/批量修改或删除
5. 如何使用hibernate完成CRUD操作
5.1 CRUD操作步骤
5.1.1 读取配置
5.1.2 创建SessionFactory
5.1.3 打开Session
5.1.4 开启事务
5.1.5 CURD
5.1.6 提交事务/回滚事务
5.1.7 关闭Session
5.2 注意事项
5.2.1 hibernate默认使用的是手动事务,因此必须显示的开启和提交事务
5.2.2 删除操作时,必须先查再删
6. 工具类SessionFactoryUtil
结果:UserDao源码:
package com.zking.text.dao;import java.text.ParseException;import java.text.SimpleDateFormat;import java.util.Date;import org.hibernate.Session;import org.hibernate.SessionFactory;import org.hibernate.Transaction;import org.hibernate.cfg.Configuration;import com.zking.text.entity.User;public class UserDao {//新增public static void main(String[] args) throws Exception { User user = new User();//实体类 SimpleDateFormat sdf = new SimpleDateFormat("yyyy-mm-dd"); Date d = sdf.parse("2020-4-2"); java.sql.Date birthday = new java.sql.Date(d.getTime()); user.setId(3); user.setUserName("zzz"); user.setUserPwd("9888"); user.setRealName("王五2"); user.setSex("女"); user.setBirthday(birthday); user.setRemark("abcd"); //1.读取核心配置文件 Configuration configuration = new Configuration(); configuration.configure("hibernate.cfg.xml"); //2.创建会话工厂 SessionFactory sessionFactory = configuration.buildSessionFactory(); //3.创建会话 Session session = sessionFactory.openSession(); //4.开启事务 Transaction transaction = session.beginTransaction(); //5.CRUD session.save(user);//添加 User u = session.get(User.class, user.getId());//查询单个 if(null!=u) { u.setUserName(user.getUserName()); u.setUserPwd(user.getUserName()); u.setRealName(user.getRealName()); u.setSex(user.getSex()); u.setRemark(user.getRemark()); session.update(u);//修改 session.delete(u);//删除 } System.out.println(u); //6.提交或回滚事务 transaction.commit(); //7.关闭会话 session.close();}}
6. OID属性
与数据库主键列映射的属性 普通标签和id标签做了区分
SessionFactory对象的创建代价很昂贵,它是线程安全的对象,它为所有的应用程序线程所共享。它只创建一次,通常是在应用程序启动的时候,由一个Configuraion的实例来创建
Session对象的创建代价比较小,是非线程安全的,对于单个请求,单个会话、单个的 工作单元而言,它只被使用一次,然后就丢弃。只有在需要的时候,一个Session对象 才会获取一个JDBC的Connection(或一个Datasource) 对象,因此假若不使用的时候它不消费任何资源。
工具包:hibernate-configuration-3.0.dtd源码:
工具包:hibernate-mapping-3.0.dtd源码:
#### hibernate-configuration-3.0.dtd源码:
输出结果的hibernate:
转载地址:https://blog.csdn.net/weixin_45067120/article/details/105254466 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
路过,博主的博客真漂亮。。
[***.116.15.85]2024年04月18日 14时13分14秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
学以致用设计模式 之 “组合模式”
2021-06-30
我用过的设计模式(7)--享元模式
2021-06-30
MySQL数据库从入门到实战应用(学习笔记一)
2021-06-30
MySQL数据库从入门到实战应用(学习笔记二)
2021-06-30
种树:二叉树、二叉搜索树、AVL树、红黑树、哈夫曼树、B树、树与森林
2021-06-30
【C++】攻克哈希表(unordered_map)
2021-06-30
转:【答学员问】- 该如何根据岗位学习相关技能
2021-06-30
转:【答学员问】有什么经验教训,是你在面试很多次之后才知道的?
2021-06-30
消息队列:解耦、异步、削峰,现有MQ对比以及新手入门该如何选择MQ?
2021-06-30
【奇技淫巧】-- 三角形最小路径和
2021-06-30
【小技巧】argc和argv的用法
2021-06-30
学不下去了怎么办?
2021-06-30
二叉树的前中后序遍历(迭代法)(带动画)
2021-06-30
【小技巧】【XShell】【Xftp】Windows桌面与Linux虚拟机互传文件
2021-06-30
【redis入门】Centos下安装redis
2021-06-30
【redis入门】redis安装后相关知识串讲
2021-06-30
【redis】来吧,展示一下redis 发布-订阅模式
2021-06-30
当下热点词再学:redis缓存预热、更新、降级,限流
2021-06-30