MyBatis(二)MyBatis获取参数的两种方式和查询功能

  • Post author:
  • Post category:其他




MyBatis获取参数的两种方式

MyBatis获取参数值的两种方式:${}和#{}。

${}的本质就是字符串拼接,#{}的本质就是占位符赋值。

${}使用字符串拼接的方式拼接sql,若为

字符串类型或日期类型

的字段进行赋值时,需要

手动加单引号

#{}使用占位符赋值的方式拼接sql,此时为字符串类型或日期类型的字段进行赋值时,可以自动添加单引号。



单个字面量类型的参数

#{}和${}都可以使用任意的名称来获取参数值,需要注意的是${}需要手动添加单引号。

Mapper接口:

    /**
     * 通过用户名获取User
     * @param username
     * @return
     */
    User getUserByUserName(String username);

xml配置:

    <!--User getUserByUserName(String username);-->
    <!--select * from t_user where username = #{username};-->
    <select id="getUserByUserName" resultType="user">
        select * from t_user where username = '${username}';
    </select>

单元测试:

@Test
public void testGetUserByUserName(){
    SqlSession sqlSession = SqlSessionUtils.getSqlSession("mybatis-config.xml");
    ParameterMapper mapper = sqlSession.getMapper(ParameterMapper.class);
    User user = mapper.getUserByUserName("桑奇");
    System.out.println(user);
}



多个字面量类型的参数

当mapper接口中的方法参数为多个时,此时MyBatis会自动将这些参数放在一个map集合中,以arg0,arg1…为键,以参数为值;以param1,param2,…为键,以参数为值。

因此只需要通过${}和#{}访问map集合的键就可以获取相应的值,${}需要手动加单引号。

mapper接口

    /**
     * 测试多个字面量参数如何获取
     * @param username
     * @param password
     * @return
     */
    User getLogin(String username,String password);

xml配置:

    <!--User getLogin(String username,String password);-->
    <select id="getLogin" resultType="User">
        select * from t_user where username = #{arg0} and password = #{arg1};
    </select>

单元测试:

@Test
public void testLogin(){
    SqlSession sqlSession = SqlSessionUtils.getSqlSession("mybatis-config.xml");
    ParameterMapper mapper = sqlSession.getMapper(ParameterMapper.class);
    User admin = mapper.getLogin("admin", "123456");
    System.out.println(admin);
}



Map集合类型的参数

若mapper接口中的方法需要的参数为多个时,可以手动创建Map集合,将这些数据放在Map中,只需要通过#{}和${}访问Map集合的键就可以获取相对应的值,${}需要手动加单引号。

mapper接口

    /**
     * 测试map集合类型的参数
     * @param map
     * @return
     */
    User checkLogin(Map map);

xml配置:

<!--    User checkLogin(Map map);-->
    <select id="checkLogin" resultType="user">
        select * from t_user where username = #{username} and password = #{password};
    </select>

单元测试:

@Test
public void testCheckLogin(){
    SqlSession sqlSession = SqlSessionUtils.getSqlSession("mybatis-config.xml");
    ParameterMapper mapper = sqlSession.getMapper(ParameterMapper.class);
    Map<String,Object> map = new HashMap<>();
    map.put("username","桑奇");
    map.put("password","sangqi168");
    User user = mapper.checkLogin(map);
    System.out.println(user);
}



实体类类型的参数

若mapper接口中的方法参数为实体类对象时,可以使用${}和#{},通过访问实体类对象中的属性名获取属性值,${}需要手动添加单引号。

mapper接口:

    /**
     * 测试实体类为参数如何获取
     * @param user
     * @return
     */
    int insertUser(User user);

xml配置:

    <!--int insertUser(User user);-->
    <insert id="insertUser">
        insert into t_user values(null,#{username},#{password},#{age},#{sex},#{email});
    </insert>

单元测试:

@Test
public void testInsertUser(){
    SqlSession sqlSession = SqlSessionUtils.getSqlSession("mybatis-config.xml");
    ParameterMapper mapper = sqlSession.getMapper(ParameterMapper.class);
    mapper.insertUser(new User(null,"桑奇","sangqi168",1,"男","sangqi@wz.com"));
}



使用@Param标识参数

可以通过@Param注解标识mapper接口中的方法参数。

此时会将这些参数放在map集合中,

以@Param注解的value属性值为键,以参数为值;以param1,param2,…为键,以参数为值

。通过访问Map集合中的键就可以获取相对应的值,${}需要手动添加单引号。

mapper接口

    /**
     *
     * @param username
     * @param password
     * @return
     */
    User checkLoginByParam(@Param("username") String username,@Param("password") String password);

xml配置:

<!--    User checkLoginByParam(@Param("username") String username,@Param("password") String password);-->
    <select id="checkLoginByParam" resultType="user">
        select * from t_user where username = #{username} and password = #{password};
    </select>

单元测试:

@Test
public void testCheckLoginByParam(){
    SqlSession sqlSession = SqlSessionUtils.getSqlSession("mybatis-config.xml");
    ParameterMapper mapper = sqlSession.getMapper(ParameterMapper.class);
    User user = mapper.checkLoginByParam("桑奇", "sangqi168");
    System.out.println(user);
}



MyBatis的各种查询功能



查询一个实体类对象

mapper接口

    /**
     * 通过id查询用户
     */
    User getUserById(@Param("id") Integer id);

xml配置:

<!--    User getUserById(@Param("id") Integer id);-->
    <select id="getUserById" resultType="user">
        select * from t_user where id = #{id}
    </select>

单元测试:

@Test
public void testGetUserById(){
    SqlSession sqlSession = SqlSessionUtils.getSqlSession("mybatis-config.xml");
    SelectMapper mapper = sqlSession.getMapper(SelectMapper.class);
    User user = mapper.getUserById(5);
    System.out.println(user);
}



查询一个List集合

mapper接口

    /**
     * 查询所有用户信息
     * @return
     */
    List<User> getUserList();

xml配置

<!--    List<User> getUserList();-->
    <select id="getUserList" resultType="user">
        select * from t_user
    </select>

单元测试:

@Test
public void testGetUserList(){
    SqlSession sqlSession = SqlSessionUtils.getSqlSession("mybatis-config.xml");
    SelectMapper mapper = sqlSession.getMapper(SelectMapper.class);
    List<User> userList = mapper.getUserList();
    userList.forEach(System.out::println);
}



查询单个数据

mapper接口:

    /**
     * 查询单个数据
     */
    int getCount();

xml配置:

<!--    int getCount();-->
    <select id="getCount" resultType="int">
        select count(*) from t_user;
    </select>

单元测试

@Test
public void testGetCount(){
    SqlSession sqlSession = SqlSessionUtils.getSqlSession("mybatis-config.xml");
    SelectMapper mapper = sqlSession.getMapper(SelectMapper.class);
    int count = mapper.getCount();
    System.out.println(count);
}



查询一条数据为Map集合

mapper接口

    /**
     * 根据id查询用户信息为Map集合
     * @return
     */
    Map<String,Object> getUserMapById(@Param("id") Integer id);

xml配置:

<!--    Map<String,Object> getUserMapById(@Param("id") Integer id);-->
    <select id="getUserMapById" resultType="map">
        select * from t_user where id = #{id};
    </select>

单元测试:

@Test
public void testGetUserMapById(){
    SqlSession sqlSession = SqlSessionUtils.getSqlSession("mybatis-config.xml");
    SelectMapper mapper = sqlSession.getMapper(SelectMapper.class);
    Map<String, Object> map = mapper.getUserMapById(5);
    System.out.println(map);
}



查询多条数据为Map集合

方式一:

mapper接口

/**
* 查询所有用户信息为map集合
* @return
* 将表中的数据以map集合的方式查询,一条数据对应一个map;若有多条数据,就会产生多个map集合,此
时可以将这些map放在一个list集合中获取
*/
List<Map<String, Object>> getAllUserToMap();

xml配置

<!--Map<String, Object> getAllUserToMap();-->
<select id="getAllUserToMap" resultType="map">
	select * from t_user
</select>

单元测试

@Test
public void testGetAllUserToMap(){
    SqlSession sqlSession = SqlSessionUtils.getSqlSession("mybatis-config.xml");
    SelectMapper mapper = sqlSession.getMapper(SelectMapper.class);
    List<Map<String, Object>> list = mapper.getUserMap();
    list.forEach(System.out::println);
}

方式二:

mapper接口

    /**
     * 查询所有用户信息以map集合返回
     */
    @MapKey("id")
    Map<String,Object> getUserMap();

xml配置

<!--    Map<String,Object> getUserMap();-->
    <select id="getUserMap" resultType="map">
        select * from t_user;
    </select>

单元测试

@Test
public void testGetUserMap(){
    SqlSession sqlSession = SqlSessionUtils.getSqlSession("mybatis-config.xml");
    SelectMapper mapper = sqlSession.getMapper(SelectMapper.class);
    Map<String, Object> map = mapper.getUserMap();
    System.out.println(map);
}



版权声明:本文为Zach1Lavine原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。