MyBatis 動態SQL查詢,多條件,分頁


<?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 );

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM