Mybatis三种分页+批量增删改

9、Mybatis分页

9.1、sql的limit分页

 从1开始到2结束
 数据库信息第一个下标为0
select * from tb_user limit 1,2
select * from tb_user limit 2; [0,2]

方式一

9.9.1、接口

// 分页
List<UserBean> getUserByLimit(Map<String,Integer> map);

9.9.1、Mapper

<resultMap id="userMap" type="UserBean">
    <id column="tb_id" property="id"/>
    <result column="tb_name" property="name"/>
    <result column="tb_pwd" property="pwd"/>
</resultMap>

 <!-- 分页查询 -->
<select id="getUserByLimit" parameterType="map" resultMap="userMap">
    SELECT * from tb_user limit #{startIndex},#{pageSize}
</select>

9.9.1、测试

@Test
public void getUserList(){
    // 获取sqlSession对象
    SqlSession sqlSession = MapperUtils.getSqlSession();

    Map<String, Integer> map = new HashMap<>();
    map.put("startIndex",1);
    map.put("pageSize",3);
    UserMapper mapper = sqlSession.getMapper(UserMapper.class);
    List<UserBean> userList = mapper.getUserByLimit(map);
    for (UserBean userBean : userList) {
        System.out.println(userBean);
    }

    // 关闭sqlSession
    sqlSession.close();
}

方式二:使用对象来进行分页,RowBounds

9.2.1、接口

// 分页  方式2
List<UserBean> getUserByRowBounds();

9.2.1、Mapper

<select id="getUserByRowBounds" resultMap="userMap">
    SELECT * from tb_user
</select>

9.2.1、测试

@Test
public void getUserByRowBounds(){
    RowBounds rowBounds = new RowBounds(1,2);
    // 获取sqlSession对象
    SqlSession sqlSession = MapperUtils.getSqlSession();

    List<UserBean> user = sqlSession.selectList("com.wen.mapper.UserMapper.getUserByRowBounds",null,rowBounds);
    for (UserBean userBean : user) {
        System.out.println(userBean);
    }

    // 关闭sqlSession
    sqlSession.close();
}

方式三:使用分页插件,Mybatis-PageHelper


9.3.1、如何使用

网页文档:https://pagehelper.github.io/docs/howtouse/

9.3.1.1、导入Maven依赖引入分页插件

<!--Mybatis-PageHelper分页插件-->
<dependency>
    <groupId>com.github.pagehelper</groupId>
    <artifactId>pagehelper</artifactId>
    <version>4.0.0</version>
</dependency>

9.3.1.2、配置拦截器插件

<!-- 在 MyBatis.config.xml 配置中配置拦截器插件   匿名下面typeAliases-->
<plugins>   
    <!-- com.github.pagehelper为PageHelper类所在包名 -->
    <plugin interceptor="com.github.pagehelper.PageHelper">
        <!-- 方言 -->
        <property name="dialect" value="mysql"/>
        <!-- 该参数默认为false -->
        <!-- 设置为true时,使用RowBounds分页会进行count查询 -->
        <property name="rowBoundsWithCount" value="true"/>
    </plugin>
</plugins>

9.3.1.3、代码中使用 接口

// 分页  方式3
List<UserBean> getUserByPageHelper(UserBean userBean);

9.3.1.4、代码中使用 Mapper

<!--分页3-->
<select id="getUserByPageHelper" resultMap="userMap">
    SELECT * from tb_user
</select>

9.3.1.4、代码中使用 测试

@Test
public void getUserByPageHelper(){
    SqlSession sqlSession = MapperUtils.getSqlSession();

    UserMapper mapper = sqlSession.getMapper(UserMapper.class);
    PageHelper.startPage(2,2,true);

    List<UserBean> userList = mapper.getUserByPageHelper(new UserBean());
    PageInfo<UserBean> pageInfo = new PageInfo<UserBean>(userList);

    System.out.println("数据总数" + pageInfo.getTotal());  // pageInfo  多个方法
    System.out.println("数据总页数"+pageInfo.getPages());
    System.out.println("数据最后一页"+pageInfo.getLastPage());

    for (UserBean userBean : pageInfo.getList()) {
        System.out.println(userBean);
    }
    sqlSession.close();
}

10、批量增删改

10.1、批量增加

10.1.1、接口

// 批量增加
int addUsers(List<UserBean> user);

10.1.2、Mapper

<!--批量增加-->
<insert id="addUsers" parameterType="list" keyProperty="id" useGeneratedKeys="true">
    insert into tb_user (tb_id,tb_name,tb_pwd) values
    <foreach collection="list" item="u" index="list" separator=",">
        (#{u.id},#{u.name},#{u.pwd})
    </foreach>
</insert>

10.1.3、测试

@Test
public void addUsers(){
    SqlSession sqlSession = MapperUtils.getSqlSession();

    List<UserBean> userList = new ArrayList<>();
    userList.add(new UserBean("麦穗儿2","66666"));
    userList.add(new UserBean("玉米粒儿3","77777"));
    userList.add(new UserBean("小米儿4","88888"));
    UserMapper mapper = sqlSession.getMapper(UserMapper.class);
    int nums = mapper.addUsers(userList);
    if (nums>0){
        logger.info("批量添加成功===========");
    } else {
        logger.info("批量添加失败-----------");
    }

    // 增删改需要commit()  提交事务
    sqlSession.commit();
    sqlSession.close();
}

10.2、批量删除

10.2.1、接口

// 批量删除
int delUsers(@Param("idList") List<Integer> list);

// 批量删除
int delUsersMap(Map<String,Object> map);

10.2.2、Mapper

<!--批量删除-->
<delete id="delUsers" parameterType="list">
    delete from tb_user where tb_id in
    <foreach collection="idList" item="id" separator="," open="(" close=")">
        #{id}
    </foreach>
</delete>

<!--批量删除 2-->
<delete id="delUsersMap" parameterType="hashmap">
    delete from tb_user where tb_id in
    <foreach collection="uid" item="id" separator="," open="(" close=")">
        #{id}
    </foreach>
</delete>

10.2.3、测试

@Test
public void delUsers(){
    SqlSession sqlSession = MapperUtils.getSqlSession();
    List<Integer> list = new ArrayList<>();
    list.add(16);
    list.add(13);
    list.add(8);
    UserMapper mapper = sqlSession.getMapper(UserMapper.class);
    int nums = mapper.delUsers(list);
    System.out.println(nums);

    // 增删改需要commit()  提交事务
    sqlSession.commit();
    sqlSession.close();
}

@Test
public void delUsersMap(){
    SqlSession sqlSession = MapperUtils.getSqlSession();
    List<Integer> list = new ArrayList<>();
    list.add(25);
    list.add(26);
    list.add(27);
    Map<String,Object> map = new HashMap<String,Object>();
    map.put("uid",list);
    UserMapper mapper = sqlSession.getMapper(UserMapper.class);
    int i = mapper.delUsersMap(map);
    System.out.println(i);
    // 增删改需要commit()  提交事务
    sqlSession.commit();
    sqlSession.close();
}

10.3、批量修改

10.3.1、接口

// 批量修改  两个id  修改1个值
int updateUserByMapOne(Map<String,Object> map);

// 批量修改  两个id  修改两个值
int updateUserByMapTwo(Map<String,Object> map);

// 简化批量修改  两个id  修改两个值
int updateUserByMapThree(Map<String,Object> map);

10.3.2、Mapper

<!--两个id修改一个值-->
<update id="updateUserByMapOne" parameterType="map">
    update tb_user set tb_name = #{name} where tb_id in
    <foreach collection="uidList" item="uid" separator="," open="(" close=")">
        #{uid}
    </foreach>
</update>

<!--批量修改  两个id修改两个值-->
<update id="updateUserByMapTwo" parameterType="hashmap">
    update tb_user set tb_name = #{name},tb_pwd = #{pwd}
    where tb_id in
    <foreach collection="userid" item="uid" open="(" close=")" separator=",">
        #{uid}
    </foreach>
</update>

<!--简化修改-->
<update id="updateUserByMapThree" parameterType="hashmap">
    update tb_user
    <set>
        <if test="name != null">
            tb_name = #{name},
        </if>
        <if test="pwd != null">
            tb_pwd = #{pwd}
        </if>
    </set>
    where tb_id in
    <foreach collection="userid" item="uid" open="(" close=")" separator=",">
        #{uid}
    </foreach>
</update>

10.3.3、测试

// 根据两个id修改一个值
@Test
public void updateUserByMap(){
    SqlSession sqlSession = MapperUtils.getSqlSession();

    List<Integer> list = new ArrayList<>();
    Map<String,Object> map = new HashMap<String,Object>();

    list.add(28);
    list.add(29);
    map.put("uidList",list);
    map.put("name","麦穗儿");
    UserMapper mapper = sqlSession.getMapper(UserMapper.class);

    int i = mapper.updateUserByMapOne(map);
    System.out.println(i);
    // 增删改需要commit()  提交事务
    sqlSession.commit();
    sqlSession.close();
}

// 两个id修改两个值
@Test
public void updateUserByMapTwo(){
    SqlSession sqlSession = MapperUtils.getSqlSession();

    List<Integer> list = new ArrayList<>();
    Map<String,Object> map = new HashMap<String,Object>();

    list.add(28);
    list.add(29);
    map.put("userid",list);
    map.put("name","麦穗儿2");
    map.put("pwd","22222");
    UserMapper mapper = sqlSession.getMapper(UserMapper.class);

    int i = mapper.updateUserByMapTwo(map);
    System.out.println(i);
    // 增删改需要commit()  提交事务
    sqlSession.commit();
    sqlSession.close();
}

// 简化批量修改
@Test
public void updateUserByMapThree(){
    SqlSession sqlSession = MapperUtils.getSqlSession();

    List<Integer> list = new ArrayList<>();
    Map<String,Object> map = new HashMap<String,Object>();

    for (int i = 31; i <=33 ; i++) {
        list.add(i);
    }
    map.put("userid",list);
    map.put("name","麦穗儿");
    map.put("pwd","Three");
    UserMapper mapper = sqlSession.getMapper(UserMapper.class);

    int i = mapper.updateUserByMapThree(map);
    System.out.println(i);
    // 增删改需要commit()  提交事务
    sqlSession.commit();
    sqlSession.close();
}
posted @ 2021-05-09 17:41  W·EN  阅读(337)  评论(0)    收藏  举报