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”