Hibernate总结
- 格式:wps
- 大小:94.50 KB
- 文档页数:10
第一章1.Hibernate准备(1)部署jar包将hibernate有关的jar包放到web工程下的WebRoot->WEB-INF->lib文件下。
(2)创建Hibernate配置文件在src根目录下创建hibernate.cfg.xml文件,并配置数据库驱动等信息。
(3)创建实体类和实体映射文件在src下建立实体类包,并为每个实体类建立对应的实体映射文件,并配置实体类和数据库表的一一映射关系。
2.使用hibernate操作数据库的步骤(1)读取并解析配置文件Configuration conf = new Configration().configure()(2)创建SessionFactorySessionFactory sf=conf.buildSessionFactory()(3)打开SessionS=sf.getCurrentSession()//sf.openSession()(4)开启事务Transaction tx=s.beginTransaction()(5)进行数据库操作S.sava(Object)(6)提交事务mit()如果打开session用到是opensession,则需要关闭session s.close();3.增、删、改、查操作以一个User对象为例,如果user里的值已经封装好了,并且都有id(主键)(1)增User user= new User();Session.save(user);(2)删Session.delete(user);(3)改Session.update(user);(4)查Session.get(User.class,id);//Session.load(User.class,id);如果get()查询不到则返回null,而load()查询不到则报异常。
4.Hibernate中实体对象的三种状态瞬时状态:刚实例化User对象,并未保存在数据库中。
持久状态:User对象在通过mit()提交以后,或者通过get、load、update方法处理数据时,此时User对象为持久状态。
注意通过delete方法删除User对象是,User对象则变为瞬时状态。
游离状态:处于持久状态的对象,在对应的session关闭后,User对象就处于游离状态。
第二章1.实体关系关联关系:关联关系是通过一个对象持有另一个对象的实例来实现的。
泛化关系:通过对象之间的继承方法来实现的。
2.配置多对一关联以街道和区为例在街道映射文件里<many-to-one name=”Qx” class=”entity.Qx”column=”qxid”/>Many-to-one元素常用属性:name,class,column,not-null,lazy,fetch3.配置一对多关联在区映射文件里<set name=”Jds”inverse=”true”><key><column name=”qxid”></key><one-to-many class=”entity.Jd”></set>3.配置多对的关联以员工和工程为例Project表projectid<pk>……Employee表employeeid<pkl>……关系表emp_proj 表R_projectid<pk>R_employee<pk>在project映射文件中<set name=”emps”table=”emp_proj”><.key column=”r_projectid”/><many-to-many class=”entity.employee”column=”r_employid”></set>在employee映射文件中<set name=”projects”table=”emp_proj”><.key column=”r_employeeid”/><many-to-many class=”entity.project”column=”r_projectid”></set>第三章1.HQL的使用完整HQL的语法结构[select /update/delete……] from entity [where……][group by……][having……][order by……]使用hql的步骤(1)得到Session(2)编写hql(3)创建Query对象(4)执行查询语句示例:public class BaseHibernateDAO {protected Session s=null;public Session getSession(){ Configuration conf = new Configuration().configure();SessionFactory sf = conf.buildSessionFactory();s= sf.getCurrentSession();return s;}}public class UserImpl extends BaseHibernateDAO{public Users login(int id) {Users u=null;System.out.println(id);s=super.getSession();Transaction ta=s.beginTransaction();String hql="from Users where id=:uid";Query q=s.createQuery(hql);q.setInteger("uid",id);u=(Users)q.uniqueResult();mit();return u;}分页public List<Users> getList(int currentPage, int pageSize) { s=super.getSession();Transaction ta=s.beginTransaction();String hql="from Users";Query q=s.createQuery(hql);q.setFirstResult((currentPage-1)*pageSize);q.setMaxResults(pageSize);List<Users> list=q.list();return list;}获取总页数public int getTotalPage(int pageSize) {s=super.getSession();Transaction ta=s.beginTransaction();String hql="from Users";Query q = s.createQuery(hql);List list=q.list();int c=list.size();int k=(c%pageSize==0)?(c/pageSize):(c/pageSize)+1;mit();return k;}删除public int delete(int id) {s=super.getSession();Transaction ta=s.beginTransaction();String hql="delete from Users where id=?";Query q=s.createQuery(hql);q.setInteger(0,id);int k=q.executeUpdate();mit();return k;}增加public void addUser(Users user) {s=super.getSession();Transaction ta=s.beginTransaction();s.save(user);mit();}更新public int xg(Users u) {s=super.getSession();Transaction ta=s.beginTransaction();String hql="update Users set name=:name ,loginid=:loginid,deletestate=:deletestate,userroleId=:userroleId where id=:id";Query q=s.createQuery(hql);q.setProperties(u);int k=q.executeUpdate();mit();return k;}查询public Users getUser(int id) {s=super.getSession();Transaction ta=s.beginTransaction();String hql="from Users where id=?";Query q=s.createQuery(hql);q.setInteger(0,id);Users u=(Users)q.uniqueResult();mit();return u;}}2.参数绑定在写hql语句时需要参数1.?占位符String hql="from Users where id=?";Query q=s.createQuery(hql);q.setInteger(0,id);2.命名参数Stringhql="update Users set name=:name ,loginid=:loginid,deletestate=:deletestate,userroleId=:userroleId where id=:id";Query q=s.createQuery(hql);q.setProperties(u);3.封装参数Stringhql="update Users set name=:name ,loginid=:loginid,deletestate=:deletestate,userroleId=:userroleId where id=:id";Query q=s.createQuery(hql);q.setProperties(u);2和3的 u 都是封装好的User对象第四章1.list()和iterate()方法的区别List()方法,每次发出一条查询语句,获取全部数据。