hibernate单表操作

た 入场券 2022-07-11 13:46 689阅读 0赞

1、单一主键

assigned 由java应用程序负责生成(手工赋值)。

native 由底层数据库自动生成标示符,如果是Mysql就是increament,如果是Oracle就是sequence,等等。

在这里我们尝试使用第一种但是赋值的时候不添标示属性值

  1. public void testSaveUser()
  2. {
  3. //生成用户对象
  4. //User user=new User(1,"txr","123");
  5. User user =new User();
  6. user.setPassword("123");
  7. user.setUsername("txr");
  8. session.save(user);//保存对象
  9. }

发现代码居然通过了,但是查看数据库发现ID是0,这是由于id是int类型默认值为0并不是hibernate为它自动添加了主键值。但如果你再添加一次id还是没有赋值为0那么就会报主键冲突的错误。而如果把User.hbm.xml的主键属性自动生成改为native则测试会通过因为主键自动生成。

  1. <id name="id" type="int">
  2. <column name="ID" />
  3. <!-- <generator class="assigned" /> -->
  4. <generator class="native" />
  5. </id>

2、基本类型

Center

Center 1

当你想修改属性类型为某种映射类型时只需要修改对应的属性映射值即可,如:

  1. <!-- <property name="birthday" type="java.util.Date"> --> <property name="birthday" type="date"> <column name="BIRTHDAY" /> </property>

3、对象类型

Center 2

注意:Mysql不支持标准SQL的CLOB类型,在Mysql中,用TEXT,MEDIUMTEXT及LONGTEXT类型来表示长度超过255的长文本数据。

4、组件属性

组件属性是指:实体类中的某个属性属于用户自定义的类的对象。

Center 3

5、单表操作CRUD实例

save

update

delete

get/load(查询单个记录)

get与load的区别:

在不考虑缓存的情况下,get方法会在调用之后立即向数据库发出sql语句,返回持久化对象。

load方法会在调用后返回一个代理对象。

该代理对象只保存了实体对象的id,直到使用对象的非主键属性时才会发出sql语句。

查询数据库不存在的数据时,get方法返回null,load方法抛出异常org.hibernate.ObjectNotFoundException

发表评论

表情:
评论列表 (有 0 条评论,689人围观)

还没有评论,来说两句吧...

相关阅读

    相关 Django -- 操作

    ORM简介 1, ORM是 对象--关系--映射 的简称.实现了数据模型与数据库的解耦,即数据库的设计不需要依赖特定的数据库,通过简单的配置就可以轻松更换数据库 2,