Mybatis參數(Parameters)傳遞
1、.單個參數
可以接受基本類型,對象類型,集合類型的值。這種情況MyBatis可直接使用這個參數,不需要經過任何處理。
<!-- 根據id查詢數據表中的一條記錄,並封裝User對象 --> <select id="selectById" resultType="com.softjx.model.User"> select t_id as id,t_username as username,t_password password from t_user where t_id=#{id}; </select> <!-- 根據id查詢數據表中的一條記錄,使用了parameterType限定參數的類型,參數變量名可以隨意定義,不受javabean中的屬性控制--> <select id="selectById1" parameterType="java.lang.Integer" resultType="com.softjx.model.User"> select t_id as id,t_username as username,t_password password from t_user where t_id=#{id1}; </select>
2.POJO
當這些參數屬於我們業務POJO時,我們直接傳遞POJO。
<!-- 添加用戶 --> <insert id="insertUser"> insert into t_user (t_username,t_password) values (#{username},#{password}) </insert> <!-- 添加用戶 --> <!-- 參數可以省略,不管如何,變量名都是javabean中屬性名 --> <insert id="insertUser1" parameterType="com.softjx.model.User"> insert into t_user (t_username,t_password) values (#{username},#{password}) </insert>
3.Map
我們也可以封裝多個參數為map,直接傳遞。
public int insertUser2(Map<String ,Object> map); <!-- 添加用戶 --> <!-- 參數是map,變量名隨意,調用時,map的key要和變量名要一致 ,參數也可以省略--> <insert id="insertUser2" parameterType="java.util.Map"> insert into t_user (t_username,t_password) values (#{a},#{b}) </insert> @Test public void TestInserUser2() { System.out.println("添加一個用戶"); try { UserMapper mapper=session.getMapper(UserMapper.class); System.out.println(mapper); Map<String,Object> map=new HashMap<String,Object>(); map.put("a", "lisi"); map.put("b", "222222"); int count=mapper.insertUser2(map); session.commit();//這里一定要提交,不然數據進不去數據庫中 //session.rollback(); System.out.println(count); } finally { session.close(); } }
4.多個參數
任意多個參數,都會被MyBatis重新包裝成一個Map傳入。Map的key是param1,param2,或者0,1,值就是參數的值。
//添加用戶 public int insertUser3(String name,String pass);
<!-- 添加用戶 --> <!-- 帶有多個參數,參數名 #{param1},#{param2},或者#{0},#{1},不能使用參數名--> <insert id="insertUser3" parameterType="java.util.Map"> insert into t_user (t_username,t_password) values (#{param1},#{param2}) </insert> <insert id="insertUser3" parameterType="java.util.Map"> insert into t_user (t_username,t_password) values (#{0},#{1}) </insert>
@Test public void TestInserUser3() { System.out.println("添加一個用戶"); try { UserMapper mapper=session.getMapper(UserMapper.class); System.out.println(mapper); int count=mapper.insertUser3("aaa","bbb"); session.commit();//這里一定要提交,不然數據進不去數據庫中 //session.rollback(); System.out.println(count); } finally { session.close(); } }
5.命名參數
為參數使用@Param起一個名字,MyBatis就會將這些參數封裝進map中,key就是我們自己指定的名字。
//添加用戶 public int insertUser4(@Param("name")String name,@Param("pass")String pass);
<!-- 添加用戶 --> <!-- 帶有多個參數,使用@Param注解,參數名直接使用定義名, #{name},#{pass}或,#{param1},#{param2},不能用#{0},#{1}--> <insert id="insertUser4" parameterType="java.util.Map"> insert into t_user (t_username,t_password) values (#{name},#{pass}) </insert>
@Test public void TestInserUser4() { System.out.println("添加一個用戶"); try { UserMapper mapper=session.getMapper(UserMapper.class); System.out.println(mapper); int count=mapper.insertUser4("song","555"); session.commit();//這里一定要提交,不然數據進不去數據庫中 //session.rollback(); System.out.println(count); } finally { session.close(); } }