首页 > 其他 > 详细

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

时间:2021-05-21 22:19:38      阅读:21      评论:0      收藏:0      [点我收藏+]

1、resultMap

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

技术分享图片

代码

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、结果:
技术分享图片

1.5、注意点:

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

技术分享图片

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、测试结果:

技术分享图片

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注入

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

原文:https://www.cnblogs.com/Right-A/p/14794960.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!