Hibernate的注意点(简单了解)

Hibernate的注意点(简单了解)

框架技术:

是一个应用程序的半成品
提供可重用的公共结构
按一定规则组织的一组组件

框架优势:
不用再考虑公共问题
专心在业务实现上
结构统一,易于学习,维护
新手也可以写出好程序

将对象保存在会话中,序列就已经生成了
对象刚实例化出来没有和session没有关系时(处于临时态,瞬时态,自由态
一但保存在session中就处于持久态(处于hibernate管理中)
只要将一个对象放到session中被拖管的对象在事物提交时,hibernate会对象进行脏检查 并生成sql语句
当session.getTransaction.commit()   执行sql语句
一但session被close()掉了(关闭),session中的对象处于游离态(可操作性比较差,一般不操作游离态对
evict(//对象)将seesion中的一个对象清除,将对象从持久态转换成游离态;
clear() 将session的所有对象清除,将对象从持久态转换成游离态;
delete() 正常将session中对象清除
象,容易报错)

session.load(实体类名.class,63)//根据ID(主键值)查询一行 select * from xxx where id=?(当63有时不会生成sql语句,当数据库中没有要查询的数据时会生成sql语句,但会报错)(对象必须处于持久态) //延时加载
session.get(实体类名.class,63)//根据ID(主键值)查询一行 select * from xxx where id=?(一定会生成sql语句,当数据库中没有要查询的数据时,不会报错,会返回null)//瞬时加载

saveOrupdate(); //括号中如果写主键值做修改,否则做保存
merge();  //作用同上,但它是忽略状态,强制保存

两表之间不管是1对多还是多对1,多的一方为外键表
<cascade ="save-update"> 级联(保存时修改外键值):save-update区分大小写,delete先删除外键表再删除主键表(级联删除)默认(none)状态下是不做级联的 all是全部做级联

inverse="ture"//由对方维护表的关联关系

多对多
D(did dname cid)
C(cid cname)
1.建立两个类
2.配置D和C的关联关系
Class D{
int did
String dname
C c  //cid 
}
Class C{
int cid
String cname
Set<D> ds=new HashSet<D>();  //表示一个C对应多个D
}
D和C是多对一的关系
<many-to-one name="c" column="cid" class="C">
C和D是一对多的关系
<Set name="ds" table="d">
<Key column="cid"/>
<one-to-many class="D">
</Set>

配置两表关系步骤:
1.先确定主外键表
                主键表即为一的一方
                 外键表即为多的一方
2.建类时
    一的一方包含一个“Set<多>”类型变量
    多的一方包含一个“一”类型变量
3.编写hbm.xml时
一的一方配置
<Set name="Set集合的变量名" table="外键表">
    <key column="主键列">
<one-to-many class="外键表对应的类">
</Set>
多的一方配置
<many-to-one name="外键对应的类中的变量" column="对应的列名" class="主键表对应的类"/>

hibernate手动开发:
(1)三个准备
            导入jar包
            准备src下的cfg.xml(核心配置文件)
            准备entity包下的数据库表对应的实体类和映射文件
(七个步骤)






hibernate快速配置:
1.配置数据库浏览器(DB Browser)
2.为项目添加hibernate支持
3.反转实体类自动生成


HQL(查询)
专门为hibernate服务
String hql="from 类名(与一个表对应的类)";//查询全部

遇到多对一就join,遇到一对多就  .
fetch是将右侧的对象放在左侧的对象中

(1)一级缓存
(2)二级缓存(不频繁做增删改的表,并且数据量不是太大的表)
(3)查询缓存
//hibernate提供的无sql语句查询
Query q=s.createQuery("from Emp where ename like '%s%'") //模糊查询
Criteria cri=s.createCriteria(Emp.class) //查询Emp类型对应的表的数据
cri.add(Restrictions.eq("empno",7369))  //按条件查询
cri.add(Restrictions.ilike("ename","%s%",MatchMode.ANYWHERE(相当于前后百分号,加了这个参数可以省略%%)))  //模糊查询(iLike忽略大小写,like区分大小写,)。
实体类都叫javaBean(javaBean是官方叫法)
lazy可以出现在set标签中,property(属性级别),class(类级别)中。(lazy=true或lazy=false,true为延时加载,false为立刻加载)
Hibernate框架




  • 发表于 2017-11-24 16:42
  • 阅读 ( 894 )
  • 分类:Java

你可能感兴趣的文章

相关问题

0 条评论

请先 登录 后评论
不写代码的码农
江南烟雨

可以跨境界的java开发攻城狮

33 篇文章

作家榜 »

  1. 威猛的小站长 119 文章
  2. Jonny 65 文章
  3. 江南烟雨 33 文章
  4. - Nightmare 33 文章
  5. doublechina 31 文章
  6. HJ社区-肖峰 29 文章
  7. 伪摄影 20 文章
  8. Alan 14 文章