1、在mybatis入门基础上完成后续步骤
2、创建参数对象PhoneDTO
-
动态SQL之<if>
我们根据实体类的不同取值,使用不同的SQL语句来进行查询。比如在brandId如果不为空时可以根据brand_id查询,而在brandId为空时则不需要这个查询条件;如果modelNumber不同空时还要加入model_number作为条件,而在modelNumber为空时则不需要这个查询条件。
-
动态SQL之<foreach>
循环执行sql的拼接操作,例: SELECT * FROM phone WHERE capacity IN (128,512)
-
动态SQL之<where> : where条件
-
动态SQL之<sql>:sql片段抽取
3、在PhoneMapper接口中添加抽象方法selectByCondition
List<Phone> selectByCondition(PhoneDTO phoneDTO);
4、在PhoneMapper.xml中添加一个select标签
<select id="selectByCondition" parameterType="phoneDTO" resultType="phone">
SELECT * FROM phone
<where>
<if test="brandId != null and brandId > 0">and brand_id=#{brandId}</if>
<if test="modelNumber != null">and model_number like concat("%",#{modelNumber},"%")</if>
<if test="capacityList != null and capacityList.size() > 0">and capacity in
<foreach collection="capacityList" open="(" close=")" item="capacity" separator=", ">
#{capacity}
</foreach>
</if>
</where>
</select>
5、测试
public class PhoneMapperTest {
@Test
public void selectByCondition() throws IOException {
InputStream is = Resources.getResourceAsStream("sqlMapConfig.xml");
SqlSessionFactory sqLSessionFactory = new SqlSessionFactoryBuilder().build(is);
SqlSession sqlsession = sqLSessionFactory.openSession();
PhoneMapper phoneMapper = sqlsession.getMapper(PhoneMapper.class);
PhoneDTO phoneDTO = new PhoneDTO();
//动态选择条件1 品牌编号
phoneDTO.setBrandId(1);
//动态选择条件2 手机型号
phoneDTO.setModelNumber("ma");
List<Integer> capacityList= new ArrayList<>();
capacityList.add(512);
capacityList.add(128);
//动态选择条件3 手机容量
phoneDTO.setCapacityList(capacityList);
List<Phone> phoneList = phoneMapper.selectByCondition(phoneDTO);
phoneList.forEach(s-> System.out.println(s));
}
}
6、错误解决
如果出现这种报错
就在sqlmapConfig.xml中加上
<typeAlias type="com.entity.PhoneDTO"></typeAlias>
再次测试
本次用到的sql语句使用了
-
动态SQL之<if>
我们根据实体类的不同取值,使用不同的SQL语句来进行查询。比如在brandId如果不为空时可以根据brand_id查询,而在brandId为空时则不需要这个查询条件;如果modelNumber不同空时还要加入model_number作为条件,而在modelNumber为空时则不需要这个查询条件。
-
动态SQL之<foreach>
循环执行sql的拼接操作,例: SELECT * FROM phone WHERE capacity IN (128,512)
-
动态SQL之<where> : where条件
-
动态SQL之<sql>:sql片段抽取