MyBatis 值的传递

1.值的传递 - Map传值

可以通过对象获取Map传递值,在配置文件中通过 #{} 或 ${} 进行应用

查询30-40岁的用户

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

测试类

// 根据配置文件创建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传递至,在配置文件中通过#{}  和 ${} 进行应用

在UserMapper.xml中配置

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

** 此处通过#{xxx}的语法来引用属性

测试类:

    // 根据配置文件创建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自动开启事务,但是并不会自动提交,需要手动提交事物

3.值的传递 - 单值传值

 如果程序中只有一个参数需要传递给sql,则不需要封装到bean或map中,可以直接传入。

在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);
    }
原文地址:https://www.cnblogs.com/chuijingjing/p/9855059.html