<?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="cn.bdqn.mybatis.mapper.CameraMapper"> <!-- 關鍵是where部分,得根據條件的有效性進行判斷 使用where標簽動態做--> <select id="findCamera" resultType="Camera"> SELECT id, typeId, brandId, title, pixel, zoom, price, color FROM Camera <where> <if test="typeId!=null">typeId=#{typeId}</if> <if test="brandId!=null">and brandId=#{brandId}</if> <!-- 由於標簽就是由<>組成的,在xml文件中是具有特殊含義的字符,在解析xml時發生錯誤,解析器xmlcdata塊中是普通的字符 --> <if test="pixel!=null"><![CDATA[and pixel>=#{pixel}]]></if> <if test="zoom!=null"><![CDATA[and zoom>=#{zoom}]]></if> <if test="price!=null"><![CDATA[and price<=#{price}]]></if> <if test="color!=null">and color like #{color}</if> <if test="title!=null">and title like #{title}</if> </where> ORDER BY id </select> </mapper>
package cn.bdqn.mybatis.mapper;
import java.util.List;
import org.apache.ibatis.annotations.Param;
import cn.bdqn.mybatis.entity.Camera;
import cn.bdqn.mybatis.entity.Grade;
import cn.bdqn.mybatis.entity.User;
//通過接口里邊的抽象方法來調用對應的語句
//接口對應映射文件----把SQL語句的命名空間設置成接口的完整類名
//相當於原來dao層,我只需要定義dao接口,那具體的實現類現在不用咱自己寫了,只需拿到mapper接口類即可 省了很多事,提高開發效率
public interface CameraMapper {
//根據條件搜索,mybatis不會自動識別我要對應到哪個屬性上,需要添加注解
public List<Camera> findCamera(
@Param("typeId") Long typeId,
@Param("brandId") Long brandId,
@Param("pixel") Integer pixel,
@Param("zoom") Double zoom,
@Param("price") Double price,
@Param("color") String color,
@Param("title") String title
);
}
mybatis自帶的分頁機制不推薦使用:首先會用sql語句,把數據庫中所有數據加載回內存,再用我指定的頁號、每頁行數在內存中把那一頁的數據提取出來。效率差。
更好的分頁,在查詢的時候,把我想看的分頁語句只顯示出來。自己手寫底層分頁語句。借助插件機制,自己寫一個分頁插件(可能公司有自己的分頁插件)
第一步:添加分頁插件
mybatis的特點就是專注於執行語句的效率
在配置文件中,環境上邊配置插件
<plugins> <plugin interceptor="cn.bdqn.mybatis.plugin.PaginationInterceptor"> <property name="dialectClass" value="cn.bdqn.mybatis.plugin.MySQLDialect"/> //分頁插件支持兩種方言類 oracle和mysql </plugin> </plugins>
public List<Camera> findCamera(
//cn.bdqn.mybatis.plugin.中存在PageParam這個類 @Param("pageParam") PageParam param, 名字必須叫"pageParam" @Param("typeId") Long typeId, @Param("brandId") Long brandId, @Param("pixel") Integer pixel, @Param("zoom") Double zoom, @Param("price") Double price, @Param("color") String color, @Param("title") String title );