版权声明:wslixiaoliang https://blog.csdn.net/wslixiaoliang/article/details/82984132
1.简介
什么是 MyBatis ?
MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以使用简单的 XML 或注解来配置和映射原生信息,将接口和 Java 的 POJOs(Plain Old Java Objects,普通的 Java对象)映射成数据库中的记录。
2.Mapper XML 映射文件
MyBatis 的真正强大在于它的映射语句,也是它的魔力所在。由于它的异常强大,映射器的 XML 文件就显得相对简单。如果拿它跟具有相同功能的 JDBC 代码进行对比,你会立即发现省掉了将近 95% 的代码。MyBatis 就是针对 SQL 构建的,并且比普通的方法做的更好。
SQL 映射文件有很少的几个顶级元素(按照它们应该被定义的顺序):
cache – 给定命名空间的缓存配置。
cache-ref – 其他命名空间缓存配置的引用。
resultMap – 是最复杂也是最强大的元素,用来描述如何从数据库结果集中来加载对象。
parameterMap – 已废弃!老式风格的参数映射。内联参数是首选,这个元素可能在将来被移除,这里不会记录。
sql – 可被其他语句引用的可重用语句块。
insert – 映射插入语句
update – 映射更新语句
delete – 映射删除语句
select – 映射查询语句
3.元素的应用
(1)select 元素:查询
<!--1.根据关键词ID查询关键词 -->
<select id="getKeywordById" resultMap="ResultMap" parameterType="java.util.Map" >
SELECT
KYWDS_ID,
KYWDS_NM,
CHNL_CODE,
REGN_ID,
TOTAL_SERCH_QUT,
MON_SERCH_QUT,
WEEK_SERCH_QUT,
DAILY_SERCH_QUT,
CRT_TIME,
INVLD_TIME,
OP_PRSN_ID,
TENANT_ID
FROM t_km_key_word_statis
WHERE 1=1
<if test="keywordIds !=null and keywordIds.size() > 0">
AND KYWDS_ID IN
<foreach item="keywordId" index="index" collection="keywordIds" open="(" separator="," close=")">
#{keywordId}
</foreach>
</if>
</select>
<!--2.查询总条数 -->
<select id="getTotalCount" parameterType="java.util.Map" resultType="java.lang.Integer">
select count(*) from t_km_key_word_statis
WHERE 1=1
<if test="keywordName !=null and keywordName!=''">
AND KYWDS_NM LIKE '%{keywordName}%'
</if>
<if test="rangeId !=null and rangeId!=''">
AND REGN_ID = #{rangeId}
</if>
<if test="statusCode !=null and statusCode == 1">
AND INVLD_TIME >= now()
</if>
<if test="statusCode !=null and statusCode == 2 ">
AND INVLD_TIME < now()
</if>
<if test="operPersonId !=null and operPersonId!=''">
AND OP_PRSN_ID = #{operPersonId}
</if>
</select>
<!--3.查询关键词是否存在 -->
<select id="getSameKeyword" parameterType="java.util.Map" resultType="java.lang.String">
SELECT KYWDS_NM FROM t_km_key_word_statis
WHERE 1=1
AND KYWDS_NM = #{keywordName}
AND REGN_ID = #{rangeId}
AND CHNL_CODE = #{channelCode}
AND INVLD_TIME >= now()
</select>
<!--4.关键词维护页面:条件查询 -->
<select id="getKeywordsByCondition" parameterType="java.util.Map" resultMap="ResultMap">
SELECT
KYWDS_ID,
KYWDS_NM,
CHNL_CODE,
REGN_ID,
TOTAL_SERCH_QUT,
MON_SERCH_QUT,
WEEK_SERCH_QUT,
DAILY_SERCH_QUT,
CRT_TIME,
INVLD_TIME,
OP_PRSN_ID,
TENANT_ID
FROM t_km_key_word_statis
WHERE 1=1
<if test="keywordName !=null and keywordName!=''">
AND KYWDS_NM LIKE concat("%",#{keywordName},"%")
</if>
<if test="rangeId !=null and rangeId!=''">
AND REGN_ID = #{rangeId}
</if>
<if test="statusCode !=null and statusCode == 1">
AND INVLD_TIME >= now()
</if>
<if test="statusCode !=null and statusCode == 2 ">
AND INVLD_TIME < now()
</if>
<if test="operPersonId !=null and operPersonId!=''">
AND OP_PRSN_ID = #{operPersonId}
</if>
ORDER BY CRT_TIME DESC
LIMIT #{start}, #{limit}
</select>
(2)insert 元素:新增
<!--5.新增关键词-->
<insert id="addKeyword" parameterType="java.util.Map" >
INSERT INTO t_km_key_word_statis
<trim prefix="(" suffix=")" suffixOverrides="," >
<if test="keywordId != null and keywordId!=''" >
KYWDS_ID,
</if>
<if test="keywordName != null and keywordName!=''" >
KYWDS_NM,
</if>
<if test="rangeId != null and rangeId!=''" >
REGN_ID,
</if>
<if test="createTime != null and createTime!=''" >
CRT_TIME,
</if>
<if test="invildTime != null and invildTime!=''" >
INVLD_TIME,
</if>
<if test="channelCode != null and channelCode!=''" >
CHNL_CODE,
</if>
<if test="operPersonId != null and operPersonId!=''" >
OP_PRSN_ID,
</if>
</trim>
<trim prefix="values (" suffix=")" suffixOverrides="," >
<if test="keywordId != null and keywordId!=''" >
#{keywordId,jdbcType=BIGINT},
</if>
<if test="keywordName != null and keywordName!=''" >
#{keywordName,jdbcType=VARCHAR},
</if>
<if test="rangeId != null and rangeId!=''" >
#{rangeId,jdbcType=VARCHAR},
</if>
<if test="createTime != null and createTime!=''" >
#{createTime,jdbcType=TIMESTAMP},
</if>
<if test="invildTime != null and invildTime!=''" >
#{invildTime,jdbcType=TIMESTAMP},
</if>
<if test="channelCode != null and channelCode!=''" >
#{channelCode,jdbcType=VARCHAR},
</if>
<if test="operPersonId != null and operPersonId!=''" >
#{operPersonId,jdbcType=VARCHAR},
</if>
</trim>
</insert>
(3)update 元素:修改
<!--6.修改/逻辑删除关键词-->
<update id="updateKeywordsById" parameterType="java.util.Map" >
UPDATE t_km_key_word_statis
<set >
<if test="invildTime != null and invildTime!=''" >
INVLD_TIME = #{invildTime,jdbcType=TIMESTAMP},
</if>
</set>
WHERE 1=1
<if test="keywordIds !=null and keywordIds.size() > 0">
AND KYWDS_ID IN
<foreach item="keywordId" index="index" collection="keywordIds" open="(" separator="," close=")">
#{keywordId}
</foreach>
</if>
</update>
(4)delete 元素:删除
<!--7.物理删除关键词-->
<delete id="removeKeywordsById" parameterType="java.util.Map" >
DELETE FROM t_km_key_word_statis
WHERE KYWDS_ID IN
<foreach item="keywordId" index="index" collection="keywordIds" open="(" separator="," close=")">
#{keywordId}
</foreach>
</delete>
(5)sql 元素:通用语句块
<sql id="userColumns"> ${alias}.id,${alias}.username,${alias}.password </sql>
<select id="selectUsers" resultType="map">
select
<include refid="userColumns"><property name="alias" value="t1"/></include>,
<include refid="userColumns"><property name="alias" value="t2"/></include>
from some_table t1
cross join some_table t2
</select>
4.结果集
<resultMap id="ResultMap" type="com.cmos.ngkm.beans.portalnew.Keyword" >
<id column="KYWDS_ID" property="keywordId" /><!--关键词ID-->
<result column="KYWDS_NM" property="keywordName"/><!--关键词名称-->
<result column="CHNL_CODE" property="channelCode"/><!--渠道编码-->
<result column="REGN_ID" property="rangeId"/><!--归属省份-->
<result column="TOTAL_SERCH_QUT" property="totalClick"/><!--总搜索量-->
<result column="MON_SERCH_QUT" property="monthClick"/><!--月搜索量-->
<result column="WEEK_SERCH_QUT" property="weekClick"/><!--周搜索量-->
<result column="DAILY_SERCH_QUT" property="daylyClick" /><!--日搜索量-->
<result column="CRT_TIME" property="createTime" /><!--创建时间-->
<result column="INVLD_TIME" property="invildTime" /><!--失效时间-->
<result column="OP_PRSN_ID" property="operPersonId" /><!--操作人-->
<result column="TENANT_ID" property="tenantId" /><!--租户ID-->
</resultMap>
//Mapper XML对应返回值类型:
1. resultMap : 结果集[对象等]
若返回值为:List<Keyword>
则结果集应为:resultMap:ResultMap
2. resultType : Integer,String ,Long
若返回值为:List<String>
则结果集应为:resultType:java.lang.String
写成java.util.List就会报错!
扫描二维码关注公众号,回复:
3572963 查看本文章