您的位置:首页 > 数据库

mybatis框架用高级版1动态sql片段 where字句 和 trim 标签 分别 对单表进行增改查处理

2019-03-20 18:32 405 查看
摘要
mybatis高级版 单表 用动态 sql 片段 where字句 和 trim 标签 分别 实现查询,修改 。

第一步建表

以员工表单表为例
create table emp1(
id varchar2(20) primary key,
name varchar2(20)unique not null,
password varchar2(6) check(length(password)=6)not null,
salary number(8,2),
age varchar2(3),
sex varchar2(3) check(sex in('男','女')),
entryday date,
status varchar(2) check(status in('1','2'))
);

--创建 序列
create sequence empid_seq start with 1 increment by 1;

第二步创建库表对应的实体类

package com.entity;
import java.io.Serializable;
import java.util.Date;
//库表  Emp1 对应的实体 类
public class Empl1 implements Serializable {
private String id;
private String name;
private String password;
private double salary;
private String age;
private String sex;
//入职日期
private Date entryday;
private String status;
//有参无参 get/set tostring 方法此处省略
mybatis-config.xml 核心配置文件
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd" >
<configuration>
<!-- 读入小配置文件 -->
<properties resource="jdbc.properties"></properties>
<!-- 开启二级缓存(以及缓存默认打开) -->
<settings>
<setting name="cacheEnabled" value="true"/>
</settings>
<!-- 给实体类起别名 -->
<typeAliases>
<typeAlias type="com.entity.Empl1" alias="Empl1" />
<typeAlias type="com.entity.Identification" alias="Identification"/>
</typeAliases>
<environments default="oracle">
<environment id="oracle">
<transactionManager type="JDBC"></transactionManager>
<dataSource type="POOLED">
<property name="driver" value="${driver}"/>
<property name="url" value="${url}"/>
<property name="username" value="${user}"/>
<property name="password" value="${password}"/>
</dataSource>
</environment>
</environments>

<!-- 管理mapper文件 -->
<mappers>
<mapper resource="com/empdaotest/Emp1DaoImplTest.xml" />
</mappers>
</configuration>

创建 Dao 对应的接口 及mapper文件处理

一个方法对应一个文件 便于阅读

动态sql实现查询 两种写法
对应接口中的方法:
package com.empdaotest;
import com.entity.Empl1;
import java.util.List;
import org.apache.ibatis.annotations.Param;
public interface Emp1DaoTest {
//测试动态sql 写法一:
public Empl1 select1(@Param("id")String id,@Param("name")String name,@Param("cid")String cid);
//测试动态sql 写法二:
public Empl1 select2(@Param("id")String id,@Param("name")String name,@Param("password")String password);
}

对应mapeer文件实现的动态sql 语句
<!--将共有的查询结果进行提取-->
<sql id="Empl1_sql1">
id,name,password,salary,age,sex,entryday,status,cid
</sql>

<!-- where 子句 动态sql 写法1 -->
<select id="select1" resultType="Empl1">
select <include refid="Empl1_sql1"></include> from emp1
<where>
<if test="id!=null">
id=#{id}
</if>
<if test="name!=null">
and name = #{name}
</if>
<if test="cid">
and cid =#{cid}
</if>
</where>
</select>

<!-- 动态sql 写法2 -->
<select id="select2" resultType="Empl1">
select <include refid="Empl1_sql1"></include> from emp1
<trim prefix="where" prefixOverrides="and|or">
<if test="id!=null">
id=#{id}
</if>
<if test="name!=null">
and	name=#{name}
</if>
<if test="password!=null">
and password=#{password}
</if>
</trim>
</select>
动态 sql 实现修改 两张写法
接口同上
对应接口中的方法:
//动态 sql 对 uadate 修改字句处理  第一种形式
public void updateByIdEmp1(Empl1 emp);
//动态 sql 对 uadate 修改字句处理  第二种形式
public void updateByIdEmp2(Empl1 emp);

对应mapeer文件实现的动态sql 语句

<!-- 用动态sql 修改 update 第一种形式 -->
<update id="updateByIdEmp1" parameterType="Empl1">
update emp1
<set>
<if test="name!=null">
name=#{name},
</if>
<if test="salary!=0">
salary=#{salary},
</if>
<if test="age!=null">
age=#{age}
</if>
</set>
where id=#{id}
</update>
<!-- 用动态sql 修改 update 第二种形式-->
<update id="updateByIdEmp2" parameterType="Empl1">
update emp1
<trim prefix="set" prefixOverrides=",">
/* 解释说明:  prefix="set" 表示 字句关键字
prefixOverrides="," 指定忽略最后一个逗号
*/
<if test="name!=null">
name=#{name},
</if>
<if test="salary!=0">
salary=#{salary},
</if>
<if test="age!=null">
age=#{age}
</if>
</trim>
where id=#{id}
</update>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: