ssm复习第二天--有点懒了

97 阅读3分钟

3. Mybatis获取参数值的两种方式

Mybatis获取参数值的方式有两种,分别是: ${}和#{}

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

(1)单个字面量类型

此时可以使用#{}和 以任意内容获取参数值,但是需要注意{}以任意内容获取参数值,但是需要注意 {}没有单引号,需要手动添加单引号。

(2)多个字面量类型

多个字面量类型,mybatis会把参数以两种形式存到一个map集合中。

一种是以arg0、arg1为key的,另外一种会把param1、param2为key存到map中。

因此可以使用#{}或${}以这两种形式中的任意一种来获取参数值,可以混用。

(3)map集合类型的参数

mybatis可以自动设置参数到map集合中,当然我们也可以手动设置参数到map集合中。

可以使用#{}和${}的方式以任意内容获取参数值。

(4)实体类类型的参数

只需要通过#{}和访问实体类中的属性名,就可以获取相应的属性值,注意{}访问实体类中的属性名,就可以获取相应的属性值,注意{}的单引号问题。

(5)在mapper接口方法的参数上设置@Param注解

此时mybatis会将参数放在map中,以两种方式存储

  • 以@Param 的value属性为key,参数为值
  • 以param1, param2为key,参数为值

然后以#{}和${}访问即可

4. mybatis的各种查询功能

1. 关于实体类型查单条数据和查多条数据

  1. 查单条数据可以将接口方法的返回值类型写为实体类型或list集合类型。
  2. 查多条数据不可以将接口方法的返回值类型写为实体类型的,不然会报TooManyResultsException异常。
package cn.chenmanman.mapper;

import cn.chenmanman.pojo.User;

import java.util.List;

public interface SelectMapper {

    /**
     * <p>通过id查询用户信息</p>
     * @param id 用户id
     * @return 通过id查询到的用户数据的实体
     * */
    User selectUserById(Integer id);

    /**
     * <p>查询所有的用户信息</p>
     * @return 所有用户信息所组成的集合
     * */
    List<User> selectUserAll();
}
<?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="cn.chenmanman.mapper.SelectMapper">
  <!-- 根据用户id查单条 -->
  <select id="selectUserById" resultType="User">
    select * from user where id = #{id}
  </select>

  <!-- 查询所有的用户信息  -->
  <select id="selectUserAll" resultType="User">
    select * from user
  </select>
</mapper>

2. 关于单值类型的查询

Integer、String这些类型默认也都有设置别名的,所以可以简写并且大小写均可。

package cn.chenmanman.mapper;

import cn.chenmanman.pojo.User;
import org.apache.ibatis.annotations.Param;

import java.util.List;

public interface SelectMapper {

    /**
* <p>通过id查询用户信息</p>
* @param id 用户id
* @return 通过id查询到的用户数据的实体
* */
    User selectUserById(Integer id);

    /**
* <p>查询所有的用户信息</p>
* @return 所有用户信息所组成的集合
* */
    List<User> selectUserAll();


    /**
* <p>查询有多少条</p>
* @return 条数
* */
    Integer getCount();


    /**
* <p>通过id查询用户名</p>
* @param id 用户id
* @return 用户名
* */
    String selectUsernameById(@Param("id") Integer id);
}
<?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="cn.chenmanman.mapper.SelectMapper">

  <select id="selectUserById" resultType="User">
    select * from user where id = #{id}
  </select>
  <select id="selectUserAll" resultType="User">
    select * from user
  </select>
  <select id="getCount" resultType="Int">
    select count(*) from user
  </select>
  <select id="selectUsernameById" resultType="String">
    select username from user where id = #{id}
  </select>
</mapper>

3. 关于map的单条查询以及多条查询

map查询单条只需要将resultType设置为map就行,但是如果要查询多条大概分为List泛型和@MapKey注解配合

  1. map查询单条
package cn.chenmanman.mapper;

import cn.chenmanman.pojo.User;
import org.apache.ibatis.annotations.MapKey;
import org.apache.ibatis.annotations.Param;

import java.util.List;
import java.util.Map;

public interface SelectMapper {

    /**
* <p>通过id查询用户信息</p>
* @param id 用户id
* @return 通过id查询到的用户数据的实体
* */
    User selectUserById(Integer id);

    /**
* <p>查询所有的用户信息</p>
* @return 所有用户信息所组成的集合
* */
    List<User> selectUserAll();


    /**
* <p>查询有多少条</p>
* @return 条数
* */
    Integer getCount();


    /**
* <p>通过id查询用户名</p>
* @param id 用户id
* @return 用户名
* */
    String selectUsernameById(@Param("id") Integer id);


    Map<String, Object> selectUserByIdToMap(@Param("id") Integer id);

    @MapKey("id")
    Map<String,Object> selectUserAllToMap();
}
<?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="cn.chenmanman.mapper.SelectMapper">

  <select id="selectUserById" resultType="User">
    select * from user where id = #{id}
  </select>
  <select id="selectUserAll" resultType="User">
    select * from user
  </select>
  <select id="getCount" resultType="Int">
    select count(*) from user
  </select>
  <select id="selectUsernameById" resultType="String">
    select username from user where id = #{id}
  </select>
  <select id="selectUserByIdToMap" resultType="Map">
    SELECT * FROM user where id = #{id}
  </select>
  <select id="selectUserAllToMap" resultType="Map">
    SELECT * FROM user
  </select>
</mapper>

  1. @MapKey注解配合,配置查询到的map的key
package cn.chenmanman.mapper;

import cn.chenmanman.pojo.User;
import org.apache.ibatis.annotations.MapKey;
import org.apache.ibatis.annotations.Param;

import java.util.List;
import java.util.Map;

public interface SelectMapper {

    /**
* <p>通过id查询用户信息</p>
* @param id 用户id
* @return 通过id查询到的用户数据的实体
* */
    User selectUserById(Integer id);

    /**
* <p>查询所有的用户信息</p>
* @return 所有用户信息所组成的集合
* */
    List<User> selectUserAll();


    /**
* <p>查询有多少条</p>
* @return 条数
* */
    Integer getCount();


    /**
* <p>通过id查询用户名</p>
* @param id 用户id
* @return 用户名
* */
    String selectUsernameById(@Param("id") Integer id);


    Map<String, Object> selectUserByIdToMap(@Param("id") Integer id);

    @MapKey("id")
    Map<String,Object> selectUserAllToMap();
}
<?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="cn.chenmanman.mapper.SelectMapper">

  <select id="selectUserById" resultType="User">
    select * from user where id = #{id}
  </select>
  <select id="selectUserAll" resultType="User">
    select * from user
  </select>
  <select id="getCount" resultType="Int">
    select count(*) from user
  </select>
  <select id="selectUsernameById" resultType="String">
    select username from user where id = #{id}
  </select>
  <select id="selectUserByIdToMap" resultType="Map">
    SELECT * FROM user where id = #{id}
  </select>
  <select id="selectUserAllToMap" resultType="Map">
    SELECT * FROM user
  </select>
</mapper>