本人与2018年毕业,工作一年多,仍是菜鸟,自毕业以来一直从事java软件开发工作,工作中大部分数据库都是使用的Oracle,碰到的问题总结一下(随时更新)。
1.sql中使用group by 分组时select 后面直接出现的字段也应当出现在group by 的后面;
select id,name from t_user group by id,name<!--正确--> select id,name from t_user group by id<!--错误-->
2.使用mybatis查询的结果集使用java类接收的话字段的大小写由java类字段大小写决定,而使用Map接收的话Map的键key会是大写,如果需要小写可以使用字段别名;
<select resultType="java.util.Map"> <!--Map中键为ID和NAME--> select id,name from t_user </select> <select resultType="java.util.Map"> <!--Map中键为id和name--> select id "id",name as "name" from t_user </select>
3.wm_concat(column)是Oracle中的函数,用来合并同列字段,在低版本的oracle中返回的是varchar值,而在高版本的oracle中的值却是clob属性!!!(使用Map接收查询结果集要注意)
select order_code,wm_concat(project_name) from t_order group by order_code; select order_code,to_char(wm_concat(project_name)) from t_order group by order_code
4.查询语句使用order by 排序时,如果order by 后面跟的时单纯的字符串的话,并不会报错。
之所以会发现这个问题是因为项目中的列表查询有一个需求:列表的排序需要从数据库排序。即从前台传入需要排序的字段与排序方式,mybatis的#{}会将sql预编译一遍,然后在传入的变量前后加上" ' "插入在相应的位置,导致实际执行的sql并不符合排序的需求,不得已使用 ${}传入变量。
--orderBy = user_code desc select * from t_user ordey by #{orderBy}; select * from t_user order by 'user_code desc'; select * from t_user ordey by ${orderBy}; select * from t_user order by user_code desc;
来源:https://www.cnblogs.com/guaniu2750/p/12201406.html