# hibernate_kit
**Repository Path**: virgil/hibernate_kit
## Basic Information
- **Project Name**: hibernate_kit
- **Description**: Hibernate工具,事务代理托管,CRUD便捷方法封装 ~
- **Primary Language**: Java
- **License**: Apache-2.0
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 2
- **Created**: 2017-01-28
- **Last Updated**: 2020-12-19
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# 您发现了我,让您快速便捷使用Hibernate CRUD的 DAO 小工具
------
### 1. 方法API
> 基础方法
| 方法 | 返回 | 参数 | 说明 |
| -------- | -------- | -------- | -------- |
| getSession() | org.hibernate.session | 无 | 获取session |
| save(Object) | ID 泛型指定类型的主键 | POJO实体 | 保存记录 |
| update(Object) | boolean 成功与否 | POJO实体 | 更新记录 |
| merge(Object) | boolean 成功与否 | POJO实体 | 合并记录 |
| delete(Object) | boolean 成功与否 | POJO实体 | 删除记录 |
| deleteById(ID) | boolean 成功与否 | ID主键 | 根据ID删除记录 |
> HQL相关查询方法
| 方法 | 返回 | 参数 | 说明 |
| -------- | -------- | -------- | -------- |
| find(String, Object...) | 用户指定泛型E的List | hql, params | 列表查询 |
| findFirst(String, Object...) | 用户指定泛型E | hql, params | 首条查询 |
| findPage(String, int, int, Object...) | 用户指定泛型E的List | hql, start, pageSize, params | 分页查询 |
> SQL相关查询方法,在返回值转换上会比hql方法多一个参数class
| 方法 | 返回 | 参数 | 说明 |
| -------- | -------- | -------- | -------- |
| findSQL(String, Object...) | 用户指定泛型E的List | sql, params | 列表查询,sql查询方式不指定class只能返回Map |
| findSQL(Class, String, Object...) | 用户指定泛型E的List | pojoClass, sql, params | 列表查询并转换为指定类型 |
| findFirstSQL(String, Object...) | 用户指定泛型E | sql, params | 首条查询 |
| findFirstSQL(Class, String, Object...) | 用户指定泛型E | objClass, sql, params | 首条查询并转换为指定类型 |
| findPageSQL(String, int, int, Object...) | 用户指定泛型E的List | sql, start, pageSize, params | 分页查询 |
| findPageSQL(Class, String, int, int, Object...) | 用户指定泛型E的List | pojoClass, sql, start, pageSize, params | 分页查询并转换为指定类型 |
| executeSQL(String, Object...) | 受影响条数 | sql, params | 执行更新语句 |
### 2. 您需要一个Pojo实体
```java
@Entity
@Table(name="user")
public class User {
@Id
@Column
@GeneratedValue(strategy=GenerationType.AUTO)
private int id;
@Column
private String nickname;
@Column
private String account;
@Column
private String password;
@Column
private String roles;
// getter setter
}
```
### 3. 您需要在hibernate.cfg.xml里添上映射
```xml
<!-- 链接配置 -->
......
```
### 4. 您还需要一个DAO
> 单独使用方法,请继承 DefaultSessionDAO,且必须使用ProxyKit进行事务托管
```java
public class UserDAO extends DefaultSessionDAO {
public static final UserDAO me = new UserDAO();
}
```
```java
// 必须要托管然后通过service调用噢,不然无法正常运行
private UserService service = ProxyKit.transaction(new UserService());
```
> 集成 Spring 方法,请继承 SpringSessionDAO 并在 Spring 配置里向 dao 注入 session
```java
public class UserDAO extends SpringSessionDAO {
public static final UserDAO me = new UserDAO();
}
```
### 5. 使用范例
> 基础方法
```java
@Test
public void save(){
User user = new User();
user.setNickname("测试");
user.setAccount("test");
Integer id = UserDAO.me.save(user);
System.out.println("保存ID是 = " + id);
assertNotNull(id);
}
@Test
public void update(){
User user = UserDAO.me.getById(1);
assertNotNull(user);
String newPassword = Integer.toString(2);
user.setPassword(newPassword);
int count = UserDAO.me.update(user);
assertEquals(count, 1);
assertEquals(user.getPassword(), newPassword);
}
@Test
public void delete(){
User user = UserDAO.me.getById(1);
boolean result = UserDAO.me.delete(user);
assertEquals(result, true);
}
@Test
public void deleteById(){
boolean result = UserDAO.me.deleteById(1);
assertEquals(result, true);
}
```
> HQL相关
``` java
@Test
public void findHql(){
List list = UserDAO.me.find("from User");
assertNotNull(list);
}
@Test
public void findHqlPage(){
List page1 = UserDAO.me.findPage("from User", 0, 5);
assertNotNull(page1);
System.out.println(page1.get(0).getNickname());
}
@Test
public void findFirst(){
// 返回类型任意指定
String nickname = UserDAO.me.findFirst("select nickname from User");
assertNotNull(nickname);
System.out.println(nickname);
User user = UserDAO.me.findFirst("from User where id = 1 ");
assertNotNull(user);
}
```
> SQL相关
``` java
@Test
public void findSql(){
// 返回pojo需指定class
List list = UserDAO.me.findSQL(User.class, "select * from user");
assertNotNull(list);
System.out.println(list.get(0).getNickname());
// 默认则返回map
List