MyBatis 值的傳遞

1.值的傳遞 - Map傳值

能夠經過對象獲取Map傳遞值,在配置文件中經過 #{} 或 ${} 進行應用sql

查詢30-40歲的用戶session

    <!-- 值的傳遞 - Map傳值 -->
    <select id="queryRange" resultType="cn.tedu.mybatis.beans.User">
        select * from user where age between #{min} and #{max};
    </select>

測試類mybatis

// 根據配置文件建立sqlSessionFactory
    private SqlSessionFactory factory = null;
    @Before
    public void before() throws Exception{
        //1.讀取MyBatis核心配置文件
        InputStream in = Resources.getResourceAsStream("sqlMapConfig.xml");
        //2.根據配置文件建立sqlSessionFactory
        factory = new SqlSessionFactoryBuilder().build(in);
    }
    
    /**
     * Map傳值
     */
    @Test
    public void test02(){
        // 1.經過map,準備參數
        Map<String,Integer> map = new HashMap<String,Integer>();
        map.put("min", 20);
        map.put("max", 40);
        // 2.建立sqlSession
        SqlSession session = factory.openSession();
        // 3.執行操做
        List<User> list = session.selectList("cn.tedu.mybatis.beans.UserMapper.queryRange",map);
        // 4.遍歷結果
        System.out.println(Arrays.toString(list.toArray()));
    }

2.值的傳遞 - 對象傳值

能夠經過對象獲取Map傳遞至,在配置文件中經過#{}  和 ${} 進行應用app

在UserMapper.xml中配置測試

    <!-- 值的傳遞 - 對象傳值 -->
    <select id="insertUser">
        insert into user values (null,#{name},${age})
    </select>

** 此處經過#{xxx}的語法來引用屬性ui

測試類:spa

    // 根據配置文件建立sqlSessionFactory
    private SqlSessionFactory factory = null;
    @Before
    public void before() throws Exception{
        //1.讀取MyBatis核心配置文件
        InputStream in = Resources.getResourceAsStream("sqlMapConfig.xml");
        //2.根據配置文件建立sqlSessionFactory
        factory = new SqlSessionFactoryBuilder().build(in);
    }
    
    /**
     * 對象傳值
     */
    @Test
    public void test03(){
        User user = new User();
        user.setName("cjj");
        user.setAge(24);
        
        // 1.建立sqlSession
        SqlSession session = factory.openSession();
        // 2.執行操做
        session.insert("cn.tedu.mybatis.beans.UserMapper.insertUser",user);
        // 3.提交事務,mybatis自動開啓事務,可是並不會自動提交,須要手動提交事物
        session.commit();
    }

注意:mybatis自動開啓事務,可是並不會自動提交,須要手動提交事物code

3.值的傳遞 - 單值傳值

 若是程序中只有一個參數須要傳遞給sql,則不須要封裝到bean或map中,能夠直接傳入。xml

在sql中能夠使用任意名稱獲取到這個參數,雖然名稱能夠任意,但一般仍然使用該屬性的名稱,以便閱讀。對象

    <!-- 值的傳遞 - 單值傳值 -->
    <select id="queryOne" resultType="cn.tedu.mybatis.beans.User">
        select * from user where id = #{id}
    </select>

測試類:

    /**
     * 單值傳遞
     */
    @Test
    public void test04(){
        // 1.建立sqlSession
        SqlSession session = factory.openSession();
        // 2.執行操做
        User user = session.selectOne("cn.tedu.mybatis.beans.UserMapper.queryOne",3);
        // 3.遍歷結果
        System.out.println(user);
    }
相關文章
相關標籤/搜索