动态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的使用
版权声明
本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。


