Java知识总结-12

hql 查询

内连接:
from Entity inner join [fetch] Entity.property
忽略fetch 关键字,我们得到的结果集中,每行数据都是一个Object 数组
fetch表名表明”右表”对象读出后立即填充到对应的“左表”对象中。
左外连接:
from Entity left join [fetch] Entity.property
session.createQuery("from District d left join fetch d.streets s");
Hibernate的右外联接语法如下
from Entity right join [fetch] Entity.property
from District d right join fetch d.streets s

查询单个字段:
也就是需要的数据只是实体对象的某个属性,HQL也可以简单的做到
String hql =“select s.name from Street s”;
List.get(0).getClass()
对于实体单个属性的查询,Hibernate返回的对象都是该属性的类型

查询多个字段:
取了id和name的属性内容。返回的List对象中,每个条目都是一个对象数组(Object[]),每个Object数组中依次保存我们所获取的属性数据。
经验:为了使返回的结果更加符合面向对象风格,可以通过在HQL中动态构造对象实例的方法对数据进行封装。
可以采用如下HQL语句:
“select new Street (id,name) from Street“
这样返回的List对象中将保存Street对象。但必须在Street类中添加一个以id和name属性为参数的构造方法

distinct:去重

什么是缓存
在磁盘上的数据放到内存中一份,我们读取的时候先从缓存中读取,没有再去磁盘上找

Hibernate缓存作用
为了降低应用程序对物理数据源访问的频次,从而提高应用程序的运行性能

缓存分类
一级缓存(内部缓存)Session:对象
二级缓存:SessionFactory:对象

一级缓存介绍:
一级缓存又称为“Session的缓存”,它是内置的,不能被卸载 在第一级缓存中,采用的是Key-Value的MAP方式来实现的。在缓存实体对象时,对象的主关键字ID是MAP的Key,实体对象就是对象的值。所以说一级缓存是以实体对象为单位进行存储的。由session 自动管理
,使用同一 session 查找同一对象时,只对数据库查询一次--使用 key-value 形式存储对象, key 是 oid ,value 是对象,不能被卸载 (ehcath)

二级缓存作用
二级缓存又称为“SessionFactory的缓存”,由于SessionFactory对象的生命周期和应用程序的整个过程对应,因此Hibernate二级缓存是进程范围或者集群范围的缓存,有可能出现并发问题,因此需要采用适当的并发访问策略 默认关闭 使用第三方插件
sessionFactory 缓存(二级缓存):
hql 查询的 list 方法 : 只会从三级缓存中查询 不会从 1 2 级缓存中查询
iterate 方法 会使用 1 2 缓存 ,不会使用三级缓存 先查询所有ID 用到再查询得到 类

配置二级缓存
1.首先导入ehcache.jar二级缓存包。
2.然后,在 src 下添加ehcache.xml配置,
3.同时,在hibernate.cfg.xml中启用二级缓存
<property name="hibernate.cache.use_second_level_cache"> true</property>
<property name="hibernate.cache.provider_class"> net.sf.ehcache.hibernate.EhCacheProvider</property>。
4.:指定使用二级缓存缓存哪种类型的对象,在hbm.xml中添加<cache region="sampleCache1" usage="read-only"/>

Hibernate数据库访问的步骤:
1)读取并解析配置文件
Configuration conf = new Configuration().configure();
(2)读取并解析映射文件,创建SessionFactory
SessionFactory sf = conf.buildSessionFactory();
(3)打开Session
Session session = sf.openSession();
(4)开始一个事务(增删改必须,查询操作可选)
Transaction tx = session.beginTransaction();
(5)数据库操作。
session.save(user);//或者其他操作
session.save(tea);
(6)提交事务(回滚事务)
tx.commit();//tx.rollback();
(7)关闭session
session.close();

持久化:
我们以面向对象的方式组织程序,瞬时的数据也以对象的形式存在,而持久的数据多保存在关系型数据库中。所以,在通常情况下,持久化要完成的操作就是把对象保存到关系型数据库中,或者把关系型数据库中的数据读取出来以对象的形式封装。

模块测试:
添加junit需要的jar包
在测试方法的上方写入@Test
Outline视图选择要执行的Test方法右键run as 选择junit Test

配置文件示例

实体类:
<hibernate-mapping>
<class name="cn.jbit.houserent.bean.User" table="users" schema="jbit">
<id name="id" type="java.lang.Integer">
<column name="id" />
<generator class="native" />
</id>
<property name="password" type="java.lang.String" >
<column name="password" />
</property>
<property name="telephone" type="java.lang.String" >
<column name="telephon” />
</property>
<property name="username" type="java.lang.String" >
<column name="username" />
</property>
</class>
</hibernate-mapping>

总配置文件; 名字必须是 hibernate.cfg.xml
<hibernate-configuration>
<session-factory>
<property name="dialect">
org.hibernate.dialect.MySQLDialect
</property>
<property name="connection.url">
jdbc:mysql://localhost:3306/test
</property>
<property name="connection.username">root</property>
<property name="connection.password">dgt</property>
<property name="connection.driver_class">
com.mysql.jdbc.Driver
</property>
<property name="myeclipse.connection.profile">my</property>
<property name="show_sql">true</property>
<mapping resource="com/bawei/bean/ZUserrole.hbm.xml" />
<mapping resource="com/bawei/bean/ZUser.hbm.xml" />

</session-factory>
</hibernate-configuration>

**********************
lizy 配置对象的加载模式 lizy="true" 即时加载
cascade 是否级联操作 all/delete/none/saveAndUpdate
inverse 是否由one方主动管理外键 true 由多方管理外键

查询
全部 得到对象
一列 得到(字符串)集合
多列 得到对象数组集合 得到对象
条件查询
占位 数字从 0 开始
命名参数绑定
封装参数绑定 setproperties()

时间: 2024-10-25 17:09:43

Java知识总结-12的相关文章

java 知识收集

1,若方法传入的对象参数为空,则在方法中改变参数并不会改变声明的对象 public void setList(List<String> list){ list = new ArrayList<String>() ; } @Test public void t4(){ List<String> list = null ; setList(list); System.out.println(list );//输出 null } 2,不要再foreach遍历的时候删除 jav

java知识查漏补缺

一.重写(override)和重载(overload)的区别 二者除了名字相似,其实没什么联系 范围不同:重写发生在同一个类的不同方法之间.重载发生在父类和子类自荐. 前提: 重写要求:方法名相同,参数列表不同,对于返回值类型不要求相同. 重载要求:方法名形同,参数列表也相同.重载是实现多态的关键,注意如果父类中的方法是private类型,那么子类中对应方法不算重载,而相当于是定义了一个新方法. 二.final的用法 修饰类:该类不能被继承 修饰方法:该方法不能被重写 修饰属性:该属性初始化后不

Java简明教程 12.多线程(multithreading)

单线程和多线程 关于它们的区别,zhihu上有一个回答,我认为十分不错,如下: 1. 单进程单线程:一个人在一个桌子上吃菜. 2. 单进程多线程:多个人在同一个桌子上一起吃菜. 3. 多进程单线程:多个人每个人在自己的桌子上吃菜. 多线程的问题是多个人同时吃一道菜的时候容易发生争抢.例如两个人同时夹一个菜,一个人刚伸出筷子,结果伸到的时候已经被夹走菜了.此时就必须等一个人夹一口之后,在还给另外一个人夹菜,也就是说资源共享就会发生冲突争抢. 例子: 多线程: 浏览器浏览一个页面,里面有很多图片,多

Java笔记(12)

SQL基本部分: 1.数据库操作相关SQL ---- database 创建数据库 create database 数据库名称; ------ 在sql后通过 character set 指定数据库本身字符集,如果没有指定将服务器默认 * 服务器默认字符集 mysql安装目录/my.ini [mysqld] default-character-set 查看当前有哪些数据库 show databases; 修改数据库(修改数据库字符集) 数据库字符集存放mysql安装目录/data/数据库文件夹/

Java知识简介与环境变量配置问题

一.在学习一门语言中,不仅需要掌握其语法结构,开发平台以及环境也是很重要的.在开始Java学习之前首先对其进行压缩包的下载安装,以及开发平台环境下载安装.基于此下面文章就此展开: 1.        下载并安装JDK包,然后进行快速正确安装操作.(具体安装步骤网上很多,不在赘述.) 2.        安装成功后,需要对其进行环境变量配置,这一点有点特别,特别针对C语言.C#语言开发的同学更应该注意. 环境变量配置步骤如下: 打开:计算机属性->高级->环境变量选项卡->系统变量->

iOS开发基础知识--碎片12

iOS开发基础知识--碎片12 1:Delegate运用 .h #import <UIKit/UIKit.h> @protocol FilterHeaderViewDelegate <NSObject> @required -(void)filterHeaderViewMoreBtnClicked:(id)sender; @end extern float CYLFilterHeaderViewHeigt; @interface FilterHeaderView : UIColle

Java 集合系列 12 TreeMap

java 集合系列目录: Java 集合系列 01 总体框架 Java 集合系列 02 Collection架构 Java 集合系列 03 ArrayList详细介绍(源码解析)和使用示例 Java 集合系列 04 LinkedList详细介绍(源码解析)和使用示例 Java 集合系列 05 Vector详细介绍(源码解析)和使用示例 Java 集合系列 06 Stack详细介绍(源码解析)和使用示例 Java 集合系列 07 List总结(LinkedList, ArrayList等使用场景和

java在线聊天项目 实现基本聊天功能后补充的其他功能详细需求分析 及所需要掌握的Java知识基础

补充聊天项目功能,做如下需求分析: 梳理项目开发所需的必要Java知识基础 GUI将使用更快速的swt实现 SWT(Standard Widget Toolkit) Standard Widget Toolkit是一个开源的GUI编程框架,与AWT/Swing有相似的用处,著名的开源IDE-eclipse就是用SWT开发的. 在SWT之前,Sun已经提供了一个跨平台GUI开发工具包就是AWT (Abstract Windowing Toolkit). swt开发包下载地址 链接: https:/

Java知识图谱(附:阿里Java学习计划)

摘要:     本文主要描绘了Java基础学习过程,给出Java知识结构图,以及阿里Java岗学习计划,对Java学习爱好者.准备及将要从事Java开发方面的同学大有裨益. 温馨提示:     由于CSDN对图片的压缩,导致图片观看效果不理想,建议大家通过右键"在新标签页打开图片"进行观看或直接把图片下载下来观看. JVM 1. 内存模型( 内存分为几部分? 堆溢出.栈溢出原因及实例?线上如何排查?) 2. 类加载机制 3. 垃圾回收 Java基础 什么是接口?什么是抽象类?区别是什么