mybatis(5)--參數傳遞

mybatis的參數傳遞java

 主要的參數傳遞分爲:sql

1.一個普通數據類型apache

當一個方法中只有一個普通數據類型。在mapper配置文件中能夠使用#{}佔位符來進行佔位輸出。session

#{} 佔位符中,能夠寫參數的 #{變量名}。 也能夠寫 #{value}。mybatis

2.多個普通數據類型app

多個普通的參數。當咱們須要使用 #{} 佔位輸出的時候,能夠使用ui

param1,param2 …… paramNspa

也就是 #{param1} …… #{paramN}code

或者使用@Param命名參數xml

3.Map對象

當咱們的參數爲map對象的時候。咱們能夠使用 map對象的key來作爲佔位符,輸出數據。

#{map的key} 來作爲佔位符的輸出

4.一個pojo數據類型

當方法的參數是一個複雜類型的對象的時候。咱們能夠使用 對象的屬性名。當成佔位符的名稱。好比:#{ 屬性名 }

 5.多個pojo數據類型

當有多個複雜pojo對象作爲參數傳遞給方法使用時候。咱們要取出數據作爲sql的參數。能夠使用以下方式:

#{param1.屬性名}

……

#{paramN.屬性名}

 

也能夠使用@Param命名參數。給每一個pojo對象起一個別名。而後再經過 #{別名.屬性名} 的方式取出數據值作爲參數使用。

 

 

 

 

package com.mapper.test;

import static org.junit.Assert.*;

import java.util.HashMap;
import java.util.Map;

import org.apache.ibatis.io.Resources;
import org.apache.ibatis.jdbc.SQL;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.junit.BeforeClass;
import org.junit.Test;

import com.mapper.UserMapper;
import com.pojo.User;

public class UserMapperTest {

    static SqlSessionFactory sqlSessionFactory;

    @BeforeClass
    public static void setUpBeforeClass() throws Exception {
        sqlSessionFactory = new SqlSessionFactoryBuilder().build(Resources
                .getResourceAsStream("mybatis-config.xml"));
    }

    @Test
    public void testQueryUserById() {
        SqlSession session = sqlSessionFactory.openSession();
        try {

            UserMapper mapper = session.getMapper(UserMapper.class);
            System.out.println(mapper.queryUserById(1));

        } finally {
            session.close();
        }
    }

    @Test
    public void testQueryUsersByNameOrSex() {
        SqlSession session = sqlSessionFactory.openSession();
        try {

            UserMapper mapper = session.getMapper(UserMapper.class);
            mapper.queryUsersByNameOrSex("bbb", 1).forEach(System.out::println);

        } finally {
            session.close();
        }
    }
    
    @Test
    public void testQueryUsersByMap() {
        SqlSession session = sqlSessionFactory.openSession();
        try {
            
            UserMapper mapper = session.getMapper(UserMapper.class);
            Map<String, Object> paramMap = new HashMap<String, Object>();
            
            paramMap.put("name", "bbb");
            paramMap.put("sex", 1);
            
            mapper.queryUsersByMap(paramMap).forEach(System.out::println);
            
        } finally {
            session.close();
        }
    }
    
    @Test
    public void testUpdateUser() {
        SqlSession session = sqlSessionFactory.openSession();
        try {
            
            UserMapper mapper = session.getMapper(UserMapper.class);

            mapper.updateUser(new User(9, "aaa", 1));
            
            session.commit();
        } finally {
            session.close();
        }
    }
    
    @Test
    public void testQueryUsersByTwoUsers() {
        SqlSession session = sqlSessionFactory.openSession();
        try {
            
            UserMapper mapper = session.getMapper(UserMapper.class);
            
            mapper.queryUsersByTwoUsers(new User(null, "bbb", null), new User(null, null, 1)).forEach(System.out::println);
            
        } finally {
            session.close();
        }
    }
    
    @Test
    public void testQueryUsersLikeName() {
        SqlSession session = sqlSessionFactory.openSession();
        try {
            
            UserMapper mapper = session.getMapper(UserMapper.class);
            
            String name = "bb";
            
            mapper.queryUsersLikeName(name).forEach(System.out::println);
            
        } finally {
            session.close();
        }
    }

}
<?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.mapper.UserMapper">

    <!-- 
        public User queryUserById(Integer id);
        當方法的參數類型是一個普通數據類型的時候,
        那麼sql語句中配置的佔位符裏,能夠寫上參數名:#{id}
     -->
    <select id="queryUserById" resultType="com.pojo.User">
        select id,last_name lastName,sex from t_user where id = #{id}
    </select>

<!--     /** -->
<!--      *     根據用戶名和性別查詢用戶信息 -->
<!--      */ -->
<!--     public List<User> queryUsersByNameOrSex(String name, Integer sex);
        當方法參數是多個普通類型的時候。咱們須要在佔位符中寫入的可用值是:0,1,param1,param2
        
        0             表示第一個參數(不推薦使用)
        1             表示第二個參數 (不推薦使用)
        param1        表示第一個參數(推薦使用)
        param2      表示第二個參數(推薦使用)
        paramN        表示第n個參數(推薦使用)
 -->
<!--     <select id="queryUsersByNameOrSex" resultType="com.pojo.User"> -->
<!--         select id,last_name lastName,sex from t_user where last_name = #{param1} or sex = #{param2} -->
<!--     </select> -->

    <!-- 
            public List<User> queryUsersByNameOrSex(@Param("name") String name,
            @Param("sex") Integer sex);
            當方法有多個參數的時候,咱們能夠使用mybatis提供的註解@Param來對方法的參數進行命名。
            全名以後的使用。以下:
            @Param("name") String name            ====使用>>>>                #{name}
            @Param("sex") Integer sex            ====使用>>>>                #{sex}
            
            使用了@Param以後,原來的0,1就不能再使用了。
            可是Param1,和param2,能夠使用。
     -->
    <select id="queryUsersByNameOrSex" resultType="com.pojo.User">
        select id,last_name lastName,sex from t_user where last_name = #{0} or sex = #{1}
    </select>
    
<!--     /** -->
<!--      * 但願Map中傳入姓名和性別信息,以作爲查詢條件。 -->
<!--      */ -->
<!--     public List<User> queryUsersByMap(Map<String, Object> paramMap); 
        當咱們方法的參數類型是Map類型的時候,注意。
        在配置的sql語句的佔位符中寫的參數名必定要和Map的key一致對應。
        
        last_name = #{name}             <<<<========>>>        paramMap.put("name","bbb");    
        sex = #{sex}                    <<<<========>>>        paramMap.put("sex",1);    
-->
    <select id="queryUsersByMap" resultType="com.pojo.User">
        select id,last_name lastName,sex from t_user where last_name = #{name} or sex = #{sex}
    </select>
    
<!--     public int updateUser(User user)
        若是傳入的參數是一個javaBean的時候,佔位符中,要寫上javaBean的屬性名。
        
        JavaBean屬性                                sql中的佔位符
    private Integer id;                                #{id}
    private String lastName;                        #{lastName}
    private Integer sex;                            #{sex}
        
 -->
    <update id="updateUser" parameterType="com.pojo.User">
        update 
            t_user 
        set 
            last_name=#{lastName},
            sex=#{sex}
        where 
            id=#{id}
    </update>
    
    
<!--         /** -->
<!--      *     要求使用第一個User對象的lastName屬性,和第二個User對象的sex屬性來查詢用戶信息。 -->
<!--      */ -->
<!--     public List<User> queryUsersByTwoUsers(User name,User sex);

        若是你是多個JavaBean類型的時候,第一個參數是param1,第二個參數是param2.以此類推第n個參數就是paramN
        固然你也能夠使用@Param來規定參數名。
        
        若是你想要的只是參數對象中的屬性,而須要寫成爲以下:
            #{參數.屬性名} 
        last_name ======== #{param1.lastName}  
        sex ========= #{param2.sex} 
 -->
    <select id="queryUsersByTwoUsers" resultType="com.pojo.User">
        select id,last_name lastName,sex from t_user where last_name = #{param1.lastName} or sex = #{param2.sex} 
    </select>
    
<!--         /** -->
<!--      * 根據給定的名稱作用戶名的模糊查詢 -->
<!--      */ -->
<!--     public List<User> queryUsersLikeName(String name);
            #{}    是佔位符
            ${} 是把參數的值原樣輸出到sql語句中,而後作字符串的拼接操做
 -->
    <select id="queryUsersLikeName" resultType="com.pojo.User">
        select id,last_name lastName,sex from t_user where last_name like concat('%',#{name},'%')
    </select>
    
    
    
    
</mapper>
相關文章
相關標籤/搜索