1、注意的地方
1. 如果有多个参数传入怎么写parameterType
其实这个parameterType可以不写,
传入参数能封装尽量封装,如果封装不了传入多个参数也是可以的
2. 插入语句之后如何得到自增主键的值
这个mybatis专门做了解决。
- useGeneratedKeys设为true
- keyProperty的值为要插入的表的主键属性名
<insert id="addmeeting" useGeneratedKeys="true" keyProperty="meetingid" parameterType="com.miao.meeting.model.Meeting">
insert into meeting(meetingname,roomid,reservationistid,numberofparticipants,starttime,endtime,reservationtime,description) values(#{meetingname},#{roomid},#{reservationistid},#{numberofparticipants},#{starttime},#{endtime},#{reservationtime},#{description});
</insert>
注意:
这样插入语句返回的并不是主键值(与原来的值无异),通过插入的对象的get方法获得主键。
例:
meeting是要插入的属性封装好的对象
//插入会议
meetingMapper.addmeeting(meeting);
//获得会议id
int meetingid = meeting.getMeetingid();
datetime条件查询
对数据库里面的datetime在进行条件查询时,用字符串查询即可(字符串的正确格式yyyy-MM-dd HH:mm:ss)
相反如果java用Date类型还要进行各式转换才行
SELECT * FROM meeting WHERE starttime BETWEEN '2013-05-30 14:00:00' AND '2018-05-30 16:00:00';
甚至查询的时候字符串可只有年月日
SELECT * FROM meeting WHERE starttime > '2015-01-12'
注意:
mybatis文件里面有一些特殊符号
比如小于号
在查询时是不能这样写的
SELECT * FROM meeting WHERE starttime < '2015-01-12'
"<"会报错
有两种解决办法
- 用特殊符号的替代符号
特殊字符 | 替代符号 |
---|---|
& | & |
< | < |
> | > |
" | " |
’ | ' |
- 使用
<![CDATA[ ]]>
方括号内放特殊字符
mybatis 使用模糊查询
SELECT * FROM meeting WHERE meetingname LIKE '%#{xxx}%';
我这样试了是不行的
这时候可以用concat
SELECT * FROM meeting WHERE meetingname like concat('%',#{meetingname},'%');
动态sql
不知道为什么我看别人判断都是
<if test="roomid != null">
and roomid = #{roomid}
</if>
我这样写怎么查都会报错
然后我打印了一下前端传过来的数据发现并不是null
而是空
然后就改成下面就没问题了
<if test="roomid != null and roomid != '' ">
and roomid = #{roomid}
</if>
注意:这里要用and连接 不能用&&