直接上代碼:java
DemoMapper接口:sql
package com.mapper; import com.pojo.Goods; import java.util.List; import java.util.Map; public interface DemoMapper { /** * 經過 模糊商品名稱,供應商ID,是否付款 來查詢goods表的全部信息和provider表的名稱 * @param map * @return */ List<Goods> getGoodsListBy(Map<String,String> map); }
DemoMapper.xml:apache
<?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"> <!--這裏寫接口的路徑是由於光靠ID,是沒法找到SQL語句的,必須經過namespace寫接口路徑才行--> <mapper namespace="com.mapper.DemoMapper"> <resultMap id="userList" type="Goods"> <result column="goods_code" property="goods_code"></result> <result column="goods_name" property="goods_name"></result> <result column="money" property="money"></result> <result column="pay_state" property="pay_state"></result> <result column="start_time" property="start_time"></result> <association property="provider" javaType="Provider"> <result column="provider_id" property="provider_id"></result> <result column="provider_name" property="provider_name"></result> </association> </resultMap> <select id="getGoodsListBy" resultMap="userList"> SELECT g.goods_code,g.goods_name,p.provider_id,p.provider_name , g.money,g.pay_state,g.start_time FROM goods g , provider p <trim prefix="where" prefixOverrides="AND |OR" suffix="AND g.provider_id = p.provider_id"> <if test="userName !=null and userName!=''"> g.goods_name LIKE concat('%',#{userName},'%') </if> <if test="user_pay_state!=null and user_pay_state !=''"> AND g.pay_state =#{user_pay_state} </if> <if test="user_provider_id!=null and user_provider_id !=''"> AND p.provider_id = #{user_provider_id} </if> </trim> </select> </mapper>
測試類:session
import com.mapper.DemoMapper; import com.pojo.Goods; import util.MyBatisUtil; import org.apache.ibatis.session.SqlSession; import org.junit.Test; import java.util.HashMap; import java.util.List; import java.util.Map; public class Junit { @Test public void test01(){ SqlSession sqlSession = MyBatisUtil.createSqlSession(); DemoMapper mapper = sqlSession.getMapper(DemoMapper.class); Map<String,String> map = new HashMap<String, String>(); map.put("userName",""); map.put("user_pay_state",""); map.put("user_provider_id",""); List<Goods> list = mapper.getGoodsListBy(map); for (Goods goods : list) { System.out.println(goods.getGoods_code()+" "+goods.getGoods_name()+" "+goods.getProvider().getProvider_id()+" "+goods.getProvider().getProvider_name()+" "+goods.getMoney()+" "+goods.getPay_state()+" "+goods.getStart_time()); } MyBatisUtil.closeSqlSession(sqlSession); } }
這裏的測試我就不一一說了,我已經驗證過,4中狀況下均可以輸入成功:mybatis
一、所有都寫 二、所有都沒寫(查詢全部) 三、任一寫一個 四、任一寫兩個app