gistfile1.txt //1、加入相关jar包//2、src下创建hibernate.cfg.xml文件 // root root com.mysql.jdbc.Driver jdbc:mysql:///h // // org.hibernate.dialect.MySQLDialect //hibernate-release-4.3.9.Final\project\etc\hibernate.properties //
//1、加入相关jar包 //2、src下创建hibernate.cfg.xml文件// //3、写一个实体类 public class News { private Integer id; private String title; private String author; private Date date; public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getTitle() { return title; } public void setTitle(String title) { this.title = title; } public String getAuthor() { return author; } public void setAuthor(String author) { this.author = author; } public Date getDate() { return date; } public void setDate(Date date) { this.date = date; } public News(String title, String author, Date date) { super(); this.title = title; this.author = author; this.date = date; } public News() { } @Override public String toString() { return "News [id=" + id + ", title=" + title + ", author=" + author + ", date=" + date + "]"; } } //4、生成News.hbm.xml映射文件root root com.mysql.jdbc.Driver jdbc:mysql:///h // //org.hibernate.dialect.MySQLDialect //hibernate-release-4.3.9.Final\project\etc\hibernate.properties //true //true //update //update更新不删除原有的列名,create删除原有的表重新创建,create-drop当sessionFactory //一旦关闭表就自动删除 //// 2 2 5000 100 300 2 false //5、写一个测试类 SessionFactory sessionFactory = null; //创建Configuration获取配置信息和映射关系 Configuration configure = new Configuration().configure(); //创建ServiceRegistry对象任何配置都需要注册才生效 ServiceRegistry buildServiceRegistry = new ServiceRegistryBuilder().applySettings(configure.getProperties()) .buildServiceRegistry(); //创建SessionFactory对象 sessionFactory = configure.buildSessionFactory(buildServiceRegistry); //创建Session对象 Session openSession = sessionFactory.openSession(); //开启事物 Transaction beginTransaction = openSession.beginTransaction(); //执行保存操作 News news = new News("Java","gmy",new Date(new java.util.Date().getTime())); openSession.save(news); //提交事务 beginTransaction.commit(); //关闭Session openSession.close(); //关闭SessionFactory对象 sessionFactory.close(); //Session缓存(一级缓存) //flush():使数据表中的记录和对象的状态保持一致,可能会发出对应的SQL语句 //1、如果数据没有变则不发送,如果改变,则发送SQL语句 //refresh():会强制发送SELECT语句,已使Session缓存中的对象的状态和数据表中对应的记录保持一致 //注意Hibernate的隔离级别 //clear():清理缓存 //隔离级别 //1、READ UNCOMMITED(读未提交) //2、READ COMMITED(读已提交) //4、REPEATABLE READ(可重复读) //8、SERIALIZEABLE(串行化) // 2 默认为4 //持久化对象状态 //持久化状态 //临时状态 //游离状态 //删除状态 //游离状态 //News news = new News(); //news.setId(1); //持久化状态 //News news = (News)session.get(News.class,1); //对象状态转换图 get() Load() Query.list() Query.uniqueResult() Query.iterator() Query.scoll() new 语句 //持久化状态 <--------------- //临时状态 | ^ save() | | saveOrUpdate() | | persist() | | merge() | | | | evict() | | update() close() | | saveOrUpdate() clear() | | merge() | | v | delete() //游离状态 -----------> //删除状态 //save()方法 //临时对象变为持久化对象,并为对象分配ID //在save()方法前设置ID无效 //对于持久化对象的ID不允许修改 //persist()方法: //save设置对象ID无效但是不抛出异常,而persist会抛出异常 //get()方法: //获取一个对象 //get()和load()区别 //1、执行get方法会立即返回一个对象,而执行load方法,若不使用对象,则不会立即执行查询而返回一个代理对象 //2、如果数据表中没有对应的记录,get返回null,load,当使用对象时,抛出异常 //3、load方法可能会抛出懒加载异常 //update()方法 //1、更新持久化对象,不需要显示调用update方法,但事物提交时,会先执行session的flush方法 //2、更新游离对象时,需要显示调用session中的update方法,可以把游离对象变成持久化对象 //saveOrUpdate()方法 //游离对象则执行update,临时对象则执行save //delelte()方法 //删除对象 //evict()方法 //从缓存中移除指定的持久化对象 //set:映射set类型属性 //inverse:指定由哪一方维护关联关系 //cascade:级联操作,不建议使用,建议手工 //order-by: 排序操作,order-by中存放的是列名 //注意 //单向一对多 //插入:单向一对多应该先插入多的一方,在插入一的一方 //删除:可以直接删除一的一方,直接删除多的一方会有异常,必须在一的一方设置级联删除//双向一对多 //双向一对多,让一的一方放弃维护关联关系 //设定集合是要将集合初始化,防止发生空指针异常 //一对一 //先保存没有外键的一方 //单向多对多 //注意懒加载异常 //双向多对多 //继承映射 //join-subclass //union-subclas //检索策略 //类级别 //立即检索:立即加载检索方法的指定对象 //延迟检索:延迟加载检索方法的指定对象 //检索方式 //导航对象图检索方式:根据已经加载的对象导航到其他对象 //OID检索方式:按照对象的OID来检索对象 //HQL检索方式:使用面向对象的HQL查询语言 //QBC检索方式:使用QBC API来检索对象 //本地SQL检索方式:使用本地数据库的SQL查询语句 //HQL分页 query.setFirstResult((pageNo-1)*pageSize).setMaxResults(pageSize).list() //HQL命名查询 getNamedQuery(); //常见错误 错误:数据表无法生成 原因:注意检查映射文件的路径,还有Hibernate的方言配置,Hibernate可以自动见表,但是不能自动建数据库