mybatis不同参数传递取值方式

Posted 等你的夏天

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mybatis不同参数传递取值方式相关的知识,希望对你有一定的参考价值。

1)传单个基本数据类型或String对象,#{参数名};

2)传递的是单个引用数据类型对象,#{对象的属性名} 直接获取对象的属性值;

3)传递多个对象时,需要在参数前添加@Param注解指定参数的别名。取值#{参数别名};

4)传递Map时,可以直接通过#{key}的形式获取value;

5)传递List set 数组等集合。使用foreach标签进行遍历。

package com.seecen.mybatis3.mapper;

import com.seecen.mybatis3.pojo.Product;
import org.apache.ibatis.annotations.Param;

import java.util.List;
import java.util.Map;

public interface ProductMapper {
    int insert(Product product);
    int deleteById(Integer id);
    int update(Product product);
    Product selectById(Integer id);
    List<Product> selectAll();
    //查询所有字段   orderColumn:指定排序列
    List<Product> selectALL(String orderColumn);
    //根据id或name查找数据 演示多个参数的取值方式,通过@Param取别名
    List<Product> selectByIdOrName(@Param("id") Integer id,@Param("name") String name);
    //参数传递的是Map时,#{key}取value
    List<Product> selectMap(Map<String,Object> map);
    //批量删除  传递数组/集合
    int deleteByIds(Integer[] ids);
    //批量插入
    int batchInsert(List<Product>productList);
}
<?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="com.seecen.mybatis3.mapper.ProductMapper">

    <insert id="insert" parameterType="Product">
           <selectKey keyProperty="id" order="BEFORE" resultType="integer">
                select p_pro.nextval from dual
           </selectKey>
        insert into Product(id,name) values(#{id},#{name})
    </insert>
    <update id="update" parameterType="Product">
        update Product set name = #{name} where id=#{id}
    </update>
    <delete id="deleteById">
        delete from Product where id=#{id}
    </delete>

    <select id="selectById" parameterType="integer" resultType="Product">
        select * from Product where id=#{id}
    </select>
    <select id="selectAll" resultType="Product">
        select * from Product
    </select>


    <select id="selectALL" resultType="Product">
        select * from Product order by ${value}
    </select>
    <select id="selectByIdOrName" resultType="Product">
        select * from Product where id=#{id} or name=#{name}
    </select>
    <select id="selectMap" resultType="Product" parameterType="java.util.Map">
        select * from Product
        <where>
           <if test="id!=null">
               id=#{id}
           </if>
           <if test="name!=null and name!=‘‘">
               or name=#{name}
           </if>
        </where>
    </select>
    <delete id="deleteByIds">
        delete from Product where id in
        <foreach collection="array" item="id" open="(" close=")" separator=",">
            #{id}
        </foreach>
    </delete>
    <insert id="batchInsert" parameterType="java.util.List">
        begin
           <foreach collection="list" item="product">
               insert into Product(id,name) values(p_pro.nextval,#{product.name});
           </foreach>
        commit;
        end;
    </insert>
</mapper>
@Test
    public void Test2() throws IOException {
        InputStream is=Resources.getResourceAsStream("mybatis.xml");
        SqlSessionFactory sqlSessionFactory=new SqlSessionFactoryBuilder().build(is);
        SqlSession sqlSession=sqlSessionFactory.openSession();
        ProductMapper mapper=sqlSession.getMapper(ProductMapper.class);
        //插入
        Product product2=new Product();
        product2.setName("油条");
        int count=mapper.insert(product2);
        System.out.println("插入记录数:"+count);
        //删除
        int i=mapper.deleteById(3);
        System.out.println("删除记录数:"+i);
        //查询
        Product product=mapper.selectById(4);
        System.out.println(product);
        //修改
        product.setName("盼盼小面包");
        int j=mapper.update(product);
        System.out.println("修改记录数:"+j);
        System.out.println(product);
        //查询所有数据
        List<Product> products=mapper.selectAll();
        for (Product product1:products){
            System.out.println(product1);
        }
        sqlSession.commit();
        sqlSession.close();
        is.close();
    }
    @Test
    public void Test3() throws IOException {
        InputStream is=Resources.getResourceAsStream("mybatis.xml");
        SqlSessionFactory sqlSessionFactory=new SqlSessionFactoryBuilder().build(is);
        SqlSession sqlSession=sqlSessionFactory.openSession();
        ProductMapper mapper=sqlSession.getMapper(ProductMapper.class);
        //按指定序列查询所有字段
        List<Product> products = mapper.selectALL("id");
        for (Product product:products){
            System.out.println(product);
        }
        //通过id或name查询,演示多个参数的取值方式
        List<Product> products1 = mapper.selectByIdOrName(4, "汽水");
        for (Product product:products1){
            System.out.println(product);
        }
        //参数传递的是map时查询
        HashMap<String,Object> map=new HashMap<>();
        map.put("id",4);
        map.put("name","汽水");
        List<Product> products2 = mapper.selectMap(map);
        for (Product product:products2){
            System.out.println(product);
        }
        //批量删除
        int i = mapper.deleteByIds(new Integer[]{26,27});
        System.out.println(i);
        //批量增加
        List<Product> products3 = Arrays.asList(
                new Product("鱼干"),
                new Product("小鱼"),
                new Product("猫咪"));
        int i1 = mapper.batchInsert(products3);
        System.out.println(i1);
    }

 

以上是关于mybatis不同参数传递取值方式的主要内容,如果未能解决你的问题,请参考以下文章

三:MyBatis基于XML的详细使用-参数返回结果处理

三:MyBatis基于XML的详细使用-参数返回结果处理

MyBatis DAO层传递参数到mapping.xml

MyBatis DAO层传递参数到mapping.xml

mybatis学习$与#号取值区别

MyBatis方法多参数的处理及问题