在MyBatis中,使用XML配置進行LIKE
查詢是一個常見的需求。以下是一個簡單的例子,展示如何在MyBatis的XML對映檔案中進行LIKE
查詢。
假設我們有一個使用者表users
,包含欄位id
, name
, email
等,現在我們需要根據使用者名稱的一部分來查詢使用者列表。
1. 建立SQL對映檔案(UserMapper.xml)
在你的對映檔案中,你可以這樣定義一個LIKE
查詢:
<?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="findUsersByName" parameterType="java.lang.String" resultType="com.example.model.User">
SELECT id, name, email
FROM users
WHERE name LIKE CONCAT('%', #{name}, '%')
</select>
</mapper>
2. 建立Mapper介面(UserMapper.java)
接下來,你需要建立對應的Mapper介面:
package com.example.mapper;
import com.example.model.User;
import org.apache.ibatis.annotations.Param;
import java.util.List;
public interface UserMapper {
List<User> findUsersByName(@Param("name") String name);
}
3. 建立User模型(User.java)
確保你有一個User類來對映資料庫表中的欄位:
package com.example.model;
public class User {
private Long id;
private String name;
private String email;
// Getters and Setters
}
4. 配置MyBatis
確保你的MyBatis配置檔案(如mybatis-config.xml
)已經正確配置,並且包含了你的Mapper檔案。
5. 使用Mapper
最後,你可以在你的服務或控制器中使用UserMapper
來進行查詢:
package com.example.service;
import com.example.mapper.UserMapper;
import com.example.model.User;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import java.util.List;
public class UserService {
private SqlSessionFactory sqlSessionFactory;
public UserService(SqlSessionFactory sqlSessionFactory) {
this.sqlSessionFactory = sqlSessionFactory;
}
public List<User> searchUsersByName(String name) {
try (SqlSession session = sqlSessionFactory.openSession()) {
UserMapper userMapper = session.getMapper(UserMapper.class);
return userMapper.findUsersByName(name);
}
}
}
注意事項
- SQL隱碼攻擊防護:雖然MyBatis內建了引數繫結機制以防止SQL隱碼攻擊,但在處理
LIKE
查詢時,確保不要直接拼接使用者輸入的值,而是使用引數繫結(如#{name}
)。 - 效能最佳化:
LIKE '%xxx%'
這種查詢會導致全表掃描,效能較差。如果查詢效能是關鍵,考慮使用全文索引或其他最佳化手段。
透過以上步驟,你應該能夠在MyBatis中使用XML配置進行LIKE
查詢。