1. 程式人生 > >mybatis對映檔案的使用(二),引數傳遞

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)