您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 招聘面试 > 黑马程序员:三大框架11天笔记全之hibernate-day04笔记
黑马程序员郑州中心编著黑马程序员:三大框架hibernate-day05笔记第1章Hibernate常用APIHibernate的核心类和接口一共有6个,分别为:Session、SessionFactory、Transaction、Query、Criteria和Configuration。这6个核心类和接口在任何开发中都会用到1.1Configuration它主要是用于加载hibernate配置.Configurationconfig=newConfiguration().config();主要加载src下的hibernate.cfg.xmlConfigurationconfig=newConfiguration();主要加载的src下的hibernate.propertiesConfigurationconfig=newConfiguration().config(核心配置文件名称);加载指定的名称的配置文件问题:我们是在hibernate.cfg.xml文件中有xxx.hbm.xml文件的位置。如果我们使用的是hibernate.properties这种核心配置,它如何加载映射配置?1.2SessionFactory首先SessionFactory它的获取是通过Configuration得到。黑马程序员郑州中心编著SessionFactory接口负责初始化Hibernate。它充当数据存储源的代理,并负责创建Session对象。这里用到了工厂模式。需要注意的是SessionFactory并不是轻量级的,因为一般情况下,一个项目通常只需要一个SessionFactory就够,当需要操作多个数据库时,可以为每个数据库指定一个SessionFactory。通过SessionFactory可以得到Session.是从连接池中获取一个连接。获取一个与线程绑定的Session.SessionFactory它不是轻量级的,不要频繁创建关闭它。在一个项目中有一个SessionFactory就可以,通过SessionFactory来获取Session进行操作。问题:怎样可以保证在一个项目中所使用的SessionFactory是同一个哪?黑马程序员郑州中心编著SessionFactory内部还维护了一个连接池,如果我们要想使用c3p0连接池,应该怎样处理?1.我们要导入c3p0的相关jar包在hibernate/lib/options下有关于c3p0连接池jar包2.在hibernate.cfg.xml文件中配置c3p0连接可以查看etc/hibernate.properties中关于c3p0的配置1.3SessionSession接口负责执行被持久化对象的CRUD操作(CRUD的任务是完成与数据库的交流,包含了很多常见的SQL语句)。但需要注意的是Session对象是非线程安全的。问题:我们如何解决session的安全问题?我们只需要在方法内部来使用Session就可以。问题:Session如何获取到?SessionFactory.openSession();相当于直接通过SessionFactory创建一个新的Session,使用完成后要手动调用close来关闭。SessionFactory.getCurrentSession();获取一个与线程绑定的Session,当我们提交或事务回滚后会自动关闭。黑马程序员郑州中心编著Session常用的方法:save保存对象update修改操作delete删除get/load根据id进行查询savenOrUpdate执行save或update操作createQuery()获取一个Query对象CreateSQLQUery()获取一个可以操作sql的SQLQuery对象createCriteria()获取一个Criteria它可以完成条件查询1.4TransactionTransaction接口主要用于管理事务,它是hibernate的事务接口,对底层的事务进行了封装。使用它可以进行事务操作。commit事务提交rollback事务回滚问题:如果获取一个Transaction对象Session.beginTransaction();问题:如果在程序中没有开启事务,是否存在事务?有事务,session的每一个操作就会开启一个事务。黑马程序员郑州中心编著默认情况下事务是不会自动提交的。默认不自动提交事务自动提交.1.5QueryQuery接口让你方便地对数据库及持久对象进行查询,它可以有两种表达方式:HQL语言或本地数据库的SQL语句。Query经常被用来绑定查询参数、限制查询记录数量,并最终执行查询操作。通过Query主要完成查询操作.我们通过Query可以执行hql语句.Queryquery=Session.createQuery(hql);下面这个可以执行sql语句SQLQUerysqlQuery=Session.createSQLQuery(sql);SQLQuery是Query的子.黑马程序员郑州中心编著1.5.1查询所有操作---使用HQL1.5.2分页查询1.5.3查询指定列信息黑马程序员郑州中心编著Selectname,addressfromCustomer;得到的是ListObject[]结果要想得到ListCustomer结果1.在Customer类中生成以name,address为参数的构造,注意,无参数构造也要有。2.SelectnewCustomer(name,address)fromCustomer;1.5.4条件查询可以使用where关键字无名称参数fromCustomerwherename=?对其进行赋值query.setParameter(0,”张三”)有名称参数fromCustomerwherename=:myname;黑马程序员郑州中心编著对其进行赋值query.setParameter(“myname”,”李四”);如果查询结果可以保证就是唯一的,我们可以使用query.uniqueResult()来得到一个单独对象.1.5.5执行本地SQL要想执行本地sqlSQLQuerysqlQuery=session.createSqlQuery(Stringsql);使用addEntity方法来将结果封装到指定的对象中,如果不封装,得到的是ListObject如果sql中有参数,我们使用setParameter方法完成参数传递。如果结果就是一个可以使用uniqueResult()来得到一个单独对象。黑马程序员郑州中心编著1.6CriteriaCriteria接口与Query接口非常类似,允许创建并执行面向对象的标准化查询。值得注意的是Criteria接口也是轻量级的,它不能在Session之外使用。首先我想使用Criteria,必须得到CriteriaCriteriacriteria=Session.createCriteria()黑马程序员郑州中心编著查询所有操作Session.createCriteria(实体类.class)得到一个Criteria对象,调用list查询所有分页操作与query的方法一样setFirstResult()setMaxResults()条件查询criteria.add(Restrictions.eq(“name”,”xxxx”));criteria.add(Restrictions.or(Restricitons.eq(),Restrictions.list()…..))我们使用Criteria可以更加面向对象去操作,它非常适合进行多条件组合查询。
本文标题:黑马程序员:三大框架11天笔记全之hibernate-day04笔记
链接地址:https://www.777doc.com/doc-4148758 .html