动态SQL<choose>使用

欣喜 MyBatis 发布时间:2025-02-24 10:51:48 阅读数:12632 1
下文笔者讲述mybatis中choose标签的使用简介说明,如下所示

choose简介

在Java中
  动态SQL通常与ORM框架(如MyBatis)一起使用
    MyBatis提供一种强大的方式来构建动态SQL
	 其中包括`<choose>`、`<when>`、`<otherwise>`等元素
	 类似于Java中的`switch`语句
例:
使用MyBatis`<choose>`元素构建动态SQL
有一个用户查询功能
可以根据不同的条件
 (如用户名、邮箱或手机号)进行查询
 我们可以使用`<choose>`、`<when>`和`<otherwise>`来实现这个功能。

### MyBatis Mapper XML 文件

```xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
  PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
  "http://mybatis.org/dtd/mybatis-3-mapper.dtd">

<mapper namespace="com.example.mapper.UserMapper">

  <select id="findUserByCondition" parameterType="map" 
     resultType="com.example.model.User">
    SELECT * FROM users
    WHERE 1=1
    <choose>
      <when test="username != null">
        AND username = #{username}
      </when>
      <when test="email != null">
        AND email = #{email}
      </when>
      <when test="phone != null">
        AND phone = #{phone}
      </when>
      <otherwise>
        AND status = 'active'
      </otherwise>
    </choose>
  </select>

</mapper>

源码解读

- `<choose>`: 
    类似于Java中的`switch`语句,用于根据不同的条件选择一个分支
- `<when>`: 
    类似于`switch`中的`case`,用于定义条件分支
- `<otherwise>`: 
    类似于`switch`中的`default`,
	  用于定义默认分支,当所有`<when>`条件都不满足时执行

Java Mapper接口

package com.java265.mapper;

import com.java265.model.User;
import org.apache.ibatis.annotations.Param;
import java.util.list;
import java.util.Map;

public interface UserMapper {
    List<User> findUserByCondition(Map<String, Object> params);
}

使用示例

import com.java265.mapper.UserMapper;
import com.java265.model.User;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;

import java.io.InputStream;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class Main {
    public static void main(String[] args) throws Exception {
        String resource = "mybatis-config.xml";
        InputStream inputStream = Resources.getResourceAsStream(resource);
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);

        try (SqlSession session = sqlSessionFactory.openSession()) {
            UserMapper mapper = session.getMapper(UserMapper.class);

            Map<String, Object> params = new HashMap<>();
            params.put("username", "john_doe");

            List<User> users = mapper.findUserByCondition(params);
            for (User user : users) {
                System.out.println(user);
            }
        }
    }
}

代码解析

- `mybatis-config.xml`: 
     MyBatis的配置文件,用于配置数据源、事务管理器等
- `UserMapper`: 
     MyBatis的Mapper接口,定义了查询方法
- `Main`: 
     主类,用于测试动态SQL的使用
版权声明

本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。

本文链接: https://www.Java265.com/JavaFramework/MyBatis/202502/8323.html

最近发表

热门文章

好文推荐

Java265.com

https://www.java265.com

站长统计|粤ICP备14097017号-3

Powered By Java265.com信息维护小组

使用手机扫描二维码

关注我们看更多资讯

java爱好者