Hibernate

单个参数设置方式

    hql = "from task where id = ?";
    this.session.createQuery(hql).setParamter(0,1); //单个或则多个参数设置传递

集合参数设置方式

    hql = "from task where id  in (:ids)" ;
    this.session.createQuery(hql).setParamterList("ids", new Object[](xx,xx,xx,xx,......)); //数组或者集合参数设置传递

命名查询

    this.session.getNamedQuery("queryById");
    query.setParameter("idMax",100); //参数传递
    query.setParameter("idMin",1);
    List list = query.list(); //查询返回

find部分查询

find(String str, Object value)  
    this.getHibernateTemplate().find(from Task where id=?", "valueId");
find(String str , Object[] values) 
    hql = "from Task  where name=? and password=?";
    this.getHibernateTemplate().find(hql, new String[]{"nameValue", "passwordValue"});
findByNamedParam(String str, String paramName, Object value)
    str="select count(*) from Task where name =:Name"; 
    paramName=name;
    value="xxx"
    this .getHibernateTemplate().findByNamedParam(queryString, paramName, value); 
findByNamedQuery(String hqlName) 
    this.getHibernateTemplate().findByNamedQuery("queryAllTask");
    <hibernate-mapping>
                  <class>......</class>
                  <query name="queryAllTask"><!--此查询被调用的名字-->
                       <![CDATA[
                            from Task  <!--查询对象-->
                        ]]>
                  </query>
    </hibernate-mapping>
findByNamedQuery(String hqlNameObject value)  
    this .getHibernateTemplate().findByNamedQuery("queryByName", "nameValue");
    <hibernate-mapping>
                  <class>......</class>
                  <query name="queryByName "><!--此查询被调用的名字-->
                       <![CDATA[
                            from Task where name = ?
                        ]]>
                  </query>
    </hibernate-mapping>
findByNamedQuery(String hqlName , Object[] value)  
    String[] values= new String[]{"test", "123"};
    this .getHibernateTemplate().findByNamedQuery("queryByNameAndPassword " , values);
    <hibernate-mapping>
                  <class>......</class>
                  <query name="queryByNameAndPassword "><!--此查询被调用的名字-->
                       <![CDATA[
                            from Task where name =? and password =?
                        ]]>
                  </query>
    </hibernate-mapping>

hibernate 配置文件:

配置key前边的hibernate前缀 可有可无,如:hibernate.dialect或dialcet 按作用可以分为三大类:

 * 数据库信息: 方言,jdbcUr,驱动,用户名,密码…

    <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
	<property name="connection.url">jdbc:mysql://.......
    <property  name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
  • 导入映射文件
      <mapping resource="././*.hbm.xml">
  • 其他配置
    <property ...>
          show_sql   //显示生成的sql语句
		  format_sql //格式化生成的sql语句
		  hbm2ddl.auto //自动生成表结构
		  hibernate.hbm2ddl.auto
    </property>
    <property name= hibernate.connection.isolation>4</property>

   1代表:读未提交(Read Uncommitted)   2代表:读已提交(Read Committed) 4代表:可重复读(Repeatable Read) 数据库默认(快照 第一次读到的数据 数据库中途改变数据不会变化) 8代表:可串行化(Serializable)(当前操作未完成不允许别的请求操作)

生成表结构的两种方式:

  • hbm2ddl.auto

    是否自动创建数据库表 主要有一下几个值:

    1.validate:当sessionFactory创建时,自动验证或者schema定义导入数据库。

    2.create:每次启动都drop掉原来的schema,创建新的。

    3.create-drop:当sessionFactory明确关闭时,drop掉schema。

    4.update(常用):如果没有schema就创建,有就更新。

    <propertynamepropertyname="hbm2ddl.auto">create</property>  
  • 使用SchemaExport工具类