mybatis like 查詢的例子

del88發表於2024-10-05

在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);
        }
    }
}

注意事項

  1. SQL隱碼攻擊防護:雖然MyBatis內建了引數繫結機制以防止SQL隱碼攻擊,但在處理LIKE查詢時,確保不要直接拼接使用者輸入的值,而是使用引數繫結(如#{name})。
  2. 效能最佳化LIKE '%xxx%'這種查詢會導致全表掃描,效能較差。如果查詢效能是關鍵,考慮使用全文索引或其他最佳化手段。

透過以上步驟,你應該能夠在MyBatis中使用XML配置進行LIKE查詢。

相關文章