A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© wujianhui 中级黑马   /  2017-12-14 13:38  /  1780 人查看  /  2 人回复  /   1 人收藏 转载请遵从CC协议 禁止商业使用本文


Hibernate中共提供了三种检索方式:HQL(Hibernate Query Language)、QBC、QBE(Query By Example)。
hibernate注解一般写在get上
@Entity 实体写在最上面
@Id主键一般放在 get方法上放在field(private)上会破坏hibernate的封装性即私有性被破坏,下面如果有@GeneratedValue表示id生成策略

设置字段的长度 @Column(name="username",length=20)
sql语句生成器有两种:SequenceGenerator 、TableGenerator
@Basic属性的默认,可有可无 有两种加载方式,LAZY和EAGER。LAZY 表示延迟加载、EAGER表示及时加载。默认为延时加载,如果属性不使用@Basic标记,属性的加载方式为默认的加载方式,(  @Basic(fetch=FetchType.EAGER))
@Table表的名字,若与实体名一致可无
@Version 注解用于支持乐观锁版本控制@Version   @Column(name="OPTLOCK")  public Integer getVersion() { ... }  
@Column标记表示所持久化属性所映射表中的字段,是与属性相对应的数据库字段
@Transient透明传输 ,非持久化字段
@Temporal时间精确处理(Temporl.data...)
@BatchSize(size=3)提高效率,减少sql语句 ,批处理的时候用
@Enumerated枚举主要是(String)传送字符和(Ordinary)下标
@Lob 注解属性将被持久化为 Blog 或 Clob 类型。具体的java.sql.Clob, Character[], char[] 和 java.lang.String 将被持久化为 Clob 类型. java.sql.Blob, Byte[], byte[] 和 serializable type 将被持久化为 Blob 类型。  
通过@SqlResultSetMapping 注解来描述 SQL 的 resultset 结构。如果定义多个结果集映射,则用 @SqlResultSetMappings。  
Junit运行时不报异常可以加try catch或者在main方法中调用该方法
Junit中@BeforeClass、@AfterClass写在所有static的方法明前,@Test必须写在方法名前,是指当前的内容是测试脚本。所含的执行顺序是:@BeforeClass ,@Before,@Test,@After,@AfterClass
@TabelGenerator一般在夸数据库平台时用
联合主键时用@Id@idClass,@EmbeddedID,@Embdedle@Id。
用xml时需重写equals和hashCode(因为需要判断内存中表之间的主键是否相同),必须实现serializable接口
opensession打开新的session,getcurrentsession那原来的session没有的话就打开新的,事物提交后自动close
用getcurrentsession,配置文件中就必须有<property name="current_session_context_class">thread</property>
session的三种状态:
transient:内存中一个对象,没ID,缓存中也没有,数据库没有
persistent:内存中有,缓存中有,数据库有(ID)-
deteched:内存中有,缓存没有,数据库有(ID)
load发出的是代理对象等待真正用到对象时才发出SQL语句。get直接从数据库中加载,不会延迟
session.clear()无论是load还是get,都会首先找缓存(一级缓存),如果没有,才会去数据库查找,调用此方法可以清除session缓存
session.flush()可以强制从内存到数据库的同步,清理缓存,不清除
更改部分字段时可以用createQuery来实现
new scehemaExport(new AnnotationConfiguration().config()).create(false,true)用来建表,就不需要在hibernate.cfg.xml中配置ddl。auto了
@JoinColumn()链接字段,对表的映射。如果一个类是另一个类的一部分,那就不需要映射即@Entity等不用写
@OneToOne()一对一映射,单项外键关联@JoinColumn()链接字段,对表的映射凡是双向关联必设mappedBy(另一个类名)表示被对方设置关联属性(一般设在少的一方即one,因为关联关系在表里设在多的一方所以mappedBy就设在少的一方)。
单向主键关联用@PrimaryKeyJoinColumn;联合主键的时候,要实现serializable接口,可以不设@JoinColumn,要射就应该:
@JoinColumns(@JoinColumn(name="" referencedColumnName="")@JoinColumn(name="" referencedColumnName=""))
双向的主键关联;fetch多对一设eager,一对多设lazy如果是EAGER,那么表示取出这条数据时,它关联的数据也同时取出放入内存中 如果是LAZY,那么取出这条数据时,
它关联的数据并不取出来,在同一个session中,什么时候要用,就什么时候取(再次访问数据库)。 但是,在session外,就不能再取了。用EAGER时,因为在内存里,
所以在session外也可以取。

2 个回复

倒序浏览
已学习,谢谢
回复 使用道具 举报
棒棒哒 ............
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马