mybatis——mapper⽂件详解
本⽂的写作⽬的主要是带⼤家了解mapper的写法
表结构:
CREATE TABLE customer (
id int(11) NOT NULL COMMENT ‘企业⽤户ID’,
name varchar(45) DEFAULT NULL COMMENT ‘名称’,
logo varchar(80) DEFAULT ‘’ COMMENT ‘企业标识’,
describe varchar(500) DEFAULT ‘’ COMMENT ‘企业班车说明’,
is_enable tinyint(1) DEFAULT ‘0’ COMMENT ‘是否启⽤ 1=启⽤ 0=不启⽤’,
phone varchar(20) DEFAULT NULL COMMENT ‘’,
admin varchar(50) DEFAULT NULL COMMENT ‘管理员账号’,php轻论坛源码
password varchar(80) DEFAULT NULL COMMENT ‘管理员密码’,
uuid varchar(80) DEFAULT NULL COMMENT ‘企业唯⼀ID’,
PRIMARY KEY (id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ;
Mapper映射⽂件是在实际开发过程中使⽤最多的。Mapper⽂件中包含的元素有:cache – 配置给定命名空间的缓存。
cache-ref – 从其他命名空间引⽤缓存配置。
resultMap – 映射复杂的结果对象。
sql – 可以重⽤的 SQL 块,也可以被其他语句引⽤。
insert – 映射插⼊语句
update – 映射更新语句
delete – 映射删除语句
select – 映射查询语句
本⽂的代码都是⽤mybatis-generator⽣成的注释部分是博主⾃⼰加的:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-////DTD Mapper 3.0//EN" "/dtd/mybatis-3-mapper.dtd"> <!--
namespace绑定了与之对应的接⼝,值是该接⼝的全限定名;这个参数有且只有⼀个
-->
<mapper namespace="cn.rainbowbus.dao.CustomerMapper">
<!--
⽤来描述select语句返回字段与java属性的映射关系。
可以有多个resultMap标签,⽤不同id区分不同标签。
可以实现⼀对多,多对多关系
-->
<resultMap id="BaseResultMap"type="ity.Customer">
<!--
column是表中的字段名。
property是对应的java属性。
jdbcTyep: 数据库中字段类型,它与Java中属性类型有对应关系,详情看下表。
id:数据库主键字段。
result:普通字段。
mysql语句的执行顺序⼀对多标签 :
collection> property:对应的java属性名  ofType:对应的java属类型
<id property="java属性" column="author_third_id" jdbcType="BIGINT"/>
<result property="java属性" column="account_id" jdbcType="VARCHAR"/>
-->
<id column="id"jdbcType="INTEGER"property="id"/>
<result column="name"jdbcType="VARCHAR"javaType="string"property="name"/>
<result column="logo"jdbcType="VARCHAR"property="logo"/>
<result column="describe"jdbcType="VARCHAR"property="describe"/>
<result column="is_enable"jdbcType="BIT"property="isEnable"/>
<result column="is_enable"jdbcType="BIT"property="isEnable"/>
<result column="phone"jdbcType="VARCHAR"property="phone"/>
<result column="admin"jdbcType="VARCHAR"property="admin"/>
<result column="password"jdbcType="VARCHAR"property="password"/>
<result column="uuid"jdbcType="VARCHAR"property="uuid"/>
</resultMap>
<!--
可以重⽤的 SQL 块,也可以被其他语句引⽤。
-->
<sql id="Example_Where_Clause">
<where>/* where 可以⾃动去除sql语句where关键字后的and关键字*/
/*
向sql传递数组或List,  mybatis使⽤foreach解析,可以做批量处理。
collection:传⼊的集合的变量名称(要遍历的值)。
item:每次循环将循环出的数据放⼊这个变量中。
open:循环开始拼接的字符串。
close:循环结束拼接的字符串。
separator:循环中拼接的分隔符。
*/
<foreach collection="oredCriteria"item="criteria"separator="or">
/*
判断语句,test值等于true执⾏等于false跳过
test可以是⼀个值为Boolean型的计算语句
*/
<if test="criteria.valid">
/*
前缀'and' 被'('  替换
prefix:前缀覆盖并增加其内容不写的话默认替换为空
suffix:后缀覆盖并增加其内容不写的话默认替换为空
prefixOverrides:前缀判断的条件
suffixOverrides:后缀判断的条件
*/
<trim prefix="("prefixOverrides="and"suffix=")">
<foreach collection="iteria"item="criterion">
/*
choose 是或(or)的关系。
choose标签是按顺序判断其内部when标签中的test条件出否成⽴,如果有⼀个成⽴,则 choose 结束。
当 choose 中所有 when 的条件都不满则时,则执⾏ otherwise 中的sql。
类似于Java 的 switch 语句,choose 为 switch,when 为 case,otherwise 则为 default。
*/
<choose>
<when test="Value">
and ${dition}
</when>
<when test="criterion.singleValue">
and ${dition} #{criterion.value}
</when>
<when test="criterion.betweenValue">
and ${dition} #{criterion.value} and #{criterion.secondValue}
</when>
<when test="criterion.listValue">
and ${dition}
<foreach close=")"collection="criterion.value"item="listItem"open="("separator=",">
#{listItem}
</foreach>
</when>
</choose>
</foreach>
</trim>
</if>
</foreach>
</where>
</sql>
<sql id="Update_By_Example_Where_Clause">
<where>
<foreach collection="dCriteria"item="criteria"separator="or">
<if test="criteria.valid">
<trim prefix="("prefixOverrides="and"suffix=")">
<foreach collection="iteria"item="criterion">
<choose>
<when test="Value">
and ${dition}
</when>
<when test="criterion.singleValue">
and ${dition} #{criterion.value}
</when>
<when test="criterion.betweenValue">
and ${dition} #{criterion.value} and #{criterion.secondValue}
</when>
<when test="criterion.listValue">
and ${dition}
<foreach close=")"collection="criterion.value"item="listItem"open="("separator=",">
#{listItem}
</foreach>
</when>
</choose>
</foreach>
</trim>
</if>
</foreach>
</where>
</sql>
<sql id="Base_Column_List">
<if test="fields == null">
id, name, logo, describe, is_enable, phone, admin, password, uuid
</if>
<if test="fields != null">
${fields}
</if>
</sql>
<!--
select查询语句标签
行内块元素有哪些标签id: 与namespace接⼝中的⽅法名对应
parameterType: 参数类型
resultMap : 返回值类型
⾃增IDset到对象中: useGeneratedKeys="true" keyProperty="id" keyColumn="id"
⽀持类型简写,详情看下表
-->
鼠标禁用一键解除
<select id="selectByExample"useGeneratedKeys="true"keyProperty="id"keyColumn="id"parameterType="ity.CustomerExample"resu ltMap="BaseResultMap">
select
<if test="distinct">
distinct
</if>
<include refid="Base_Column_List"/>/*引⼊⼀个SQL模块*/
from customer
<if test="_parameter != null">
<include refid="Example_Where_Clause"/>
</if>
<if test="orderByClause != null">
order by ${orderByClause}
</if>
<if test="startRow != null">
limit #{startRow} , #{pageSize}
</if>
</select>
<select id="selectByPrimaryKey"parameterType="java.lang.Integer"resultMap="BaseResultMap">
select
id,name,logo,describe,is_enable,phone,admin,password,uuid
from customer
where id = #{id,jdbcType=INTEGER}
where id = #{id,jdbcType=INTEGER}
</select>
<!--
delete删除语句标签
id: 与namespace接⼝中的⽅法名对应
parameterType: 参数类型
-->
<delete id="deleteByPrimaryKey"parameterType="java.lang.Integer">
delete from customer
where id = #{id,jdbcType=INTEGER}
</delete>
<delete id="deleteByExample"parameterType="ity.CustomerExample">
delete from customer
<if test="_parameter != null">
<include refid="Example_Where_Clause"/>
</if>
</delete>
<!--插⼊语句-->
<insert id="insert"parameterType="ity.Customer">
insert into customer (id, name, logo,
describe, is_enable, phone,
admin, password, uuid
)
values (#{id,jdbcType=INTEGER}, #{name,jdbcType=VARCHAR}, #{logo,jdbcType=VARCHAR},      #{describe,jdbcType=VARCHAR}, #{isEnable,jdbcType=BIT}, #{phone,jdbcType=VARCHAR},      #{admin,jdbcType=VARCHAR}, #{password,jdbcType=VARCHAR}, #{uuid,jdbcType=VARCHAR}      )
</insert>
<insert id="insertSelective"parameterType="ity.Customer">
史上最详细vba
insert into customer
<trim prefix="("suffix=")"suffixOverrides=",">
<if test="id != null">
id,
</if>
<if test="name != null">
name,
</if>
<if test="logo != null">
logo,
</if>
<if test="describe != null">
describe,
</if>
<if test="isEnable != null">
is_enable,
</if>
<if test="phone != null">
phone,
</if>
<if test="admin != null">
admin,
</if>
<if test="password != null">
password,
</if>
<if test="uuid != null">
uuid,
</if>
</trim>
<trim prefix="values ("suffix=")"suffixOverrides=",">
<if test="id != null">
#{id,jdbcType=INTEGER},
</if>
<if test="name != null">
#{name,jdbcType=VARCHAR},
#{name,jdbcType=VARCHAR},
</if>
<if test="logo != null">
#{logo,jdbcType=VARCHAR},
</if>
<if test="describe != null">
日期时间函数year计算工龄#{describe,jdbcType=VARCHAR},
</if>
<if test="isEnable != null">
#{isEnable,jdbcType=BIT},
</if>
<if test="phone != null">
#{phone,jdbcType=VARCHAR},
</if>
<if test="admin != null">
#{admin,jdbcType=VARCHAR},
</if>
<if test="password != null">
#{password,jdbcType=VARCHAR},
</if>
<if test="uuid != null">
#{uuid,jdbcType=VARCHAR},
</if>
</trim>
</insert>
<select id="countByExample"parameterType="ity.CustomerExample"resultType="java.lang.Long">    select count(*) from customer
<if test="_parameter != null">
<include refid="Example_Where_Clause"/>
</if>
</select>
<update id="updateByExampleSelective"parameterType="map">
update customer
<set>
<if test="record.id != null">
id = #{record.id,jdbcType=INTEGER},
</if>
<if test="record.name != null">
name = #{record.name,jdbcType=VARCHAR},
</if>
<if test="record.logo != null">
logo = #{record.logo,jdbcType=VARCHAR},
</if>
<if test="record.describe != null">
describe = #{record.describe,jdbcType=VARCHAR},
</if>
<if test="record.isEnable != null">
is_enable = #{record.isEnable,jdbcType=BIT},
</if>
<if test="record.phone != null">
phone = #{record.phone,jdbcType=VARCHAR},
</if>
<if test="record.admin != null">
admin = #{record.admin,jdbcType=VARCHAR},
</if>
<if test="record.password != null">
password = #{record.password,jdbcType=VARCHAR},
</if>
<if test="record.uuid != null">
uuid = #{record.uuid,jdbcType=VARCHAR},
</if>
</set>
<if test="_parameter != null">
<include refid="Update_By_Example_Where_Clause"/>
</if>
</update>

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。