ludc
2025-01-16 986aa62ed00bee39363bab41b4eeb8259d446efd
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
package com.vci.server.base.persistence.dao;
 
import java.io.Serializable;
import java.util.Collection;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
 
import org.hibernate.Criteria;
import org.hibernate.LockMode;
import org.hibernate.criterion.Criterion;
import org.hibernate.criterion.DetachedCriteria;
import org.hibernate.type.Type;
 
public interface GenericDao<T extends Serializable, PK extends Serializable> {
 
    //---------------------基本检索、增加、修改、删除操作-----------------------------
    
    //根据主键获取实体。如果没有相应的实体,返回null。
    public T getById(PK id);
    
    //根据主键获取实体并加锁。如果没有相应的实体,返回null。
    public T getByIdWithLock(PK id, LockMode lock);
    
    //根据主键获取实体。如果没有相应的实体,抛出异常
    public T loadById(PK id);
    
    //根据主键获取实体并加锁。如果没有相应的实体,抛出异常
    public T loadByIdWithLock(PK id, LockMode lock);
    
    //获取全部实体
    public List<T> loadAll();
    
    //更新实体
    public void update(T entity);
    
    //更新实体并加锁
    public void updateWithLock(T entity, LockMode lock);
    
    //存储实体到数据库
    public void save(T entity);
    
    //增加或更新实体
    public void saveOrUpdate(T entity);
    
    //增加或更新集合中的全部实体
    public void saveOrUpdateAll(Collection<T> entities);
    
    //删除指定的实体
    public void delete(T entity);
    
    //根据主键删除指定的实体
    public void deleteByKey(PK id);
    
    //删除集合中的全部实体
    public void deleteAll(Collection<T> entities);
    
    //通过合并的方式更新对象
    public T merge(T entity);
    
    
    //-----------------------------SQL------------------------------
    /**
     * 使用SQL进行删除和更新
     * <p>Description: </p>
     * 
     * @author xchao
     * @time 2012-5-29
     * @param sql
     */
    public void createSQLQuery(String sql);
    /**
     * 使用SQL进行删除和更新,占位符参数传递
     * <p>Description: </p>
     * 
     * @author xchao
     * @time 2012-5-29
     * @param sql
     * @param values
     */
    public void createSQLQuery(String sql, Object[] values);
    /**
     * 使用SQL进行删除和更新,命名参数传递
     * <p>Description: </p>
     * 
     * @author xchao
     * @time 2012-5-29
     * @param sql
     * @param names
     * @param values
     */
    public void createSQLQuery(String sql, String[] names, Object[] values);
    /**
     * 根据SQL查询对象,占位符参数传值
     * <p>Description: </p>
     * 
     * @author xchao
     * @time 2012-5-29
     * @param sql
     * @param values
     * @param param
     * @param cls
     * @return
     */
    public List<T> findEntites(String sql, Object[] values, String param, Class cls);
    /**
     * 根据SQL查询对象,指定名称(内部名称)参数
     * <p>Description: </p>
     * 
     * @author xchao
     * @time 2012-5-29
     * @param sql
     * @param values
     * @param map
     * @return
     */
    public List findEntitesBySQL(String sql , Object[] values, Map<String, Type> map);
    //-----------------------------HSQL------------------------------
    
    //使用hql进行删除和更新操作
    public void createQuery(String hql);
    public void createQuery(String hql, Object[] values);
    public void createQuery(String hql, String[] names, Object[] values);
    
    // 使用HSQL语句进行对象查询
    public T findEntity(String hsql);
    
    //使用HSQL语即单个属性进行对象查询
    public T findEntity(String hsql, String name, String value);
    
    // 使用HSQL语句查询对象集合
    public List<T> findEntities(String hsql);
    public List<T> findEntities(String hsql, String name, String value);
 
    //使用带参数的HSQL语句检索数据
    public List<T> findEntites(String hsql, Object[] values);
    
    public List<T> findEntites(String hsql, int start, int number);
    
    public List<T> findEntites(String hsql, int start, int number, Object[] values);
    
    //使用命名的HSQL语句检索数据
    public List<T> findByNamedQuery(String queryName);
    
    //使用带参数的命名HSQL语句检索数据
    public List<T> findByNamedQuery(String queryName, Object[] values);
    
    //使用带命名参数的命名HSQL语句检索数据
    public List<T> findByNamedQueryAndNamedParam(String query,
            String[] paramNames, Object[] values);
    
    //使用HSQL语句检索数据,返回Iterator
    public Iterator iterate(String queryString);
    
    //使用带参数HSQL语句检索数据,返回Iterator
    public Iterator iterate(String queryString, Object[] values);
//    
//    //关闭检索返回的Iterator
//    public void closeIterator(Iterator it);
    
    //---------------------------------------------Criteria------------------------
    
     // 创建与会话无关的检索标准对象
    public DetachedCriteria createDetachedCriteria();
 
    // 创建与会话绑定的检索标准对象
    public Criteria createCriteria();
 
    // 使用指定的检索标准检索数据
    public List<T> findByCriteria(DetachedCriteria criteria);
 
    // 使用指定的检索标准检索数据,返回部分记录
    public List<T> findByCriteria(DetachedCriteria criteria, int firstResult,
            int maxResults);
//
//    // 使用指定的实体及属性检索(满足除主键外属性=实体值)数据
//    public List<T> findEqualByEntity(T entity, String[] propertyNames);
//
//    // 使用指定的实体及属性(非主键)检索(满足属性 like 串实体值)数据
//    public List<T> findLikeByEntity(T entity, String[] propertyNames);
    
    public List<T> findByCriteria(Criterion... criterion);
 
    // 使用指定的检索标准检索数据,返回指定范围的记录
    public Integer getRowCount(DetachedCriteria criteria);
 
    // 使用指定的检索标准检索数据,返回指定统计值
    public Object getStatValue(DetachedCriteria criteria, String propertyName,
            String StatName);
    
    // 通过给定的一个对象,查找与其匹配的对象,表关联比较多时,用户可以根据需要扩展
    public List<T> findByExample(T entity);
 
    // -------------------------------- Others --------------------------------
 
    // 加锁指定的实体
    public void lock(T entity, LockMode lockMode);
 
    // 强制初始化指定的实体
//    public void initialize(Object proxy);
 
    // 强制立即更新缓冲数据到数据库(否则仅在事务提交时才更新)
    public void flush();
    
    //清空缓存
    public void clear();
}