实体类映射技巧
即Hibernate访问持久化类的方法
- 通过get、set方法
- 通过java反射机制
缺少setter和getter方法的实体类在映射时,可将元素的access属性设置为field。这种方式将无法适用于下面这种方式
<!-- 通过指定access的值为field,来使用反射机制,当使用该方式时,没有了类的getter、setter方法也可以拿到对应的值 -->
<property name="username" not-null="true" type="java.lang.String" column="username" access="field"/>
实体类属性与表字段不对称时,可以在setter和getter方法中加入程序逻辑,不可以适用于反射机制
如:
只需要修改get、set方法即可
User.hbm.xml文件中仍可以使用属性Username(即使实体类中没有这个属性,但是可以通过getUsername和setUsername来拼接Username)
特殊需求
数据库中不存在该字段,但是我们的实体类中需要这样的一个属性如:
在property中设置formula属性设置查询语句
- Hibernate在初始化的阶段就会根据映射配置文件,为持久化类生成以下的SQL语句,INSERT SQL UPDATE SQL
DELETE SQL 根据ID检索持久化类实例SQL
- dynamic-insert动态插入
- dynamic-update动态更新
- 这两个默认的值都是false,是定义在表结构上,不加就是全字段的更新,并且sql语句也是更新或插入的全字段,
使用该属性后只会更新或插入修改过的字段。 使用上没有什么区别,只是在效率上进行了优化。
动态更新中true那么好,那么false存在的意义是什么?
- 会存在一个比较的过程,在性能上会有一定的损耗。