MyBatis(多表联合、动态sql)

文章介绍了MyBatis中的动态SQL特性,如何根据条件生成不同SQL语句,避免了手动拼接SQL的麻烦。重点讲解了`<where>`和`<if>`标签的使用,以及它们在简化复杂查询条件中的作用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在数据库中创建数据和sql语句

#部门表
drop table if exists dept;
create table dept(
did int primary key,
dname varchar(20),
dinfo varchar(50)
);

insert into dept values(101,'市场部','负责公司市场的开拓');
insert into dept values(102,'产品部','负责公司产品的营销');
insert into dept values(103,'研发部','负责公司产品的研发');
insert into dept values(104,'测试部','负责公司产品的测试');

select * from dept;

select * from dept where did=102


#员工表
drop table if exists emp;
create table emp(
eid int primary key auto_increment,
ename varchar(20),
job varchar(20),
sal double,
phone varchar(11),
address varchar(50),
did int
);

insert into emp(ename,job,sal,phone,address,did)values('赵德保','市场专员',4600,'15785642139','信阳',101);
insert into emp(ename,job,sal,phone,address,did)values('刘瑞琳','市场经理',7600,'17956248563','商丘',101);
insert into emp(ename,job,sal,phone,address,did)values('张翠萍','产品设计师',5800,'15821563548','郑州',102);
insert into emp(ename,job,sal,phone,address,did)values('刘长河','产品经理',9800,'15821563548','洛阳',102);
insert into emp(ename,job,sal,phone,address,did)values('李耀菲','开发工程师',8800,'13658942168','许昌',103);
insert into emp(ename,job,sal,phone,address,did)values('王长林','项目经理',15800,'13954865721','南阳',103);
insert into emp(ename,job,sal,phone,address,did)values('陈清泰','测试工程师',5300,'13785463249','周口',104);
insert into emp(ename,job,sal,phone,address,did)values('杨国华','测试经理',9800,'13785463249','驻马店',104);


select * from emp;

select * from emp inner join dept on emp.did=dept.did where eid=4

在文件src下放置外部文件

核心配置(位置于jdbc.properties相同)

实体类

定义接口来完成映射

学生表接口和映射

最后定义测试类

1、什么是动态SQL

动态SQL指的是根据不同的查询条件 , 生成不同的Sql语句也就是复杂的SQL语句。

官网描述

MyBatis 的强大特性之一便是它的动态 SQL。如果你有使用 JDBC 或其它类似框架的经验,你就能体会到根据不同条件拼接 SQL 语句的痛苦。例如拼接时要确保不能忘记添加必要的空格,还要注意去掉列表最后一个列名的逗号。利用动态 SQL 这一特性可以彻底摆脱这种痛苦。

虽然在以前使用动态 SQL 并非一件易事,但正是 MyBatis 提供了可以被用在任意 SQL 映射语句中的强大的动态 SQL 语言得以改进这种情形。

动态 SQL 元素和 JSTL 或基于类似 XML 的文本处理器相似。在 MyBatis 之前的版本中,有很多元素需要花时间了解。MyBatis 3 大大精简了元素种类,现在只需学习原来一半的元素便可。MyBatis 采用功能强大的基于 OGNL 的表达式来淘汰其它大部分元素。

where

<where>标签只会在至少有一个子元素返回了SQL语句时,才会向SQL语句中添加where,并且如果where之后是以and或or开头,会自动将其删掉

<select id="seach" parameterType="user" resultType="user">
        select * from t_user
        <where>
            <if test="username !=null and username !='' ">
                and username like concat('%',#{username},'%')
            </if>
            <if test="address !=null and address !='' ">
                and address like concat('%',#{address},'%')
            </if>
        </where>
    </select>

if

<!-- 示例 -->
<select id="find" resultType="student" parameterType="student">
        SELECT * FROM student WHERE age >= 18
        <if test="name != null and name != ''">
            AND name like '%${name}%'
        </if>
</select>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值