@Select中较为复杂的写法集锦与注意事项

1. 

--xx IN (.....); 方法替代为 with ,效率更高,
--with t(id) as (values ('146'),('147'),('198'))  >>意思就是建立一张临时表t里面有个字段较id,存了三条数据('146'),('147'),('198')

--原SQL
SELECT * FROM m_user where id in ('146', '147', '198'); 
--使用with的写法
with t(id) as (values ('146'),('147'),('198')) SELECT * FROM t left join m_user m on t.id = m.id::text ;


2. 用户可能会多选条件(基于多选下拉框),如果固定单个条件sql很好写,
	2.1可能多条件但不一定是多条件,所以就需要把单个条件的判断1=1 or 某某某条件,
	2.2如果是多条件,那么每个条件之间可能存在冲突那么不能使用and,所以改为or进行判断
	2.2 当无条件时那么就判断1=1 or 1=2 ,最终会因为判断1=1而查询所有记录
	2.3 当选择了一个条件那么就判断 某某条件 or 1=2,最终会因为判断1=2而只执行前面一个条件
	
  @Select({""})
	以下是该方法的两种入参写法	   
	List getUnderstockList(@Param("itemCode") String itemCode);  
	如果参数是基本类型(String, int等等)	,那么最好加上@Param("itemCode"),
	否则会报错 There is no getter for property named ‘itemCode‘ in ‘class java.lang.String
	
	又或者直接使用实体进行入参,这样就什么问题都没了
	List getUnderstockList(Item i) ;




你可能感兴趣的:(java,数据库相关,mybatis,sql,数据库)