工作中使用到JPA查询数据库,遇到 createNativeQuery() 语句设置 SQL 中 IN 的查询条件,以此文记录。
例子:
public List<Student> getStuInStuIds(List list) { // 用于拼接SQL StringBuilder sql = new StringBuilder(); // 设置参数集 Map<String, Object> params = new HashMap<String, Object>(); params.put("STUID", list); // SQL拼接 sql.append("SELECT "); sql.append(" ID, "); sql.append(" NAME, "); sql.append(" SEX "); sql.append("FROM "); sql.append(" STUDENT "); sql.append("WHERE "); sql.append(" ID IN :STUID "); // 创建Query Query query = entityManager.createNativeQuery(sql.toString(), Student.class); // 设置Query参数 for (Entry<String, Object> entry : params.entrySet()) { query.setParameter(entry.getKey(), entry.getValue()); } List<Student> result; try { // 执行Query result = query.getResultList(); } catch (Exception e) { result = null; } return result; }
【注】设置 IN 参数时,传入参数须为 List 类型。(占位符 :STUID 对应的参数为 list)
Oracle查询表构造
(1)查询表的注释信息:USER_TAB_COMMENTS
例:
SELECT * FROM USER_TAB_COMMENTS WHERE table_name='TEST_DEPT'
结果:
(2)查询列的详细信息:USER_TAB_COLUMNS
例:
SELECT * FROM USER_TAB_COLUMNS WHERE table_name='TEST_DEPT'
结果:
(该结果字段有点多,结果图片只截取了前部分)
(3)查询列的注释信息:USER_COL_COMMENTS
例:
SELECT * FROM USER_COL_COMMENTS WHERE table_name='TEST_DEPT'
结果: