【笔记】Hibernate通过原生SQL语句实现增删改查

前言

Hibernate通过原生SQL语句实现增删改查

增删改

1
2
3
String sql = "";
SQLQuery sqlQuery = session.createSQLQuery(sql);
int rows = sqlQuery.executeUpdate();

查询指定实体类的数据

  • 如果结果集是从单张表中查询的结果,那么可以直接通过映射到实体类的方式得到结果集
  • 在映射之前,需要创建自定义实体类(.java)和实体类与数据表的映射(.hbm.xml),并将实体类与数据表的映射配置添加到Hibernate配置中(hibernate.cfg.xml
1
2
3
4
5
List<User> results = null;
String sql = "";
SQLQuery sqlQuery = session.createSQLQuery(sql);
sqlQuery.addEntity(User.class);
results = sqlQuery.list();

自动映射任意数据类型为Map

  • 如果结果集是从多张表中查询的结果,那么可以通过手动获取结果拼接成Map集合
1
2
3
4
5
6
7
String sql = "SELECT COUNT(uid) FROM tbluser";
SQLQuery query = session.createSQLQuery(sql);
query.setResultTransformer(Criteria.ALIAS_TO_ENTITY_MAP);
List<HashMap<String, Object>> result = query.list();
if (result.size() != 0) {
Object value = result.get(0).get("key");
}

手动查询任意类型数据

  • 如果结果集是从多张表中查询的结果,那么可以通过手动获取结果拼接成实体类
1
2
3
4
5
6
7
8
9
10
String sql = "";
SQLQuery sqlQuery = session.createSQLQuery(sql);
List<Object[]> objects = sqlQuery.list();
List<User> results = new ArrayList<>();
for (Object[] object : objects) {
User result = new User();
result.setId(String.valueOf(object[0]));
result.setName(String.valueOf(object[1]));
results.add(result);
}

完成