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

  

posted on 2017-06-23 13:48  毛豆豆0120  阅读(143)  评论(0编辑  收藏  举报

导航