# 4.MyBatis-获取参数的方式以及查询功能

MyBatis-获取参数的两种方式:

  • ${}本质字符串拼接

  • #{}本质占位符赋值

# 1.MyBatis获取参数值的各种情况

# 1.mapper接口的方法参数为单个字面量类型

可以通过${}和#{}以任意的名称获取参数值,但需注意方式一的单引号问题

示例:

接口方法:

//根据用户名查询
User getUserByUsername(String username);
1
2

方式一:

    <select id="getUserByUsername" resultType="User">
        select * from t_user where username='${username}'
    </select>
1
2
3

方式二:

    <select id="getUserByUsername" resultType="User">
        select * from t_user where username=#{username}
    </select>
1
2
3


# 2.mapper接口的方法参数为多个时

此时会将参数放在一个map中,以两种方式进行存储:

1)以arg0,arg1为键,参数为值进行存储

2)以param1,param2为键,参数为值进行存储

以键的方式通过${}和#{}访问值即可

同样需要注意sql拼接问题

示例:

接口方法:

    User checkLogin(String username, String password);
1

方式一:

    <select id="checkLogin" resultType="User">
        select * from t_user where username='${arg0}' and password='${arg1}'
    </select>
1
2
3

select * from t_user where username='admin' and password='123455'

方式二:

    <select id="checkLogin" resultType="User">
        select * from t_user where username=#{arg0} and password=#{arg1}
    </select>
1
2
3

select * from t_user where username=? and password=?


# 3.mapper接口的方法参数为多个时-手动创建map存储

以键的方式通过${}和#{}访问值即可

示例:

接口方法:

User checkLoginByMap(Map<String, Object> map);
1

创建map存储

    @Test
    public void testCheckLoginByMap() {
        SqlSession session = SessionUtil.getSession();
        ParamMapper mapper = session.getMapper(ParamMapper.class);
        Map<String,Object> map = new HashMap<>();
        map.put("username","admin");
        map.put("password","123455");
        User admin = mapper.checkLoginByMap(map);
        System.out.println(admin);
    }
1
2
3
4
5
6
7
8
9
10

xml文件中编写sql语句(${}和#{}均可)

    <select id="checkLoginByMap" resultType="User">
        select * from t_user where username=#{username} and password=#{password}
    </select>
1
2
3

# 4.mapper接口的方法参数为实体对象

以属性的方式通过${}和#{}访问值即可

示例:

接口方法:

void addUser(User user);
1

xml编写sql语句

    <insert id="addUser">
        insert into t_user values(null,#{username},#{password},#{age},#{sex},#{email})
    </insert>
1
2
3

# 5.使用@Param注解命名参数

此时会将参数放在一个map中,以两种方式进行存储:

1)以@Param注解的值为键,参数为值进行存储

2)以param1,param2为键,参数为值进行存储

以键的方式通过${}和#{}访问值即可

示例:

接口方法:

User checkLoginByParam(@Param("username") String username,@Param("password") String password);
1

xml编写sql语句

    <select id="checkLoginByParam" resultType="User">
        select * from t_user where username=#{username} and password=#{password}
    </select>
1
2
3

# 2.Mybatis的各种查询功能

  1. 查询结果只有一条数据时

    • a) 实体类对象接收:直接将查询结果映射为一个实体类对象。

    • b) List 集合接收:将单条数据封装为一个只包含一个元素的 List 集合。

    • c) Map 接收:将查询结果的字段名作为 key,字段值作为 value,封装为一个 Map 对象。

      结果:{password=123455, sex=男, id=2, age=11, email=123@qq.com, username=张三}

  2. 查询结果有多条数据时

    • a) List 集合接收:将多条数据封装为一个 List 集合,集合中的每个元素对应一条记录,可以是实体类对象或 Map。
    • b) Map集合接收:将多条数据封装到Map集合,需要使用@Mapkey注解将查询出的其中一个字段作为key,整条数据作为值。
    • 注意:一定不能通过实体类对象接收,否则 MyBatis 会抛出 TooManyResultsException 异常,因为它期望一个结果却得到了多个。

查询功能(1)

查询多条数据

示例:

接口方法:

public interface SelectedMapper {
    //User selectAllUser(); 会报错
    List<User> selectAllUser();
}
1
2
3
4

xml

    <select id="selectAllUser" resultType="User">
        select * from t_user
    </select>
1
2
3

结果:[User{id=2, username='张三', password='123455', age=11, sex='男', email='123@qq.com'}, User{id=3, username='admin', password='123455', age=11, sex='男', email='123@qq.com'}, User{id=12, username='lily', password='12345', age=18, sex='男', email='qq.1234'}]


查询功能(2)

查询单行单列数据

示例:

接口方法:

Integer selectAllUserCount();
1

xml

    <select id="selectAllUserCount" resultType="Integer">
        select count(*) from t_user
    </select>
1
2
3

resultType可以写int,Int,integer等等,因为这是Mybatis根据typeAliases自己起的别名

别名 对应的 Java 类型 说明
byte byte 基本类型
short short 基本类型
int int 基本类型(最常用)
long long 基本类型
float float 基本类型
double double 基本类型
boolean boolean 基本类型
char char 基本类型
byte java.lang.Byte 包装类型(与基本类型同名)
short java.lang.Short 包装类型
int/integer java.lang.Integer 包装类型(两个别名都可用)
long java.lang.Long 包装类型
float java.lang.Float 包装类型
double java.lang.Double 包装类型
boolean java.lang.Boolean 包装类型
char java.lang.Character 包装类型
string java.lang.String 字符串类型(最常用)

查询功能(3)

查询map集合

示例:

接口方法:

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

xml

    <select id="selectUserByIdToMap" resultType="Map">
        select * from t_user where id=#{id}
    </select>
1
2
3

结果:{password=123455, sex=男, id=2, age=11, email=123@qq.com, username=张三}


查询功能(4)

查询多条数据封装成map

接口方法:

    @MapKey("id")
    Map<String,Object> selectAllUserToMap();
1
2

xml

    <select id="selectAllUserToMap" resultType="Map">
        select * from t_user
    </select>
1
2
3

结果

{2={password=123455, sex=男, id=2, age=11, email=123@qq.com, username=张三}, 3={password=123455, sex=男, id=3, age=11, email=123@qq.com, username=admin}, 12={password=12345, sex=男, id=12, age=18, email=qq.1234, username=lily}}


最近更新: 9/19/2026, 1:27:08 PM
编程NOTE   |