mybatis對映檔案的使用(二),引數傳遞
阿新 • • 發佈:2018-11-08
對映檔案、介面定義和測試程式碼
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)