第4.25课 上课 查询(加载)操作, 基础映射, 主键映射, 基本属性映射
4_25

查询(加载)操作
根据主键查询单条记录

重点:get和load方法的区别:
get的方法(推荐):
-- get 根据主键id查询一条记录(立即查询)
-- get方法返回的是一个持久化类的实例,立即执行就发起SQL语句查询id对应的记录
-- get方法查询id对应的记录不存在的时候 返回 null
----------------------------------------------------------------------------------------------
load的方法:
-- load 根据主键id查询一条记录(延迟查询).
-- load方法返回的是一个持久化类的代理对象,当真正访问除id以外的属性的时候才去发起SQL语句查询id对应的记录
当你真正用到该代理对象的属性时,有可能出现session关闭的异常,因为要去数据库表中查询,那Session就不能关闭,
因为Session封装了数据库连接.
-- load方法查询id对应的记录不存在的时候报 ObjectNotFoundException 异常.
get
get()方法:
-- 根据主键id查询一条记录(立即查询).
User user = (User)session.get(User.class, 1); // user : 持久化状态
System.out.println(user.getName() + "==" + user.getAge());
// 判断Session的一级缓存中是否包含这个对象,true: 持久化状态
System.out.println(session.contains(user));
load
load()方法:
-- 根据主键id查询一条记录(延迟查询).
-- 延迟从数据库表查询数据,一开始返回代理对象,当你真正要用到它的属性时,才会生成查询语句到数据库表中查询数据。
当你要用到它的时候,要保证Session不能关闭。
User user = (User)session.load(User.class, 2); // user : 持久化状态
System.out.println(user.getName() + "==" + user.getAge());
// 判断Session的一级缓存中是否包含这个对象,true: 持久化状态
System.out.println(session.contains(user));
基础映射
@Entity
@Entity注解:
-- 将普通的pojo转化成持久化类.
-- 该注解写在pojo类上.
@Table(持久化类转化成表)
@Table: 把持久化类转化成表的相关信息。
-- name:指定表名。
-- indexes: 用于指定表的引索列.
-- uniqueConstraints:用于指定唯一约束。
indexes : @Index(columnList="数据表中的列名", name="索引名")
indexes={@Index(), @Index()}
indexes={@Index(columnList="name", name="IDX_NAME"),
@Index(columnList="address", name="IDX_ADDRESS")} // 创建表中的索引
uniqueConstraints : @UniqueConstraint(columnNames={"列名","列名"}, name="唯一约束名")
uniqueConstraints={
@UniqueConstraint(columnNames={"name", "age"}, name="UC_NAME_AGE")}) // 多列建联合唯一约束
name(表名)
indexes(索引)
uniqueConstraints(唯一约束)
主键映射
@Id
@Id() // 主键列
private Long id;
@Id() // 主键列
private String id;
主键自增长策略
@GeneratorValue(生成值)
主键生成策略:
@GeneratorValue(strategy=GenerationType.xxx)
-- GenerationType.IDENTITY: 适宜MySQL、SqlServer有自增长列的数据库。
-- GenerationType.SEQUENCE:适宜Oracle这种没有自增长有sequence的数据库。
-- GenerationType.AUTO:让Hibernate根据数据库方言自动选择主键生成策略。
-- GenerationType.TABLE: 适宜所有的数据库,因为它会单独生成一张表来维护主键生成。
IDENTITY(自动增长生成策略)
@Id @GeneratedValue(strategy=GenerationType.IDENTITY)
private Integer id;
SEQUENCE(序列生成策略)
@Id @GeneratedValue(strategy=GenerationType.SEQUENCE)
private Integer id;
TABLE(生成一张表维护主键策略)
@Id @GeneratedValue(strategy=GenerationType.TABLE)
private Integer id;
AUTO(自动选择主键生成策略)
@Id @GeneratedValue(strategy=GenerationType.AUTO)
private Integer id;
基本属性映射
@Column(属性转化成表中的列)
@Column : 持久化类中属性转化成数据库表中列的相关信息
-- name:指定列名。
-- length: 该列支持的长度。
-- precision:有效的总位数。(BigDecimal)
-- scale:小数点的位数。(BigDecimal)
-- unique: 唯一约束。
-- nullable:非空约束。
-- insertable:是否允许插入true:允许 false: 不允许。
-- updatable:是否允许修改true:允许 false: 不允许。
-- columnDefinition :指定列的定义。
name(指定列名)
length(该列支持的长度)
precision(有效的总位数)
scale(小数点的位数)
unique(唯一约束)
nullable(非空约束)
insertable(是否允许插入)
updatable(是否允许修改)
columnDefinition(指定列的定义)
@Temporal(日期属性)

TemporalType.DATE(yyyy-MM-dd)
TemporalType.TIME(HH:mm:ss)
TemporalType.TIMESTAMP(yyyy-MM-dd HH:mm:ss) 默认
@Transient(指定不是持久化属性)
@Transient:指定不是持久化属性
transient:关键字修饰不需要序列化的属性,同时用它也能指定不是持久化的属性。
浙公网安备 33010602011771号