Mybatis-04-结果集映射 | 分页 | 注解 | Lombok

1、resultMap

使用结果集(resultMap)来解决实体类,和数据库字段不一致的问题

image

代码

1.1、UserMapper接口:

public interface UserMapper {
    List<User> queryUsers();
}

1.2、UserMapper.xml配置文件:

column 数据库中列, property 实体类中的属性

<?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="com.qn.dao.UserMapper">
    <select id="queryUsers" resultMap="userMap">
        select *
        from mybatis.user
    </select>

    <resultMap id="userMap" type="user">
        <result column="id" property="id"/>
        <result column="name" property="name"/>
        <result column="pwd" property="password"/>
    </resultMap>
</mapper>

1.3、测试代码:

@Test
public void queryUsers() {
    SqlSession sqlSession = MybatisUtils.getSqlSession();
    UserMapper mapper = sqlSession.getMapper(UserMapper.class);
    List<User> userList = mapper.queryUsers();
    for (User user : userList) {
        System.out.println(user.toString());
    }
    sqlSession.close();
}

1.4、结果:
image

1.5、注意点:

要使用 resultMap 不是 resultType,值也要和 resultMap中的 id对应

image

2、分页功能

为什么要分页:

  • 对数据库进行多次查询,每次只获得本页的数据,减少数据的处理量
  • 如果一次将这些数据查询出来,必然加大了服务器内存的负载,降低了系统的运行速度

语法

select * from mybatis.user limit startIndex,pageSize
select * from mybatis.user limit 0,5; -- 查询 从0 到5 人数据

代码实现

2.1、UserMapper接口:

public interface UserMapper {
    // 分页查询
    List<User> getUserByLimit(Map<String, Integer> map);
}

2.2、UserMapper.xml配置文件:

column 数据库中列, property 实体类中的属性

<?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="com.qn.dao.UserMapper">

    <select id="getUserByLimit" parameterType="map" resultMap="userMap">
        select *
        from mybatis.user
        limit #{startIndex},#{pageSize}
    </select>
    
    <resultMap id="userMap" type="user">
        <result column="id" property="id"/>
        <result column="name" property="name"/>
        <result column="pwd" property="password"/>
    </resultMap>
</mapper>

2.3、测试代码:

@Test
public void getUserByLimit() {
    SqlSession sqlSession = MybatisUtils.getSqlSession();
    UserMapper mapper = sqlSession.getMapper(UserMapper.class);

	Map<String, Integer> map = new HashMap<String, Integer>();
    map.put("startIndex",0);
    map.put("pageSize",3);

    List<User> userList = mapper.getUserByLimit(map);
    for (User user : userList) {
        System.out.println(user.toString());
    }
    sqlSession.close();
}

2.4、测试结果:

image

3、使用注解开发

3.1、代码实现

public interface UserMapper {
    @Select("select * from mybatis.user")
    List<User> getUserList();

    @Select("select *from mybatis.user where id = #{id}")
    User getUserById`@Param("id") int id);

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

    @Update("update user set name=#{name},pwd=#{pwd} where id=#{id}")
    int updateUser(User user);

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

3.2、测试:

测试方式 与 xml 配置开发相同

@Test
public void queryUsers() {
    SqlSession sqlSession = MybatisUtils.getSqlSession();
    UserMapper mapper = sqlSession.getMapper(UserMapper.class);
    List<User> userList = mapper.getUserList();
    for (User user : userList) {
        System.out.println(user.toString());
    }
    sqlSession.close();
}

3.3、注意点:

  • 必须要将接口注册绑定到 mybatis的核心配置文件中
  • 方法存在多个 所有的参数前面必须加上 @Param("id") 注解
    • (@Param("id") int id, @Param("name") String name);
  • 复杂sql不好用,搜集sql不方便,管理不方便,修改需重新编译

4、#{} and ${}

#和$符号:

相同点:都是对参数进行标记的符号
不同点:

  • # 是预编译,防止sql注入
  • $ 相当于一个占位符,不能防止sql注入

5、Lombok

5.1、安装Lombok

IDEA使用Lombok IDEA 2020.3之前版本需要安装 Lombok插件 Lombok官网

image

IDEA 插件

image

Maven 导入依赖

<!-- https://mvnrepository.com/artifact/org.projectlombok/lombok -->
<dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
    <version>1.18.20</version>
    <scope>provided</scope>
</dependency>

5.2、使用Lombok

在实体类上加注解即可!

@Data
@AllArgsConstructor
@NoArgsConstructor
public class User {
    private int id;
    private String name;
    private String pwd;
}

常用:

@Data // 生成 无参构造,get、set、tostring、hashcode,equals
@AllArgsConstructor // 生成 有参构造
@NoArgsConstructor  // 生成 无参构造

其他:

@Getter and @Setter
@FieldNameConstants
@ToString
@EqualsAndHashCode
@AllArgsConstructor, @RequiredArgsConstructor and @NoArgsConstructor
@Log, @Log4j, @Log4j2, @Slf4j, @XSlf4j, @CommonsLog, @JBossLog, @Flogger
@Data
@Builder
@Singular
@Delegate
@Value
@Accessors
@Wither
@SneakyThrows
posted @ 2021-05-21 18:10  遇见星光  阅读(66)  评论(0编辑  收藏  举报