目录
写mybatis时,总会有很多的 可以总结的经验
传入HashMap
HashMap<String ,Object> map=new ..
map.put("id",3);
map.put("lower_name","我");
map.put("deptName","你");
// 中
<select id="getList" parameterType="java.util.HashMap" resultType="com.vo.TmpAticVo" >
select
a.temp_match_id as tempMatchId,
a.user_id as userId // 直接将 userId 转化成了 Vo中 属性值
from User a
where a.id=#{id}
<if test="lower_name != null and lower_name != ''">
and a.lower_name like '%${lower_name}%'
</if>
<if test="deptName != null and deptName != '' " > and b.dept_name like '%'||#{deptName}||'%'
</if>
如图在 id=#{id}时, java会主动 将 传入的 Object 中 传入的 3 默认成了 int 或者 bigint,但是 如果 此时 数据库中 的 id 不是一个 int,那么 就会 出现 报错,所以 采用 HashMap
传入的是HashMap
传入的Map
遇到
Map map=new
map.put("id",12)
因为 没有指定类型, 可能会出现
bigint=String 的情况,这样传入肯定报错,
不指定类型,mybatis 会默认当 String处理,从而报错
遇到批量插入
List<TblBonusPoolInfo> df=new ArrayList<>();
TblBonusPoolInfo model=new TblBonusPoolInfo();
model.setBonusPoolName("nimei3");
TblBonusPoolInfo model2=new TblBonusPoolInfo();
model2.setBonusPoolName("nimei2");
df.add(model);
df.add(model2);
int i=mapper.insertBatch(df);
传入的 是一个list
在pgsql中,需要指定 自增长的 sequece
<insert id="insertBatch" parameterType="java.util.List">
<selectKey resultType="java.lang.Long" keyProperty="bonusId" order="AFTER" >
SELECT currval('id_seqs')
</selectKey>
INSERT INTO tbl_bonus_pool_info( bonus_pool_name) VALUES
<foreach collection="list" item="u" separator=",">
(#{u.bonusPoolName})
</foreach>
</insert>
传入一个List
List list= new ArrayList();
list.add(1); list.add(11);
list.add(18); list.add(12);
Map na=new HashMap();
na.put("list",list);
na.put("period",11);
List<TblBonusPoolInfo> df=mapper.getByTest(na);
传入和传出都是 map
而且你可以 随便写sql ,不考虑 转义
<select id="getList"
parameterType="java.util.HashMap"
resultType="java.util.HashMap">
<![CDATA[ SELECT
a.bonus_id bonusId,
a.bonus_pool_name bonusPoolName
from
tbl_bonus_pool_info a ]]>
</select >
自定义 复用语句
<select id="getSupervisorAllEmp" parameterType="java.lang.String"
resultType="com.baozun.vo.TreeVo" >
SELECT * from (
select a.id,a.pid as pId,
concat_ws('_',a.name,a.status) as name,
a.click,a.level,a.title ,a.rownums
from ( <include refid="supervisorList" /> ) a
) a
</select>
include的具体 语句如下
<sql id="supervisorList">
select a.emp_code as id,
a.emp_first_dept_code as pid,
concat_ws('_',a.emp_code,a.emp_name) as name ,
(case when a.status ='1'
then '在职'
else '离职'
end )as status ,
'emp' as title,
(row_number() OVER (ORDER BY a.emp_first_dept_code)+ 30000) as rownums
from tbl_emp_basic_info a
limit 1 )
</sql>