- 浏览: 71283 次
最新评论
文章列表
HashMap的工作原理
- 博客分类:
- JavaZZ
本文由 ImportNew - 唐小娟 翻译自 Javarevisited。欢迎加入翻译小组。
HashMap的工作原理是近年来常见的Java面试题。几乎每个Java程序员都知道HashMap,都知道哪里要用HashMap,知道Hashtable和HashMap之间的区别, 那么为何这道面试题 ...
do...While用法
- 博客分类:
- Java编程思想
public class IceCream {
private static Random random = new Random(47);
private static final String[] FLAVORS = new String[]{"A","B","C","D","E","F","G","H","I","J","K"};
publ ...
从Customer到Order,配置在<set>标签中,batch-size表示一次查询几个客户的订单,而不查询的订单数量,配置为2,表示一次查询两个客户的订单数量
<hibernate-mapping>
<class name="rock.lee.bean.Customer" table="customer" catalog="test" >
<id name="id" column="id" type="in ...
1) 当fetch 取值 join ,采用迫切左外连接 lazy 被忽略 针对 get/load 有效 如果Query , fetch="join" 被忽略, lazy 将重新生效 2) 当fetch取值 select ,产生多条SQL 查询 lazy="false" 采用立即查询 lazy="proxy" 将由Customer.hbm.xml <class> lazy 决定是延迟还是立即(由对方类级别检索策略决定)
案例一:
案例二: 案例三:
...
类级别的检索策略:
Customer c=(Customer)session.load(Customer.class, 1);
session的方法直接检索Customer对象,对Customer对象到底采用立即检索,还是延迟检索方式,通过class元素的lazy属性设定
get():默认立即检索
load():默认延迟检索
public void loadCustomertrueProxy(){
Session session=sessionFacoty.openSession();
Transaction tx=session.begin ...
多对多的实体关系模型也是很常见的,比如学生和课程的关系。一个学生可以选修多门课程,一个课程可以被多名学生选修。在关系型数据库中对于多对多关联关系的处理一般采用中间表的形式,将多对多的关系转化成两个一对多的关系。
Student类
public class Student implements Serializable {
private Integer id;
private String name;
private Integer age;
private Set<Course> courses = new HashSet<Cours ...
一个男人对应一个女人,一个女人只能属于一个男人
方式一:外键映射
Male类
public class Male implements Serializable {
private Integer id;
private String name;
private Integer age;
private Female female;
}
Male.hbm.xml,在male表中引入外键列female_id
<?xml version="1.0" encoding="UTF-8"?>
<!DO ...
数据库建表原则,在多的一方添加一个外键列,引用一的一方的主键,例如客户和订单,在订单表中增加客户编号作为外键
一对多,类对象之间的关系,在多的一方添加一个集合
class A {
B b; // 一个A对应一个B
}
class B {
A[] 、List<A>、Set<A> // 一个B 对应很多A
}
以客户与订单关系为例建立映射关系
建立客户类
public class Customer implements Serializable{
private Integer id;
private Str ...
在 Session 接口的实现中包含一系列的 Java 集合, 这些 Java 集合构成了 Session 缓存. 只要 Session 实例没有结束生命周期, 存放在它缓存中的对象也不会结束生命周期
一级缓存是存在的,通过get()查询Customer对象,查询两次ID为1的Customer对象,控制台只发送了一条SQL,并且打印c1和c2,获得的地址是一样的,可以证明Session缓存是存在的
@Test
public void testSessionExist() {
Session session = HibernateUtils.openSession( ...
瞬时态 transient:
尚未与Hibernate Session关联对象,被认为处于瞬时状态,失去引用将被JVM回收,无持久化标识OID,未与Session关联持久态 persistent:
数据库中有数据与之对应并与当前session有关联,并且相关联的session没有关闭数据库并且事务未提交,存在持久化标识OID,与Session关联脱管态 detached:
数据库中有数据与之对应,但当前没有session与之关联,脱管状态改变hibernate不能检测到,存在持久化标识OID,未与Session关联
这张图片来源于网络,只不忘了出处, ...
<id name="id" column="id" type="int">
<generator class="increment"></generator>
</id>
Hibernate通过SQL max(id)+1获得最大值,不依赖于数据库,JavaBean中ID类型必须为short、int、long,不能不为byte,多线程情况下会有并发问题
<id name="id" column="id&q ...
get():
@Test
public void testGet() {
Session session = HibernateUtils.openSession();
Transaction transaction = session.beginTransaction();
transaction.begin();
Customer c = (Customer) session.get(Customer.class, 1);
System.out.println(c);
transaction.commit();
se ...
Hibernate体系结构图:
Hiberante框架支持两种配置文件:
src/hibernate.properties:数据库连接、常用数据配置
src/hibernate.cfg.xml:数据库连接、常用数据配置、二级缓存策略、 hbm的映射、 事件(监听器 )
src/hibernate.cfg.xml可配置的参数更多,功能更加强大
Hibernate常用数据配置:
hibernate.dialect 操作数据库方言
hibernate.connection.driver_class 连接数据库驱动程序
hibernate.connect ...
使用Hibernate实现单表CRUD,数据库使用MySQL建立customer表
create database test;
create table customer (
id int primary key auto_increment,
name varchar(20),
age int,
city varchar(20)
);
创建JavaBean对象
package rock.lee.bean;
import java.io.Serializable;
pu ...