mybatis映射文件的使用(二),参数传递

映射文件、接口定义和测试代码

package canger.study.chapter04.mapper;

import canger.study.chapter04.bean.Actor;
import org.apache.ibatis.annotations.Param;

import java.util.Map;

public interface ActorMapper {
    Actor selectActorById(Long id);
    Boolean insertActor(Actor actor);
    Boolean insertActorByMap(Map map);
    Boolean insertActorByString(String var1,String var2);
    Boolean insertActorByParamString(@Param("firstName")String var1, @Param("lastName")String var2);
    Boolean updateActor(Actor actor);
    Boolean deleteActorById(Long id);
}
<?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="canger.study.chapter04.mapper.ActorMapper">
    <!--parameterType属性可以省略-->
    <!--对于单个参数传递,参数引用名称并不需要和接口中的参数名称一致-->
    
    <select id="selectActorById"  resultType="canger.study.chapter04.bean.Actor">
        select actor_id as id, first_name as firstName ,last_name as lastName
        from actor
        where actor_id=#{abc}
    </select>

    <!--参数Bean-->
    <insert id="insertActor" parameterType="canger.study.chapter04.bean.Actor">
        insert into actor(first_name,last_name) values (#{firstName},#{lastName})
    </insert>

    <!--使用Map传递参数,其中map的Key值即为参数引用名称-->
    <insert id="insertActorByMap" parameterType="map">
        insert into actor(first_name,last_name) values (#{firstName},#{lastName})
    </insert>

    <!--使用非命名参数传递,可以使用param1、param2...进行参数传递-->
    <insert id="insertActorByString">
        insert into actor(first_name,last_name) values (#{param1},#{param2})
    </insert>

    <!--使用@Param进行命名参数传递-->
    <insert id="insertActorByParamString">
        insert into actor(first_name,last_name) values (#{firstName},#{lastName})
    </insert>
    
    <update id="updateActor" parameterType="canger.study.chapter04.bean.Actor">
        update actor set first_name=#{firstName},last_name=#{lastName} where actor_id=#{id}
    </update>

    <delete id="deleteActorById" parameterType="long">
        delete from actor where actor_id=#{id}
    </delete>

</mapper>
    @Test
    public void testActorMapper(){
        SqlSessionFactory sqlSessionFactory = SqlSessionFactoryUtil.initSqlSessionFactory();
        SqlSession sqlSession = sqlSessionFactory.openSession();
        ActorMapper mapper = sqlSession.getMapper(ActorMapper.class);
        Actor actor = mapper.selectActorById(1L);

        System.out.println(actor);
    }

参数传递

parameterType 属性可以省略;

传递单个参数

  •  SQL语句中参数的引用名称并不需要和接口中的参数名称相同,如selectActorById元素的where语句改为  where actor_id=#{abc} 也能够得到正确的结果;

传递多个参数

  • 定义用于传递参数的Bean,如 id=“insertActor”语句中的 canger.study.chapter04.bean.Actor
  Boolean insertActor(Actor actor);
    <insert id="insertActor" parameterType="canger.study.chapter04.bean.Actor">
        insert into actor(first_name,last_name) values (#{firstName},#{lastName})
    </insert>
  Actor actor = new Actor("James","Harden");
   result = mapper.insertActor(actor);
   System.out.println(result);
  •  使用map进行参数传递
  Boolean insertActorByMap(Map map);
    <insert id="insertActorByMap" parameterType="map">
        insert into actor(first_name,last_name) values (#{firstName},#{lastName})
    </insert>
Map<String,String> map = new HashMap<String, String>(){
    {
        put("firstName","James");
        put("lastName","Harden");
    }
};
Boolean result = mapper.insertActorByMap(map);
System.out.println(result);
  •  通过param1、param2进行多参数引用(此时接口方法中的参数可以使用任意名称,SQL语句中使用 param1、param2进行引用)
  Boolean insertActorByString(String var1,String var2);
    <insert id="insertActorByString">
        insert into actor(first_name,last_name) values (#{param1},#{param2})
    </insert>
    Boolean result = mapper.insertActorByString("James", "Harden");
    System.out.println(result);
  • 通过命名参数进行引用,通过使用@Parma注解,可以在SQL语句中使用命名参数引用
  Boolean insertActorByParamString(@Param("firstName")String var1, @Param("lastName")String var2);
    <insert id="insertActorByParamString">
        insert into actor(first_name,last_name) values (#{firstName},#{lastName})
    </insert>
    Boolean result = mapper.insertActorByParamString("James", "Harden");
    System.out.println(result)

猜你喜欢

转载自www.cnblogs.com/canger/p/9931774.html
今日推荐