1 基础操作
本篇基于以上内容mybatis入门demo,上面大概介绍了下,mybatis的基本使用,但是遇到查询字段比较多,则需要不停set值,太麻烦,另外就是只支持单表查询,不灵活。利用mapper,则可以完美弥补这些。可以再mapper里写sql语句,然后对应到dao层接口,被业务代码调用。以下就是个mapper,可仿照修改以便使用。
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//ibatis.apache.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
//此处写本mapper对应的dao层接口所在位置
<mapper namespace="com.js.dao.CallDetailDao">
//如果有返回值较多,可定义类似于实体Vo来存储。
<resultMap type="CallDetail" id="callDetailResult">
<id column="IID" property="iid"/>
<result column="CALL_ID" property="callId"/>
<result column="FILE_STORE" property="filePath"/>
<result column="CALL_CONTENT" property="text"/>
</resultMap>
//入参是CallDetail实体Vo,可在以下直接写实体字段名来取值
<insert id="insert" parameterType="CallDetail">
insert into call_detail
(
IID,
CALL_ID
)
values
(
#{iid},
#{callId}
)
</insert>
//返回结果字段较多,则利用了上面定义的实体callDetailResult
<select id="getCallDetailByCallId" parameterType="string" resultMap="callDetailResult">
select IID,CALL_ID,FILE_STORE,CALL_CONTENT from call_detail WHERE CALL_ID = #{value}
</select>
<update id="updateCallDetail" parameterType="CallDetail">
update call_detail set
FILE_STORE = #{filePath,jdbcType=VARCHAR},
CALL_CONTENT = #{text,jdbcType=VARCHAR}
where CALL_ID = #{callId}
</update>
//如果返回只是一个String字段,则直接用String参数,结果是List<String>,业务代码里做处理
<select id="getCallFileStore" parameterType="string" resultType="string">
select FILE_STORE from call_detail WHERE CALL_ID = #{value}
</select>
<delete id="delCallDetail" parameterType="string">
delete from call_detail where CALL_ID = #{value}
</delete>
</mapper>
然后Dao层接口,与一般dao层一致,mapper里写的配置id即是dao层接口diamante的方法名,如下::
public interface CallDetailDao {
/*
* @param callDetail
*/
void insert(CallDetail callDetail);
CallDetail getCallDetailByCallId(String callId);
void updateCallDetail(CallDetail callDetail);
String getCallFileStore(String callId);
String getCallContent(String callId);
void delCallDetail(String callId);
List<CallDetail> getAllFileStore();
List<CallDetail> getOneFileStore(String callId);
}
当然,如果入参是用的不是实体,而是几个参数的话,倒是也可以这样写,以param+数字的形式表示先后顺序,如下:
<update id="updateSensitiveWord" parameterType="string" >
update sensitive_word set
<if test="param2 != '' and param2 != null">
word=#{param1}
</if>
<where>
<if test="param1 != '' and param1 != null">
word=#{param2}
</if>
</where>
</update>
2 批量操作
2.1 批量新增
<insert id="insertUsers" parameterType="java.util.List">
insert into `user_info` (username,password,active,license_auth,login_count,last_login,create_time) values
<foreach collection="list" index="index" separator="," item="item">
(#{item.username},#{item.password},#{item.active},#{item.licenseAuth},#{item.loginCount},#{item.lastLogin},#{item.createTime})
</foreach>
</insert>
DAO层
int insertUsers(List<UserInfo> users);
2.2 批量删除
<delete id="deleteByUserNames" parameterType="java.util.List">
delete from user_info
where username in
<foreach collection="list" item="usernameItem" open="(" separator="," close=")">
#{usernameItem}
</foreach>
</delete>
DAO层
int deleteByUserNames(List<String> userNames);