Hibernate总结

1.SpringMVC的beans配置

<bean id="sessionFactory" name="sessionFaction"
    class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
    <property name="dataSource">
        <ref local="dataSource" />
    </property>
    <!-- 加载hibernate的jpa注解形式的实体类,包括model和demo包中的所有实体类。 -->
    <property name="packagesToScan">
        <list>
            <value>com.dadi.**.entity</value>
        </list>
    </property>
    <property name="hibernateProperties">
        <props>

            <prop key="hibernate.dialect">org.hibernate.spatial.dialect.postgis.PostgisDialect
            </prop>
            <prop key="hibernate.show_sql">false</prop>
            <prop key="hibernate.generate_statistics">false</prop>
            <prop key="hibernate.connection.release_mode">auto</prop>
            <prop key="hibernate.autoReconnect">true</prop>
            <prop key="hibernate.use_sql_comments">false</prop>
            <prop key="hibernate.hbm2ddl.auto">update</prop>
            <prop key="hibernate.format_sql">false</prop>
        </props>
    </property>
</bean>

2.DAO里的写法

@SuppressWarnings("unchecked")
public class BaseDao {
    @Resource
    private SessionFactory sessionFactory;

    public Session getSession() {
        return sessionFactory.getCurrentSession();
    }
}
public String check(String pwd, Integer id) {
        // TODO Auto-generated method stub
        String hql = "";        
                hql = "sql语句";
        String result = "";
        //hql用
        Query query = getSession().createQuery(hql);
        //sql用
        SQLQuery query = getSession().createSQLQuery(hql);
        //executeUpdate()返回执行成功的记录的条数(int类型),用于update,add,del语句
        result  = String.valueOf(query.executeUpdate());
        //uniqueResult()返回的结果唯一或者为null(Object类型),用于select语句
        result  = query.uniqueResult(); 
        //查询返回多个值用list()方法(方法类型应该修改为List<Xxx>)
        result = query.list();      
        return result;
    }

3.Hibernate注解说明

注解说明
@Entity将一个类声明为一个实体bean(即一个持久化POJO类)
@Id声明了该实体bean的标识属性(对应表中的主键)
@Table声明了该实体bean映射指定的表(table),目录(catalog)和schema名字
@Column声明了属性到列的映射(具体属性见下方说明)
@GeneratedValue声明了主键的生成策略(具体属性见下方说明)
@SequenceGenerator声明了一个数据库序列(具体属性见下方说明)
@GenericGenerator声明了一个hibernate的主键生成策略,支持十三种策略(具体属性见下方说明)
说明:
1.@Column注解有如下的属性
  name 可选,列名(默认值是属性名)

  unique 可选,是否在该列上设置唯一约束(默认值false)

  nullable 可选,是否设置该列的值可以为空(默认值false)

  insertable 可选,该列是否作为生成的insert语句中的一个列(默认值true)

  updatable 可选,该列是否作为生成的update语句中的一个列(默认值true)

  columnDefinition 可选,为这个特定列覆盖sql ddl片段(这可能导致无法在不同数据库间移植)

  table 可选,定义对应的表(默认为主表)

  length 可选,列长度(默认值255)

  precision 可选,列十进制精度(decimal precision)(默认值0)

  scale 可选,如果列十进制数值范围(decimal scale)可用,在此设置(默认值0)
2.@GeneratedValue注解有如下属性:
strategy 指定生成的策略(JPA定义的),这是一个GenerationType。默认是GenerationType.AUTO

GenerationType.AUTO 主键由程序控制

GenerationType.TABLE 使用一个特定的数据库表格来保存主键

GenerationType.IDENTITY 主键由数据库自动生成(主要是自动增长类型)

GenerationType.SEQUENCE 根据底层数据库的序列来生成主键,条件是数据库支持序列。这个值要与generator一起使用,generator 指定生成主键使用的生成器(可能是orcale中的序列)。
3.@SequenceGenerator注解有如下属性
name 表示该表主键生成策略名称,它被引用在@GeneratedValue中设置的"gernerator"值中

sequenceName 表示生成策略用到的数据库序列名称。

initialValue 表示主键初始值,默认为0。

allocationSize 每次主键值增加的大小,例如设置成1,则表示每次创建新记录后自动加1,默认为50。
4.GenericGenerator注解有如下属性:
name 指定生成器名称。

strategy 指定具体生成器的类名(指定生成策略)。

parameters 得到strategy指定的具体生成器所用到的参数
4.add方法返回值会自动更新的问题(动态更新)
执行完`reimburseService.addReimburse(reimburse);`后台会自动执行update语句
1.是因为这个对象还与Session关联时,操作属性会导致该对象的数据版本更新。如果希望与session脱离 ,使用  session.evict(obj)。 
2.get一个数据,这个对象就变成持久性对象,set也就是修改这个持久性对象的属性后,当事务提交后就会自动更新到数据库

如果你不想让它自动更新,你们可采取以下方法:
在映射文件相应属性中设置update=”false”可以不用更新该字段
或者是在映射文件中的class标签里面加上:dynamic-insert=”false”

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值