MyBatis~使用万能的ResultMap解决属性名和字段名不一致问题,实现分页查询 | 使用注解实现简单的CRUD(注意@Param的使用)

使用万能的ResultMap解决属性名和字段名不一致问题

  • 属性名和字段名不一致就是java中实体类的属性名称和数据库中的字段名称不一致
    在这里插入图片描述

在这里插入图片描述

  • 就会造成查到实体类所对应的字段为null
    在这里插入图片描述

解决方法

  1. 在sql语句中进行 字段名改造
    在这里插入图片描述
  2. 使用resultMap将属名与字段名进行匹配
    <select id="selectUserById2" parameterType="int" resultMap="resultMap">
        select * from user where id=#{id};
    </select>

    <resultMap id="resultMap" type="user">
        <result column="pwd" property="password"/>
    </resultMap>
  • 这样查出来就布为null了
    在这里插入图片描述

使用ResultMap时间分页查询

  • 分页可以减少数据的处理量,提高性能
select * from user limit {startIndex},{pagesize};
  • 注意数据库第一个元素是下标为0, pagesize就是查到的个数比如 limit 0 ,2 查到的是第一数据和第二个数据

实现分页

  • 在映射文件sql语句中使用万能的map传入俩个值, startIndex和pageSize
    <select id="selectByLimit" resultType="user" parameterType="map">
        select * from user limit #{startIndex}, #{pageSize};
    </select>
    @org.junit.Test
    public void selectUserByLimit() {
        Map<String, Object> map = new HashMap<>();
        map.put("startIndex", 0);
        map.put("pageSize", 2);
        for (User user : getMapper().selectByLimit(map)) {
            System.out.println(user);
        }
        close();
    }

在这里插入图片描述

RowBounds实现分页

  • 就是全查出来, 在RowBounds中设置startIndex和pageSize的值
  • 作为了解 因为性能不如上面

使用注解实现简单的CRUD

  • 使用注解在接口文件方法字段上就可以实现sql语句的编写, 减少了映射器xml文件的创建, 但是这个也有缺点,就是他只可以实现简单的sql语句, 如果查询的sql语句一旦复杂, 他就如能为力, 就比如上述的属性名和字段名不一致问题他就不能使用万能的map解决
  • 还要注意使用这个的时候在MyBatis配置文件中的绑定映射器要绑定接口文件, 不然就会出错

实现

    @Select("select * from user where id=#{uid} and name=#{name}")
    //使用常见数据类型, 和String类型必须使用@Param给定别名
    User selectOne(@Param("uid") int id, @Param("name") String name);

    @Update("update user set pwd=#{newPwd} where id=#{id}")
    int update(@Param("id") int id, @Param("newPwd") String newPWd);


    @Insert("insert into user values(#{id}, #{name}, #{pwd})")
    int insert(User user);


    @Delete("delete from user where id=#{id}")
    int delete(@Param("id") int id);

注意@Param的使用

  • 基本类型或者String类型, 需要加上, 引用类型不需要
  • 使用@Param设置参数别名, 尤其在多个参数的时候使用所有的参数起那么必须加上这个注解
  • 如果加了这个注解, sql语句就必定一定会找这个别名去获取对应的值
  • #{}使用预编译会避免sql注入问题, 但是${}是直接编译直接拼接, 会有sql注入问题,目前很大程度上都是使用#{}
  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值