Commit d84b419c authored by 马超's avatar 马超

feat: 新增Hibernate条件查询文档

parent 1e3845d6
......@@ -1091,8 +1091,61 @@ public List<ExampleUserInfo> getUserListByJDBC(String sql, Map<String, Object> p
int executeTrans(LinkedList<TranscationQuery> listQuery);
</blockcode></pre>
</details>
#### 5.1.5 Hibernate查询扩展——复杂条件查询
#### 5.1.5 SQL查询扩展——条件IN和条件LIKE
Hibernate列表查询以及分页查询在普通的条件查询上做了扩展,可以Condition来做复杂的条件查询,需要使用 **HqlWhereHelper** 工具类来构建,条件的组合有以下几种:
1. **精确查询**(EQUAL、NOTEQUAL)
如果没有任何类型,则默认为EQUAL,也就是 “**等于**”,查询用户名称为张三的数据。
```java
LinkedList<Condition> conditions = HqlWhereHelper.getInstance.and("userName","张三").buildConditions();
//调用分页查询,传入Condition参数
genericDaoService.findPageByConditions(ExampleUserInfo.class, conditions, page.getPageIndex(), page.getPageSize());
```
如果需要其它类型,如NOTEQUAL( **不等于** ),需要显示的传递匹配类型,查询用户名称不等于张三的数据。
```java
HqlWhereHelper.getInstance.and("userName", "张三", FilterType.NOTEQUAL).buildConditions();
```
2. **模糊查询** (LIKE)
模糊查询所有用户名称带有张字的数据。
```java
HqlWhereHelper.getInstance.and("userName", "张", FilterType.LIKE).buildConditions();
```
3. **条件IN**
查询用户名称是张三或李四的数据。
```java
String[] names = new String[]{"张三", "李四"};
HqlWhereHelper.getInstance.and("userName", names, FilterType.IN).buildConditions();
```
4. **条件NOTIN**
查询姓名不是张三和李四的数据。
```java
String[] names = new String[]{"张三", "李四"};
HqlWhereHelper.getInstance.and("userName", names, FilterType.NOTIN).buildConditions();
```
5. **组合条件**
查询用户类型为应用类型、用户名称带有张字或者带有李字的数据。
```java
HqlWhereHelper.getInstance.and("userType", "0").and("userName", "张", FilterType.LIKE).or("name", "李",FilterType.LIKE);
```
#### 5.1.6 SQL查询扩展——条件IN和条件LIKE
1. **条件IN**
......
......@@ -302,10 +302,33 @@ LDP框架支持两种操作方式,分别为Hibernate、JDBC。这两种操作
* @return 影响行数
*/
int executeTrans(LinkedList<TranscationQuery> listQuery);
/**
* hibernate 方式分页查询,带详细条件参数
*
* @param clazz entity类型
* @param conditions 条件参数
* @param pageIndex 当前页
* @param pageSize 页面数据量
* @param orderColumns 排序字段
* @return 分页数据
*/
Pagination findPageByConditions(Class<T> clazz, LinkedList<Condition> conditions, Object pageIndex, Object pageSize, OrderColumn... orderColumns);
/**
* hibernate 方式查询,带详细条件参数
*
* @param clazz entity类型
* @param conditions 条件参数
* @param orderColumns 排序字段
* @return 数据集
*/
List<T> findByConditions(Class<T> clazz,LinkedList<Condition> conditions, OrderColumn... orderColumns);
</pre>
</blockcode>
</blockcode
</details>
#### 1.1.2 Hibernate调用示例
参照com.sinra.ldp.example.service.impl.ExampleServiceImpl.java,这里需要注意的是 **@AutoService** 注解,这个注解主要是在新增和更新时,对于实体类中配置了@AutoComputed字段根据规则进行自动填充。例如
......
# Hibernate条件查询工具类使用
Hibernate 复杂查询需要依赖工具类—— **HqlWhereHelper** ,通过调用工具类 **buildConditions()** 方法,生成带顺序的条件列表**LinkedList<Condition>** ,最终按顺序生成HQL语句。
**HqlWhereHelper** 调用示例:
```java
LinkedList<Condition> conditions = HqlWhereHelper.getInstance().and("key","value").buildConditions();
```
**HqlWhereHelper ** 条件之间分为AND和OR,sql参数过滤方式 **FilterType** 又分为EQUAL、NOTEQUAL、LIKE、IN、NOTIN
| **FilterType** | 对应sql符号 |
| -------------- | ----------- |
| EQUAL | = |
| NOTEQUAL | != |
| LIKE | like |
| IN | in |
| NOTIN | not in |
**HqlWhereHelper ** 条件组合的方法列表如下,所有的方法都可以重复调用并随意组合,第一个方法也可以随意调用,不会多生成一个and或者or:
```java
/**
* 使用and拼接map中的参数,sql参数过滤方式为filterType
*
* @param paramMap 参数map
* @param filterType sql参数过滤方式
* @return
*/
public HqlWhereHelper andParamMap(Map<String, Object> paramMap, FilterType filterType);
/**
* 使用or拼接map中的参数,sql参数过滤方式为filterType
*
* @param paramMap 参数map
* @param filterType sql参数过滤方式
* @return
*/
public HqlWhereHelper orParamMap(Map<String, Object> paramMap, FilterType filterType);
/**
* 使用and拼接参数,默认过滤方式为FilterType.EQUAL
*
* @param key 参数key
* @param value 参数value
* @return
*/
public HqlWhereHelper and(String key, Object value);
/**
* 使用or拼接参数,默认过滤方式为FilterType.EQUAL
*
* @param key 参数key
* @param value 参数value
* @return
*/
public HqlWhereHelper or(String key, Object value);
/**
* 使用and拼接参数,过滤方式为FilterType.LIKE
*
* @param key 参数key
* @param value 参数value
* @return
*/
public HqlWhereHelper andLike(String key, Object value);
/**
* 使用or拼接参数,过滤方式为FilterType.LIKE
*
* @param key 参数key
* @param value 参数value
* @return
*/
public HqlWhereHelper orLike(String key, Object value);
/**
* 使用and拼接参数
*
* @param key 参数key
* @param value 参数value
* @param filterType 过滤方式
* @return
*/
public HqlWhereHelper and(String key, Object value, FilterType filterType);
/**
* 使用or拼接参数
*
* @param key 参数key
* @param value 参数value
* @param filterType 过滤方式
* @return
*/
public HqlWhereHelper or(String key, Object value, FilterType filterType);
```
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment