Mybatis复习——day03_Mybatis获取参数的两种方式_Mybatis的各种查询功能

目录

1、Mybatis获取参数的两种方式

1.1、单个字面量类型的参数

1.2、多个字面量类型的参数

1.3、map集合类型的参数

1.4、实体类类型的参数

1.5、使用@Param标识参数

1.6.总结

2、MyBatis的各种查询功能

2.1、查询一个实体对象

2.2、查询一个list集合

2.3、查询单个数据

2.4、查询一条数据为map集合

2.5、查询多条数据为map集合


1、Mybatis获取参数的两种方式

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

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

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

1.1、单个字面量类型的参数

若mapper接口中的方法参数为单个的字面量类型

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

    /**
     * 根据用户名查询用户信息
     * @param username
     * @return
     */
    User getUserByUsername(String username);
<!--    User getUserByUsername(String username);-->
   <select id="getUserByUsername" resultType="user">
        select * from t_user where username = '${username}';
   </select>

或者

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

此时在配置文件中的参数可任意写

1.2、多个字面量类型的参数

此时Mybatis会将参数放在map集合中,以两种方式存储数据
(1)以arg0 arg1...为键,以参数为值
(2)以param1,param2...为键,以参数为值

因此只需要通过#{} 和${} 访问map集合的键,就可以访问数据,一定要注意${}单引号问题

    /**
     * 验证登录
     * @param username
     * @param password
     * @return
     */
    User checkLogin(String username,String password);
<!--    User checkLogin(String username,String password);-->
    <select id="checkLogin" resultType="user">
        select * from t_user where username = #{param1} and password =#{param2}
    </select>

1.3、map集合类型的参数

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

    /**
     * 验证登录(以map集合作为参数)
     * @param map
     * @return
     */
    User checkLoginByMap(Map<String ,Object> map);
<!--    User checkLoginByMap(Map<String ,Object> map);-->
    <select id="checkLoginByMap" resultType="user">
        select * from t_user where username = #{username} and password  = #{password};
    </select>

测试方法

@Test
    public void testCheckLoginByMap(){
        SqlSession sqlSession = SqlSessionUtil.getSqlSession();
        UserMapper mapper = sqlSession.getMapper(UserMapper.class);
        Map<String ,Object> map = new HashMap<>();
        map.put("username","admin");
        map.put("password","123456");
        User user = mapper.checkLoginByMap(map);
        System.out.println(user.toString());
    }

运行结果

DEBUG 08-25 23:24:28,884==>  Preparing: select * from t_user where username = ? and password = ?; (BaseJdbcLogger.java:137) 
DEBUG 08-25 23:24:28,916==> Parameters: root(String), 123(String) (BaseJdbcLogger.java:137) 
DEBUG 08-25 23:24:28,931<==      Total: 1 (BaseJdbcLogger.java:137) 
User{id=1, username='root', password='123', age=23, gender='男', email='123456@qq你.com'}

1.4、实体类类型的参数

只需要通过#{} 和${} 访问实体2类中的属性名,就可以获取相应的属性值,一定要注意${}单引号问题
属性名与实体的属性名没有关系,将实体类的get/set方法去掉get/set后将首字母变为小写就是所取的属性名,取值找get,赋值找set

    /**
     * 添加用户功能
     * @param user
     */
    void insertUser(User user);
<!--    void insertUser(User user);-->
    <insert id="insertUser">
        insert into t_user values(null,#{username},#{password},#{age},#{gender},#{email});
    </insert>

1.5、使用@Param标识参数

        可以在mapper接口方法的参数上设置@Param注解
        此时Mybatis会将参数放在map集合中,以两种方式存储数据
(1)以@Param注解的Value属性值为键,以参数为值
(2)以param1,param2...为键,以参数为值

    /**
     * 验证登录(使用@param注解)
     * @param username
     * @param password
     * @return
     */
    User checkLoginByParam(@Param("username") String username, @Param("password") String password);
<!--    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>

1.6.总结

在获取参数时,我将其分为两种,一种是实体类型的参数,一种是其他参数

对于实体类型的参数,只需要通过#{} 和${} 访问实体2类中的属性名,就可以获取相应的属性值

对于其他类型的参数,我们可以使用@Param注解设置参数的别名,再使用别名来获取参数

2、MyBatis的各种查询功能

2.1、查询一个实体对象

/**
     * 根据id查询用户信息
     * @param id
     * @return
     */
    User getUserById(@Param("id") Integer id);
<!--    User getUserById(@Param("id") Integer id);-->
    <select id="getUserById" resultType="user">
        select * from t_user where id = #{id};
    </select>
    

2.2、查询一个list集合

    /**
     * 查询全部
     * @return
     */
    List<User> getAllUser();
<!--    List<User> getAllUser();-->
    <select id="getAllUser" resultType="user">
        select  * from t_user;
    </select>

2.3、查询单个数据

   /**
     * 查询用户的总数量
     * @return
     */
    Integer getCount();
<!--    Integer getCount();-->
<!--
    Mybatis中为java中常用的类型设置了类型别名
        Integer:Integer int
        int:_int,_integer
        Map:map
        String:string
-->
    <select id="getCount" resultType="java.lang.Integer">
        select count(*) from t_user;
    </select>

2.4、查询一条数据为map集合

    /**
     * 根据id查询用户,放在一个Map集合中
     * @param id
     * @return
     */
    Map<String ,Object> getUserByIdMap(@Param("id") Integer id);
<!--    Map<String ,Object> getUserByIdMap(@Param("id") Integer id);-->
    <select id="getUserByIdMap" resultType="map">
        select * from t_user where id = #{id};
    </select>

2.5、查询多条数据为map集合

查询所用的用户信息为map集合

若查询的数据有多条时,并且要将每条数据转换为map集合

此时有两种解决方案

1、将mapper接口方法的返回值设置为泛型是map的list集合

2.可以将每条数据转换的map集合放在一个大的map中,但是必须要通过@MapKey注解将查询的某个字段的值作为大的map的键

一般使用方式一

(1)方式一

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

(2)方式二

/**
* 查询所有用户信息为map集合
* @return
* 将表中的数据以map集合的方式查询,一条数据对应一个map;若有多条数据,就会产生多个map集合,并且最终要以一个map的方式返回数据,此时需要通过@MapKey注解设置map集合的键,值是每条数据所对应的map集合
*/
@MapKey("id")
Map<String, Object> getAllUserToMap();
<!--    Map<String,Object> getUserByIdMapAll();-->
    <select id="getUserByIdMapAll" resultType="map">
        select * from t_user;
    </select>

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值