hibernate主键生成策略,这里主要介绍常用的两种
<generator class="native"/>:根据使用的数据库来选择具体的值,生成的主键是自动增长的,实体类的id属性必须是Integer类型
<generator class="uuid"/>:生成32位的随机字符串,实体类的id属性必须是String类型
对实体类进行CRUD操作
这里不再演示,直接调用session的方法即可:save() 、delete() 、update()、get()、SaveOrUpdate()
实体类的三种状态
1、瞬时状态:与session没有关联,没有ID
User u = new User();
u.setUsername("李四");
u.setPassword("123");
u.setAddress("日本");
2、持久状态:与session有关联,并且有ID
User user = session.get(User.class, 2);
3、托管状态:与session没有关联,但有ID
User user = new User();
user.setUsername("大神");
user.setPassword("dfdf");
user.setAddress("澳大利亚");
user.setId(1);
hibernate的一级缓存
hibernate的一级缓存默认是打开的
hibernate的一级缓存的使用范围是一个session范围、从session创建到session关闭范围
hibernate的一级缓存中存储的数据,必须是持久态的数据
以下是执行过程
hibernate的一级缓存的快照区特点(持久态对象会自动更新数据库)
Query、Criteria、SqlQuery查询多条记录介绍
1、使用Query对象,不需要写sql语句,但是需要写hql语句。
sql和hql的区别:sql操作的是表和表的字段,hql是操作实体类和属性
Query query = session.createQuery("from User ");
List<User> list = query.list();
2、使用Criteria对象
Criteria criteria = session.createCriteria(User.class);
List<User> list = criteria.list();
3、使用SqlQuery对象,就是写普通的sql
SQLQuery query = session.createSQLQuery("select * from t_user");
List<object[]> list = query.list();
这里集合中封装的是数组,我们想要的是对象,那么
query.addEntity(User.class);
List<user>list = query.list();
如果想要集合中是map的话,可以
query.setResultTransformer(CriteriaSpecification.ALIAS_TO_ENTITY_MAP);
List<Map> list = query.list();