动态SQL<choose>使用
下文笔者讲述mybatis中choose标签的使用简介说明,如下所示
使用MyBatis`<choose>`元素构建动态SQL
例
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的使用
版权声明
本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。