mybatis 动态sql标签

public interface AnimalDynamicMapper {
    //如果年龄为0,and性别为""或null,则不纳入查询条件
    List<Animal> findByAgeAndSexOptional(@Param("age") int age,@Param("sex") String sex);
    //如果年龄为0,或性别为""或null,则不纳入查询条件
    List<Animal> findByAgeOrSexOptional(@Param("age") int age,@Param("sex") String sex);

    //可选择修改,如果新的动物名字,性别非空,年龄,脚数非负,及
    int updateOption(Animal animal);
    //批量添加
    int addBatch(List<Animal> list);
}
<?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">

<!--namespace命名空间,namespace必须为长类名-->
<mapper namespace="com.wance.mapper.AnimalDynamicMapper">
    <!--where if-->
    <!--
    <select id="findByAgeAndSexOptional" resultType="com.wance.entity.Animal">
        select * from animal
        <where>
            <if test="age>0">
                age=#{age}
            </if>
            <if test="sex!=null and sex!=''">
                and sex=#{sex}
            </if>
        </where>
    </select>
    -->
    <select id="findByAgeAndSexOptional" resultType="com.wance.entity.Animal">
        select * from animal
        <trim prefix="where" suffix="order by age desc" prefixOverrides="and">
            <if test="age>0">
                age=#{age}
            </if>
            <if test="sex!=null and sex!=''">
                and sex=#{sex}
            </if>
        </trim>
    </select>

    <select id="findByAgeOrSexOptional" resultType="com.wance.entity.Animal">
        select * from animal
        <where>
              <choose>
                  <when test="age>0">
                          and age=#{age}
                  </when>
                  <otherwise>
                      and sex=#{sex}
                  </otherwise>
              </choose>
        </where>
    </select>
<!--
    <update id="updateOption" parameterType="Animal">
          update animal
          <set>
              <if test="aname!=null and aname!=''">
                  aname=#{aname},
              </if>
              <if test="age>=0">
                 age=#{age},
              </if>
              <if test="sex!=null and sex!=''">
                  sex=#{sex},
              </if>
              <if test="feetCount>=0">
                  feetcount=#{feetCount}
              </if>
          </set>
        where aid=#{aid};
    </update>
    -->
    <!--trim实现-->
    <update id="updateOption" parameterType="Animal">

        <trim prefix="update animal set " suffixOverrides=",">
            <if test="aname!=null and aname!=''">
                aname=#{aname},
            </if>
            <if test="age>=0">
                age=#{age},
            </if>
            <if test="sex!=null and sex!=''">
                sex=#{sex},
            </if>
            <if test="feetCount>=0">
                feetcount=#{feetCount},
            </if>
        </trim>
        where aid=#{aid};
    </update>

    <insert id="addBatch">
        insert into animal(aname,age,sex,feetCount)values
      <foreach collection="list" item="list" separator=",">
          (#{list.aname},#{list.age},#{list.sex},#{list.feetCount})
      </foreach>
    </insert>
</mapper>

实现类:

public class AnimalDynamicMapperTest {
    private static SqlSessionFactory factory=null;
    @BeforeClass
    public static void init(){
        try {
            //1 读取配置文件
            InputStream in= Resources.getResourceAsStream("mybatis-config.xml");
            //2 创建SqlSessionFactory工厂
            SqlSessionFactoryBuilder builder=new SqlSessionFactoryBuilder();
            factory=builder.build(in);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    @Test
    public void findByAgeAndSexOptional() {
        //3 使用工厂生产SqlSession对象
        SqlSession session=factory.openSession();
        AnimalDynamicMapper animalMapper=session.getMapper(AnimalDynamicMapper.class);
        List<Animal> list=animalMapper.findByAgeAndSexOptional(16,"man");
        System.out.println(list);
    }

    @Test
    public void findByAgeOrSexOptional() {
        //3 使用工厂生产SqlSession对象
        SqlSession session=factory.openSession();
        AnimalDynamicMapper animalMapper=session.getMapper(AnimalDynamicMapper.class);
        List<Animal> list=animalMapper.findByAgeOrSexOptional(16,"man");
        System.out.println(list);
    }

    @Test
    public void updateOption() {
        //3 使用工厂生产SqlSession对象
        SqlSession session=factory.openSession();
        AnimalDynamicMapper animalMapper=session.getMapper(AnimalDynamicMapper.class);
        Animal animal=new Animal();
        animal.setAid(5);
        animal.setAname("admin");
        animal.setAge(50);
        animal.setFeetCount(90);
        animalMapper.updateOption(animal);
        session.commit();
    }

    @Test
    public void addBatch() {
        //3 使用工厂生产SqlSession对象
        SqlSession session=factory.openSession();
        AnimalDynamicMapper animalMapper=session.getMapper(AnimalDynamicMapper.class);
        Animal animal=new Animal(-1,"root",12,"woman",6);
        Animal animal2=new Animal(-1,"king",75,"woman",9);
        List<Animal> list=new ArrayList<>();
        list.add(animal);
        list.add(animal2);
        animalMapper.addBatch(list);
        session.commit();
    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

java后端指南

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值