zoukankan      html  css  js  c++  java
  • hibernate文档

    hibernate文档

    1、求总条数,getSession.createQuery(hql).setString("name",name).setString(0,age).setData("applyDate",applyDate).uniqueResult()   还可以使用setPAramter();

      参数绑定setParamter 可以绑定任意类型的数据,query.setParameter(“customername”,name,Hibernate.STRING);一些类型必须指明类型,如date在hibernate中可能映射成date也可能映射成timestamp

      setProperties 可以绑定实体类 setString 可以按参数名称绑定,也可以使用位置绑定

    uniqueResult()  来获得总条数,intValue()转换为int类型

    ehcache  http://raychase.iteye.com/blog/1545906

    唯一依赖于slf4.jar

    1、若返回单个字段的时候  List<object[]> list=session.createQuery("select user.name,user.age from User user").list(); 

      但也可以动态构造实例对象,List<User> list=sesssion.createQuery("select new User(user.name,user.age) from User user").list();  这样获得的user对象是瞬时态的,如果用saveorupdate的时候,执行的是save方法

      getload区别,get查询时,若没有对象返回null,若是load没有对象则抛出异常

    1、hibernate的配置:第一先配置他的dataSource,然后再配置sessionFactory,有三个属性,一个为dataSource 一个为hibernateProperties 一个为 packagesToScan,扫描包下面的实体类与数据库对应

    2、PropertyPlaceholderConfigurer可以用来读取properties配置文件

    3、hibernate实体类注解: 类名前加@Entity(name="t_user")  name可选代表数据库一个表, @Table(name="t_user")

     注解配置 <mapping class="com....User"/>  xml配置<mapping resource="com/...user.xml"/

    4、@Temporal(TemporalType.TIME),日期映射,返回给jsp后不用再去转换

    7-7

    1、list返回的数据类型,若是两个表关联的情况,则一个对象为object[0]  另一个对象为object[1],也可以写成包装类型VO,vo。对象。属性便可,也可以是利用@onttoone来关联,获取一个对象,其实也是另外形式的VO

     

    http://blog.csdn.net/tanyit/article/details/6987279#_Toc251597130

    1、hibernate的映射关系

         一对多单向,在一的一方配置,多的一方不用管,例如班级与学生表,private Set<Student> student=new HashSet<>(); ,然后在get上面@OneToMany(cascade={CascadeType.ALL})  ,@joinColumn(name="ClassesId"),name值可以任意,代表外键的名称 这一个必须有,否则会生成一个class_student的中间表,在多的一方不用配置,只需要自己的Id,和name便可,外键也不用配置,若要写的话,必须和joinColumn一致,否则会生成两个字段

      多对一单向,相对简单,只需要在多的一方,@ManyToOne(cascade={CascadeType.ALL)便可以

      多对一双向,在多的一方配置@ManyToOne 在一的一方配置@OneToMany(cascade={CascadeType.ALL},mappedBy="classes")  其中classes代表的是表名

      一对一单向,

      至于是使用单向还是双向,就看是否需要获取对方数据,例如需要通过人员查询到部门,又需要通过该部门查询到拥有哪些人员,这样就需要双向的,如果是考题获取选项,这种模型的就需要单向就可以

    2、级联,cascade取值有四个类型,all所有情况下都级联,save-update只有新增和更新的时候执行级联,delete 删除的时候执行级联,none任意情况下都不执行级联

    3、关于hibernate的懒加载  http://blog.csdn.net/huhui_cs/article/details/8589977 获取到的对象只是代理对象,若要取属性的时候才会发出sql语句

     

    1、get与load  

      load为延迟加载,查询得到的对象其实只是一个保存了id属性的代理对象User,load后并不发出sql语句,而user.getId后依旧不发送sql、而当getName时才会发送

      load加载要比get的性能好一些

      clear()清除所有对象的缓存,evict(User)清除单个对象的缓存,使其处于游离态

      flush() 刷新缓存与数据库一致,会立即发出sql语句,但是必须得 session.close(),或者commit()这样才可以提交

    2、spring与hibernate整合

      在dao中获得sessionFactory对象方法:   直接在dao注入sessionFactory,利用AutoWire 也可以使用get set方式获得sessionFactory

      dao继承HibernateDaoSupport 需要

    @Autowired //必须有这一段 否则启动项目会报错
        private SessionFactory sessionFactory1;//这一句不可以有  否则无法生成sessionFactory 因为写了就相当于把sessionFactory 赋值给了当前类
          public void setSessionFactory1(SessionFactory sessionFactory1) {
            super.setSessionFactory(sessionFactory1);
            
        }

      直接使用getSession获得session 或者通过getHibernateTemplate().find(hql),直接获得对象的list集合

      在spring.xml 配置   

      <bean id="hibernateTemplate" class="org.springframework.orm.hibernate5.HibernateTemplate">  
              <property name="sessionFactory" ref="sessionFactory" />  
         </bean>

      context:component-scan base-package="com.longcai" 扫描,用include-file 来确定扫描什么  exclude-file来判断不扫描什么包 有 controller  service repository componet

      autowired利用byType  resource先name,只需要写private 不用写set get,@service("加名字1")  则@Qualifier("使用那个名字1"),如果不加name1,bean的name默认为类名首字母小写,如果是实现类则用charDaoImpl便可

       如果找不到就byType 若指定了@Resource(name="baseDao")则只能用byname

      

  • 相关阅读:
    编译环境
    好看的函数图
    R语言学习
    python画图
    C++技巧
    DLL
    进程共享数据
    八数码问题
    document.getElementsByTagName()返回的是数组document.getElementsById()是dom内容
    使用Math.max,Math.min获取数组中的最值
  • 原文地址:https://www.cnblogs.com/happy0120/p/7069538.html
Copyright © 2011-2022 走看看