mybatis如何配置mapper详解

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);
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值