Hibernate

Hibernate——建立第一个hibernate项目 背景:今天学习了考研内容。 阅读详情

1:Hibernate是什么?

Hibernate是对JDBC进行轻量级封装的ORM框架,在项目中处于持久层的位置;即便不是在web项目中,java application程序也可以使用;也可以使用Hibernate,它跟Struts2不一样,Struts2是基于MVC的web层框架,必须用在web项目中

 

ORM解释:object relationship mapping(java程序中都是对象,数据库是关系类型的,两者类型不匹配,要想把对象存进关系数据库,就得出现一种新技术,把对象转换为关系型数据,存进数据库,Hibernate只是ORM技术的一种,还有iBatis)

 

PO类:persistent Objects 持久化类

 

持久化:就是将数据保存起来,要么存在文件中,要么存在数据库中;Hibernate的持久化就是将java对象保存到数据库中;

 

2:为什么要使用Hibernate?

如果现在没有Hibernate,那么之前的项目要更换数据库(从mysql-àOracle),那么业务逻辑层的代码就得重新编写SQL语句,另外JDBC使用PreparedStatement来预编译SQL语句,其中参数用?表示,然后set,这样字段多的话,比较麻烦;第三点:一般的程序员希望只关心业务逻辑层,而不去关心你的项目中到底使用了什么类型的数据库

现在出现了Hibernate的好处:

(1)   使用HQL语句代替SQL语句

(2)   使用QueryByParams()方法,将要操作的字段存放在String[]params中,操作更方便

(3)   分层更清晰,使得程序的耦合性更低

(4)   使程序员专注于业务流程,不用考虑底层的数据库

(5)   将关系数据库转化为java对象,让程序员将更多的经历放在面向对象的研究上

(6)   使用Hibernate之后,即便项目想更换数据库,那么只需要修改配置文件中5个属性,DriverClassName,Url,user,password,Dialect即可

 

**hibernate虽然与数据库无关,但是切换数据库的时候,DriverClassName url user password ,Dialect都得在配置文件中进行修改

 

3:如何使用(学习)Hibernate?

(1)   Hibernate的两个配置文件

hibernate.cfg.xml---àhibernate连接数据库的配置文件

user.xml  -àhibernate的对象关系映射文件

 

hibernate.properties也是一种配置文件,但是现在常用的还是xml文件

 

(2)   PO类的编写

 

(3)   处于DAO层的6个接口与类

Configuration---Class

sessionRegistry  ----Interface

sessionFactory   ---Interface

session           --Interface

Transaction   ---interface

Query            --Interface

 

 

 

       4:Hibernate的创建步骤

(1)   先写PO类(domain类,javabean,POJO)-àmapping文件-àDB

(2)   先创建DB,用工具生成PO类跟Mapping文件;

小项目使用第一种就可以,大项目,一定得先设计好数据库

 

5:使用Hibernate的9个核心组件

(1)   导入Hibernate的jar包

(2)   编写PO类

(3)   写Hibernate.cfg.xml文件跟use.xml文件

(4)   编写测试类,使用6个接口跟类

 

 

 

(1)      先写PO类,User.java

Po类的条件

(a)   要 implements Serializable接口

(b)   类名跟表名一致,首字母大写

(c)   表中的字段要跟类中的成员属性想对应,且都是private的,id要用Integer类型,或者Long类型(大项目中的,小项目就有Integer就行)

(d)   无参的构造函数

(e)   Setter getter 方法

 

 

import java.io.Serializable;

 

@SuppressWarnings("serial")

publicclass User implements Serializable {

 

    private Integer id;

    private String username;

    private String password;

 

    public User() {

 

    }

 

    public User(Integer id, String username, String password) {

       super();

       this.id = id;

       this.username = username;

       this.password = password;

    }

 

    Setter,getter略。。。。。。。

 

}

 

 

hibernate.cfg.xml文件【用来配置连接数据库的参数,以及配置映射文件】(Hibernate默认的文件名,也可以另取它名,单是在Configurationconfiguration = new Configuration().configure();)中的configure()必须指定

 

 

<?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>

       <!--连接mysql的配置文件,这里使用mysql-->

       <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>

       <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>

       <property name="hibernate.connection.url">jdbc:mysql:///hibernate_test</property>

       <property name="hibernate.connection.user">root</property>

       <property name="hibernate.connection.password">system</property>

      

       <!-- 连接Oracle的配置属性-->

       <!--

       <propertyname="dialect">org.hibernate.dialect.OracleDialect</property>

       <propertyname="connection.url">jdbc:oracle:thin:@127.0.0.1:1521:orclhsp</property>

       <propertyname="connection.driver_class">oracle.jdbc.driver.OracleDriver</property>

       <property name="connection.username">scott</property>

       <propertyname="connection.password">tiger</property>

       -->

      

      

       <!-- 在控制台输出sql语句-->

       <property name="hibernate.show_sql">true</property>

       <!--格式化sql语句-->

       <property name="hibernate.format_sql">true</property>

 

<!--自动建表,有uapdate,create等属性,

Create:创建并替换原有的表

Update:不替换原有的表,只更新数据

Crate-drop:在sessionFactory关闭的时候,表也会被删除

Validate:验证数据库表结构跟mapping文件的结构是否一致

-->

       <property name="hibernate.hbm2ddl.auto">update</property>

      

       <mapping resource="user.xml"/>

    </session-factory>

</hibernate-configuration> 

 

 

User.xml文件【对象关系的映射文件,指定java对象跟数据库的映射关系】

 

<?xml version="1.0"encoding="utf-8"?>

<!DOCTYPE hibernate-mapping PUBLIC

    "-//Hibernate/Hibernate Mapping DTD 3.0//EN"

    "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">

   

<hibernate-mapping package="test.entity">

    <class name="User" ><!--类名与表名一致,不需要再指定table属性-->

       <id name="id">

    <!--主键生成策略,此处使用native通用的,还有序列、自增等其他类型 -->

           <generator class="native"/>

       </id>

       <property name="username"/>

       <property name="password"length="32" />

    </class>

</hibernate-mapping>   

 

 

Test.java文件

 

publicclass Test {

 

    publicstaticvoid main(String[] args) {

      

       //读取hibernate.cfg.xml的配置文件,并完成初始化

       Configuration configuration = new Configuration().configure();

       //创建serviceRegistry对象

       ServiceRegistry serviceRegistry = newServiceRegistryBuilder().applySettings(configuration.getProperties()).buildServiceRegistry();

       //创建sessionFactory,比较耗费资源,应该设计成单例模式

       SessionFactory sessionFactory = configuration.buildSessionFactory(serviceRegistry);

       //创建session,用来操作save,update,delete

       //在后面的SSH框架整合中,session的创建使用sessionFactory.getCurrentSession()来创建,原因:

       //openSession()打开session,需要手动关闭,getCurrentSession()自动关闭,不需要手动关闭

       Session session = sessionFactory.openSession();

       //开始一个事务,Hibernate的事务是需要自动commit的,一执行beginTransaction(),就会调用JDBC的setAutoCommit(false)方法    Transaction transaction =session.beginTransaction();

 

       User user = new User(null, "张三", "123");

      

       session.save(user);

       transaction.commit();

      

       session.close();

       //sessionFactory.close();不应该关闭,每次打开耗费资源

      

    }

   

}

 

 

*******在最后的项目中,使用的是Annotation的方式来替代Hibernate的两个配置文件

Hibernate.cfg.xml文件内容放在application.xml文件中,对象映射文件User.xml则删除,在

PO类中用Annotation代替;

 

 

(1)      hibernate.cfg.xml:配置与数据库的连接参数跟对象关系文件的映射

(2)      user.xml指定PO类与表的对应关系

(3)      PO类含义,上面提到过

(4)      Configurationà读取hibernate.cfg.xml的配置信息,以及加载驱动,连接数据库

(5)      ServiceRegistry()与configuration一起创建sessionFactory

 

 

(6)      sessionFactory

(用来生产session,一个session实例代表与数据库的一次操作;一个DB对应一个sessionFactory,要设计成单例)

 

  (a) sessionFactory可以缓存SQL语句

(b) sessionFactory获取session的两种方式,openSession(),getCurrentSession();两者区别

 

1.      通过 getCurrentSession() 获取的session在事务提交后,会自动关闭,通过openSession()获取的session则必须手动关闭,session.commit();

2.      openSession() 是获取一个新的session;getCurrentSession () 获取的是在同一个线程中的session,这样可以利于事务控制;SSH整合中的声明式事务处理,用到的就是getCurrentSession();

3.      对数据库进行查询,openSession()方式不需要提交事务,getCurrentSession()进行数据查询必须得开启事务,而且需要transaction.commit();

4. Session是线程不同步的(不安全),因此要保证在同一线程中使用,就需要用getCurrentSessiong()。

 

 

 

(7)      Session接口

(a)   Session一个实例代表与数据库的一次操作(crud)

(b)   Session是持久化管理器,与持久化操作相关的接口(save,delete,update,get/load);

 

*******session.get()跟session.load()的区别

(1)   如果查询不到数据,get 会返回 null,但是不会报错, load 如果查询不到数据,则报错ObjectNotFoundException;

(2)   使用load()去查询数据,先去一级缓存跟二级缓存中去查询,如果查询到了,则返回一个实体类的代理对象;如果在缓存中没有查询到数据,而用户也不去使用数据,那么load()方法也不会去DB中查询,就这样等着,如果用户要使用这个对象了,load()方法再去DB查询(这时会发select语句),并将数据保存在缓存中;这样的方式称之为lazy懒加载的方式;

****(取消lazy的方式,在配置文件中将值设为false)*********

(3)   使用get()方式去查询,也是先到一级缓存,二级缓存中查询,如果有,就返回实体对象;没有的话,就立即向DB发送select语句去查询,查询到了,返回给用户,没有查询到,则返回NULL;

 

 

 

(8)   Transaction-à接口【悲观锁,乐观锁(见后面)】

Hibernate的事务是由session跟Transaction接口完成的

Transactiontx=session.beginTransaction();

       Tx.commit();

       Tx.rollback();

 

更改上面的Test.java文件

 

public classTest {

 

       @SuppressWarnings("unchecked")

       publicstatic void main(String[] args) {

             

              //读取hibernate.cfg.xml的配置文件,并完成初始化

              Configurationconfiguration = new Configuration().configure();

              //创建serviceRegistry对象

              ServiceRegistryserviceRegistry = newServiceRegistryBuilder().applySettings(configuration.getProperties()).buildServiceRegistry();

             

              SessionFactorysessionFactory=null;

              Sessionsession=null;

              Transactiontransaction=null;

              try{

                     sessionFactory=configuration.buildSessionFactory(serviceRegistry);

                      session=sessionFactory.getCurrentSession();

                      transaction=session.beginTransaction();

                     //增强for循环取

Query query=session.createQuery("from User");

                     List<User>list=query.list();

                     for(Useruser:list){

                            System.out.println(user.getUsername());

                     }

                     //迭代器取

                     Iterator<User>iterator=query.iterate();

                     while(iterator.hasNext()){

                            Useruser=iterator.next();

                            System.out.println(user.getUsername());

                     }

                    

                     transaction.commit();

                    

              }catch (Exception e) {

                     e.printStackTrace();

                     if(transaction!=null) {

                            transaction.rollback();

                     }

                     thrownew RuntimeException(e.getMessage());

              }finally{

                     if(session!=null && session.isOpen()) {

                            session.close();

                     }

              }

             

             

             

       }

      

}

 

 

 

 

(9) Query --à接口【HQL语句-à实体对象关联映射(见后面)】

Queryquery=session.createQuery(“HQL语句”);

      

query.list();query.iterator()区别

       session,get(),session.load()的区别;后者根据id进行查询

      

 

HQL语句

 

(A) 查询某个实体对象的全部属性HQL--àfrom User

//增强for循环方式

          List<User> list=session.createQuery("from User").list();

          for (User user : list) {

            System.out.println(user.getUsername());

         }

          //Iterator方式

          Iterator<User>iterator=session.createQuery("fromUser").iterate();

          while(iterator.hasNext()){

             User user=iterator.next();

             System.out.println(user.getUsername());

          }

 

 

 

(B)  查询某个实体对象的部分属性【投影查询】 

HQL-àselect username,useraddr from User;

 

//下面的代码会报错,username,userid,不能转换成一个User对象

            List<User> list2=session.createQuery("select username,userid from User").list();

            for (User user:list) {

              System.out.println(user.getUsername());

           }

            

            //下面的可以

           List list3=session.createQuery("select username,useraddr from User").list();

           for (int i = 0; i <list3.size(); i++) {

              //将数据封装成对象数组,此时的list3中存放的都是object[]对象。

              Object[] objs=(Object[]) list3.get(i);

              System.out.println(objs[0].toString());

           }

           //要将数据进行二次封装才可以使用,没有第一种方式好;尤其在实体对象关联查询的时候,应当将全部属性都查出;

       

 

对象的三种状态

 

主要的依据是:

1. 看该对象是否处于session的管理之下

2, 看在数据库中有没有对应的记录

瞬时态: 没有session管理,同时数据库没有对应记录

持久态: 有session管理,同时在数据库中有记录

脱管态/游离态: 没有session管理,但是在数据库中有记录.

 

 

 

 

 

 

 

 

实体对象

 

单向一对多

class Channel{

@onetomany

@joincolumn(name=”channel_id”)

private set<Article> articles=new HashSet<Aritcle>();   

}

 

单向多对一【韩顺平第一讲,多对一没有set<>集合,get()方法取出的只是多端中的普通成员属性值,而关联的另一个实体对象的值是无法取到的,若想取到关联的那一端,必须关闭lazy】

class Aricle{

private Channel channel;

}

 

双向一对多【韩顺平第二讲,两个实体类都关联了对应的entity,只要根据id就可以查询出全部】

Class Channel{

       Privateset<Article> articles=new HashSet<Article>();

}

class Article{

       privateChannel channel;

       privateAdmin admin;

}

 

 

基于主键的一对一关系

 

 

基于外键的一对一关系(外键要unique)

 

 

多对多关系【分解成一对多跟多对一的关系】

 

级联操作

 

 

 

 

 

(10)缓存与优化

1:懒加载:---àload()方法中,单向多对一中:代理机制

 

2:缓存:一级缓存(session),二级缓存(sessionFactory),查询缓存

缓存的好处:减少对数据库的访问???

 

一级缓存(session缓存)

 

get()获取数据的时候,先到一级缓存中查找,如果有的话,就返回给客户,没有的话,就会发出select语句,去查询DB,并将结果放进一级缓存中;

 

save()方法为什么还有缓存呢?因为以后的程序可能会用带save()保存的对象,所以为了方便就放进一级缓存中,然后transaction.commit();事务提交的时候,才会把数据添加到数据库中

----à什么样的操作会向一级缓存放入数据?

Save(),upadate(),saveorUpdate(),list(),iterator(),get(),load()

----à什么样的操作会向一级缓存取出数据?get load list uniqueResult

get load会从数据库中取出数据

list(),uniqueResult()不会从缓存中取出数据

证明方法:show_sql,查看select语句

 

Session缓存的生命周期

getCurrentSession()或者openSession()开始,到session.close()结束

 

       session缓存的清除

session.evict(对象名)

session.clear();

 

 

 

二级缓存(sessionFactory)

 

为什么要有二级缓存?

一级缓存的内存有限以及生命周期短,使用二级缓存来拟补这个问题

 

二级缓存生命周期长,可以存在于内存中,也可以存在于硬盘上

 

二级缓存的配置(hibernate.cfg.xml文件中配置)

       <!-- 启动二级缓存 -->

       <propertyname="cache.use_second_level_cache">true</property>

       <!-- 指定使用哪种二级缓存 -->

       <propertyname="cache.provider_class">org.hibernate.cache.OSCacheProvider</property>

 

特别说明二级缓存策略:

       1. read-only

       2. read-write

       3. nonstrict-read-write

       4. transcational

       -->

       <class-cacheclass="com.hsp.domain.Student" usage="read-write"/>

 

 

主键增长策略

increment 自增

identity 自增

sequence (Oracle)

native 通用的

foreign 外键 

uuid(主键只能是String类型)

assigned

 

 

什么情况下不适合使用Hibernate??

在大型项目中,数据访问量大的情况下不适用

对Hibernate不熟悉的情况下不适用

 

hibernate还有人用吗 🏆作者简介:哪吒,优快云2022博客之星Top1、优快云2021博客之星Top2、多届新星计划导师✌、博客专家💪,专注Java硬核干货分享,立志做到Java赛道全网Top N。🏆本文收录于,,目前已经700+订阅,优快云最强Java专栏,包含全部Java基础知识点、Java8新特性、Java集合、Java多线程、Java代码实例,理论结合实战,实现Java的轻松学习。🏆姐妹篇,,包含面向对象、基本数据类型、数组、继承和多态、泛型、枚举等Java基础知识点。🏆姐妹进阶篇, 阅读详情

相关推荐

关于Hibernate Cache

近段时间正好在使用HIBERNATE与数据库打交道. 由于使用环境中读操作占了相当大的比例, 所以想起用HIBERNATE的CACHE功能. 在论坛里搜了一把, 发现了不少关于CACHE的帖子. 但好像都是关于JCS的, 那时似乎还没有QueryCache. 所以就把这两天自己尝试的内容记了下来. Cache In Hibernate HIBERNATE中的CACHE有两级. 一级是在Sessio

sunlen的专栏(编程技术探讨) 4063

UFS Hibernate介绍--代码部分

一 . UFS Hibernate简介

guozhidixian的博客 3858

CAN收发器选型避坑指南:TJA1051T与TJA1051T/3的硬件兼容性问题实录

本文详细解析了CAN收发器TJA1051T与TJA1051T/3的硬件兼容性问题,通过实测数据和故障案例揭示了VIO引脚的关键差异及其对系统的影响。提供从选型到验证的完整防坑方案,帮助开发者避免常见设计错误,确保CAN总线通信的稳定性。

weixin_42715608的博客 459

UFS Hibernate介绍--协议部分

一. UFS Hibernate 简介 Hibernate是一种Unipro的状态,这个Hibernate 进出的流程是在M-PHY定义的。 Hibernate 是一种 UniPro 状态,其中 PHY 处于 HIBERNATE_STATE,UniPro 堆栈保持 只有最小的一组功能处于活动状态。 UniPro 堆栈保留每个堆栈层定义的最小状态。 在休眠期间,UniPro 堆栈无法进行应用级数据传输/通信, 并且应用程序级接口的原语 T_CO_SAP 具有未定义的行为。 中 休眠,DME 继续可供 DM

guozhidixian的博客 3940

PV-RCNN实战:如何在KITTI数据集上实现3D目标检测(附完整代码解析)

本文提供了在KITTI数据集上实战PV-RCNN 3D目标检测的完整指南,涵盖环境配置、数据预处理、模型训练与评估全流程。通过详细的代码解析和调参技巧,帮助读者掌握这一融合点与体素优势的经典3D目标检测模型,并实现从理论到实践的跨越。

weixin_29098391的博客 404

提供一个微信投票刷票的js代码

最近几天,有个朋友找我去写一个脚本帮他 在微信上刷票、微信投票刷票,我大概看了一下,本次微信投票刷票其实就是根据微信的openid来限制,每个openid只能投三次票的限制。上图可以看出,其实只要openid,和toopenid即可,openid是自己的微信id,toopenid是投票对象的微信id,那我们定时修改openid即可给某一个人刷投票。把这段代码复制到浏览器F12之后的console里,直接回车即可开始微信投票刷票(刷新或关闭浏览器即可停止刷票)//生成随机的ip地址。

qq_858865388专业提供快速微信投票教程攻略和方法的博客 2万+

【hibernate进阶】hibernate搭建开发环境+实例讲解

本篇博客将带着大家以一个简单的实例来学习hibernate项目。 1、创建java项目 2、创建User Library,加入依赖包 * HIBERNATE_HOME/lib/*.jar * HIBERNATE_HOME/hibernate3.jar * 加入数据库驱动(mysql驱动) 具体的操作步骤参考我的上一篇博客:【hibernate进阶】如何在myeclipse中添加ja

陈晓婵 8424

【架构师面试-缓存与搜索-1】-缓存与缓存置换策略源码实现

1:什么是缓存 缓存:加速数据访问的存储,降低延迟(latency),提升吞吐量(Throughput)的利器。 1:缓存演进历史 1. 查库 2. ConcurrentHashMap 3. LRU 4. Guava Cache 5. 分布式缓存(redis,MemCache) 6. 多级缓存 2:在什么地方加缓存 缓存对于每个开发者来说是相当熟悉了,为了提高程序的性能我们会去加缓存,但是在什么地方加缓存,如何加缓存呢? 举个栗子:假设一个网站,需要提高性能,缓存可以放在浏览器,可以放

chongfa2008的博客 6440

Springboot整合Hibernate拦截器EmptyInterceptor

Springboot整合Hibernate拦截器EmptyInterceptor

2017年 5628

基于STM32姿态解算-正点原子ATK-IMU901模块标准库开发——正点原子串口角度传感器模块十轴IMU加速度气压计陀螺仪_资料编号29

购买了正点原子的ATK-IMU901模块后,发现例程给的是HAL库的,本项目将HAL库例程转换为库函数版本(基于STM32)。实战开发,亲测无误。

嵌入式阿齐Archie 3865

图像拼接——ITKMontage

ITKMontage是一个开源的、高性能的图像拼接软件模块。它的核心任务是将多张部分重叠的图像瓦片(Tiles)拼接成一幅完整的大图,专为处理材料显微科学中产生的大规模、高分辨率图像而设计。针对ITKMontage模块中示例进行了修改,解决了没有文件TileConfiguration.txt的情况,以及使用中的一些BUG。ITKMontage可以单独编译,也可以作为ITK的一个模块进行编译,介绍后一种的cmake设置。本文介绍使用ITKMontage模块进行图像拼接的方法。此处省略编译后的库配置。

2301_79131410的博客 102

hibernate实战

离下班还有半个小时,写这个东东吧。 今天写了个hibernate实例。 第一步:向工程中添加hibernate的lib           * HIBERNATE_HOME/hibernate3.jar           * HIBERNATE_HOME/lib/*.jar           * 数据库 jdbc驱动 第二步:写hibernate.cfg.xml文件如下,这里有连接数据库,设置数据库方言,注册类映射文件User.hbm.xml(后面会提到)   jdbc:m

bluekeyv的专栏 842

YOLOv12涨点改进 | 全网独家首发Conv改进篇 | Arxiv 2025 | 引入一种新的WConv加权卷积改进YOLOv12,显著提升其特征提取能力和目标检测精度

本文提出了一种新型加权卷积(WConv)模块,通过引入最优密度函数动态调整邻域像素权重,显著提升了YOLOv12目标检测性能。WConv在保持参数数量不变的情况下,提高了模型精度(VGG准确率提升10%)、增强了小目标检测能力,并改善了多尺度特征提取。文中详细介绍了模块原理、网络结构改进方法,并提供了核心代码实现和yaml配置文件。实验表明,该方法在图像任务中最高可降低53%的损失,虽然会带来11%的时间开销,但具有优异的鲁棒性。该技术可广泛应用于2D/3D图像处理领域。

Ai缝合怪、助力小伙伴高效发论文 216

Hibernate批量处理海量

最近一直常常看到别人javaeye网站上看到别人在问在hibernate怎么样处理海量数据,怎么样提高性能,本人在优快云博客上看到这篇好的文章,并结合本人一一验证 确实如作者所说 故拿出来和大家分享。希望对初学HIBERNATE框架的朋友有所帮助。  Hibernate批量处

雪禅子 4849

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

有关HIBERNATE

 有关HIBERNATE继承实现的三种策略 单表继承。每棵类继承树使用一个表(table per class hierarchy)  具体表继承。每个子类一个表(table per subclass)  类表继承。每个具体类一个表(table per concrete class)(有一些限制) 单表继承     双向关联  概念:双向关联允许通过关联的任一端访问另外一端。

summer的专栏 684

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

HIBERNATE是什么

无意中,一个朋友问我HIBERNATE是什么。这个问题让我很震惊。学了这么久。用了半年的HIBERNATE,对它就像自己的孩子。可是我连它的是什么我都不是很清楚。我能说HIBERNATE就是框架吗?这样也太让HIBERNATE默默无闻了。最起码框架这个词也太抽象了,讲给任何没接触过HIBERNATE的人,他们都不会理解。于是我去网上COPY了一份。希望大家好好理解。Hibernate是一个开放

chowqingbao1的专栏 1464

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

【HIbernate】hibernate 最简单的例子

做一个最简单的hibernate的例子 可以保存数据环境:      Myeclipse 6.5, hibernate3.2 1 先倒入数据驱动包和hibernate核心包 还有 要用到的相关包   所需包有如下:       hibernate目录下:          * hibernate3.jar   hibernate目录/lib/required目录下:      

水一方~! 4259

JAVA框架 / HIBERNATE / HIBERNATE系列教材 (一)- 基础 - HIBERNATE 基于实例的入门教程

JAVA 框架 / HIBERNATE / HIBERNATE系列教材 (一)- 基础 - HIBERNATE 基于实例的入门教程 #原文链接在这里 使用JDBC做数据库相关功能开发会做很多重复性的工作,比如创建连接,关闭连接,把字段逐一映射到属性中。 Hibernate把这一切都封装起来了,使得数据库访问变得轻松而简单,代码也更加容易维护。 第一次使用Hibernate会有一个比较多步骤的配置过...

weixin_44092440的博客 324

Java中的Hibernate是什么?如何使用Hibernate

总之,Transaction是Hibernate架构中非常重要的组件,它确保了Java应用程序与数据库之间的顺畅通信,并提供了许多其他有用的功能。总之,Session是Hibernate中非常重要的组件,它为开发人员提供了一种简单而强大的方式来管理Java应用程序与关系数据库之间的交互,并使得进行CRUD操作和数据检索变得更加容易和高效。总之,实体类应该是与Hibernate框架兼容的Java类,它应该定义数据库表中的列,并提供用于访问和操作这些列的方法。实体类应该包含与数据库表中的列对应的属性。

2301_77769537的博客 3669

将Hibernate配置到Weblogic JNDI上的详细步骤

一、首先需要把Hibernate用到的jar包和配置文件都放到Weblogic能够搜索到的CLASSPATH路径上。单单这一步就有很多人很迷茫,其实去仔细看看Weblogic的启动脚本文件startWeblogic.cmd和startWLS.cmd,我想大部分人都知道该怎么配置了。我机器上的有个Hibernate的项目,在D:/test/oracle目录下,该目录下的结构是:D:/test/ora

KevinAAA的专栏 1862

hibernate hibernate4详解

表名和类名不同的情况时,对表名进行配置  1 在注解中  import javax.persistence.Table; @Table(name=”TableName”)  2 在XML文件中    配置对应的table属性为相应的表名      …        字段名和属性名相同,默认为  对于annotation,如果什么注解都不写的话,相当于加了注解@Basic  实

Code-lover's Learning Notes 1559

HIBERNATE介绍

先介绍下概念:Hibernate是一个开放源代码的O/R Mapping (对象关系映射框架),它对JDBC进行了轻量级的对象封装,使Java程序员可以随心所欲的使用对象编程思维来操纵数据库。这段话是从HIBERNATE中文网上摘下来的,实际上HIBERNAMTE和JDO是处于同一层面的东西,只不过JDO在国内的名气更大点。下面这篇文章是从《hibernate中文网》上摘下来的,作为我的BLOG的

eastspy的专栏 2513

hibernate从头学,hibernate的配置

今天是第一次接触hibernate,没有学多高深的知识,只是熟悉了hibernate的导入及其基本的框架结构,及运用hibernate操作数据库的基本流程,主要hibernate配置如下:一、在Eclipse中建java project二、将hibernate需要的jar包在library中添加,以后引入library即可,主要的建立步骤为:           (1)windows-

qingkongxiaolanzhu的专栏 427

Hibernate详解

Hibernate-01简介 Hibernate 开源O/R映射框架(ORM)   分层:下层为上层提供服务 三层架构 表示层:struts  webWork JSF 业务逻辑层:spring 持久层:与业务无关 hibernate(冬眠:让对象冬眠) ibatis 数据库:   OOA:面向对象的分析 OOD:面向对象的设计 OOP:面型对象的编程   阻抗不匹配(J

荏苒夕阳的博客 1429

HIBERNATE调试工具JBOSS TOOLS

HIBERNATE调试工 ----作者Attilax , 1466519819@qq.com--- HIBERNATE TOOL.又叫HIBERNATE CONSOLE。。 目前已经包括在JBOSS TOOLS里边。。。 最新版本号 JBoss Tools (Juno) 4.0.0.Final,适合ECLIPSE 4.2(Juno)使用。。。 先打开ECLIPSE,然

attilax的专栏 2412
上一篇: Spring
下一篇: java设计模式
Java_lab
博客等级 码龄14年 4粉丝 11原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值