Mybatis入门---超详细

目录

Mybatis------>ORM框架

1. 什么是ORM?

2. 怎么使用Mybatis?

3. 链表查询---多对一链表查询

4. 链表查询 --->  一对多链表查询

5.动态SQL语句

6. 模糊查询  like关键字

7. 分页插件--PageHelper


Mybatis------>ORM框架

        MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以使用简单的 XML 或注解来配置和映射原生信息,将接口和 Java 的 POJOs(Plain Ordinary Java Object,普通的 Java对象)映射成数据库中的记录。

        mybatis就是封装与数据库交互的半成品。

1. 什么是ORM?

        ORM,即Object-Relational Mapping(对象关系映射),它的作用是在关系型数据库和业务实体对象之间作一个映射,这样,我们在具体的操作业务对象的时候,就不需要再去和复杂的SQL语句打交道,只需简单的操作对象的属性和方法.。

2. 怎么使用Mybatis?

        ①创建一个mavenJava工程:

        

 

 

 创建完成后的样子:

         ②:引入mybatis的jar包 和 MySQL的jar包:

    <dependencies>
        <!--mysql驱动依赖-->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.26</version>
        </dependency>
        <!--mybatis的依赖-->
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.5.7</version>
        </dependency>
        <!--简化实体类中的set和get方法以及tostring方法和构造方法。-->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.18.20</version>
        </dependency>
    </dependencies>

 1.2.1在本地虚拟机mysql上创建一个库,并在里面创建一个staff员工表,并在里面填写数据

 1.2.2创建一个员工实体类Staff 和员工的Dao类

package com.zhl.entity;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

/**
 * @program: HellowMybatis
 * @description:
 * @author: 张会理
 * @create: 2021-12-03 14:51
 **/
@Data
@AllArgsConstructor
@NoArgsConstructor
public class Staff {

    private Integer staffid;//员工的id

    private String staffname;//员工的姓名

    private String staffsex;//员工的性别

    private Integer deptid;//员工的部门编号

    public Staff(String staffname, String staffsex, Integer deptid) {
        this.staffname = staffname;
        this.staffsex = staffsex;
        this.deptid = deptid;
    }
}
package com.zhl.dao;

import com.zhl.entity.Staff;

import java.util.List;

public interface StaffDao {
    int insertstaff(Staff staff);//添加员工
    int deletestaff(int staffid);//删除员工
    int updatestaff(int staffid);//修改员工信息
    List<Staff> selectallstaff();//查找所有员工
    List<Staff> selectonestaff(int staffid);//根据id查找一个员工
}

 1.2.3 编写数据源properties文件

jdbc.url=jdbc:mysql://localhost:3306/zhl?serverTimezone=Asia/Shanghai
jdbc.driverName=com.mysql.cj.jdbc.Driver
jdbc.username=root
jdbc.password=

 1.2.4 在resources中创建一个mapper文件夹并在里面存放mapper映射文件(编写SQL)

<?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">
<!--namespace:命名空间:它的值现在可以随便写。
以后必须和dao接口对应。
-->
<!--namespace:读取所写的Dao路径-->
<mapper namespace="com.zhl.dao.StaffDao">
    <!--type: 类型 表与哪个实体类的映射
        autoMapping=true   表示自动映射。默认为true
    -->
    <resultMap id="Map01" type="com.zhl.entity.Staff" autoMapping="true">
        <!--id 唯一标识 主键的映射关系 必须写!!!
            property="属性名"===实体类自己写的列名
            column="列名"===数据库列名
            result 普通字段
        -->
        <id property="staffid" column="staff_id"/>
        <result property="staffname" column="staff_name"/>
        <result property="staffsex" column="staff_sex"/>
        <result property="deptid" column="dept_id"/>
    </resultMap>
    <!--添加员工-->
    <!--这里的id必须和Dao中的方法名一致-->
    <insert id="insertstaff">
        insert into staff values(null,#{staffname},#{staffsex},#{deptid})
    </insert>
    <!--删除员工-->
    <!--这里的id必须和Dao中的方法名一致-->
    <delete id="deletestaff">
        delete from staff where staff_id=#{staffid}
    </delete>
    <!--修改员工-->
    <!--这里的id必须和Dao中的方法名一致-->
    <update id="updatestaff">
        update staff set staff_name=#{staffname},staff_sex=#{staffsex},dept_id=#{deptid} where dept_id=#{deptid}
    </update>
    <!--查询所有员工-->
    <!--这里的id必须和Dao中的方法名一致-->
    <select id="selectallstaff" resultMap="Map01">
        select * from staff
    </select>
    <!--根据员工id查询员工-->
    <!--这里的id必须和Dao中的方法名一致-->
    <select id="selectonestaff" resultMap="Map01">
        select * from staff where staff_id=#{staffid}
    </select>
</mapper>

1.2.5 配置mybatis的配置文件---mybatis会读取该文件的内容完成连接数据库的功能。 

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
    <!--配置文件信息-->
    <properties resource="mysqllogin.properties"/>
    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC" />
            <dataSource type="POOLED">
                <!--从配置文件中加载属性-->
                <property name="driver" value="${jdbc.driverName}"/>
                <property name="url" value="${jdbc.url}"/>
                <property name="username" value="${jdbc.username}"/>
                <property name="password" value="${jdbc.password}"/>
            </dataSource>
        </environment>
    </environments>
    <!--这里是加载编写的SQL语句文件路径-->
    <mappers>
        <mapper resource="mapper/StaffMapper.xml"/>
    </mappers>
</configuration>

1.2.6测试:

package StaffTest;

import com.zhl.dao.StaffDao;
import com.zhl.entity.Staff;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.junit.Before;
import org.junit.Test;

import java.io.Reader;
import java.util.List;

/**
 * @program: HellowMybatis
 * @description:
 * @author: 张会理
 * @create: 2021-12-03 15:17
 **/
public class staffTest {
    SqlSession session;
    @Before
    public void bf() throws Exception{
        Reader reader = Resources.getResourceAsReader("mybatis.xml");
        SqlSessionFactory build = new SqlSessionFactoryBuilder().build(reader);
        session = build.openSession();
    }
    //添加员工
    @Test
    public void insertstaff(){
        StaffDao mapper = session.getMapper(StaffDao.class);
        Staff staff = new Staff("添加的","男",2);
        mapper.insertstaff(staff);
        session.commit();
    }
    //删除员工
    @Test
    public void deletestaff(){
        StaffDao mapper = session.getMapper(StaffDao.class);
        mapper.deletestaff(6);
        session.commit();
    }
    //修改员工
    @Test
    public void updatestaff(){
        StaffDao mapper = session.getMapper(StaffDao.class);
        Staff staff = new Staff(7, "修改的", "女", 2);
        mapper.updatestaff(staff);
        session.commit();
    }
    //查询所有员工
    @Test
    public void selectallstaff(){
        StaffDao mapper = session.getMapper(StaffDao.class);
        List<Staff> selectallstaff = mapper.selectallstaff();
        System.out.println(selectallstaff);
    }
    //查询一个员工
    @Test
    public void selectonestaff(){
        StaffDao mapper = session.getMapper(StaffDao.class);
        List<Staff> selectonestaff = mapper.selectonestaff(6);
        System.out.println(selectonestaff);
    }
}

3. 链表查询---多对一链表查询

例子 : 根据员工id查询员工信息以及员工所属部门信息

在mysql创建dept部门表

 第一种多对一方法: 通过链表查询:

1.创建部门实体类

package com.zhl.entity;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

/**
 * @program: HellowMybatis
 * @description:
 * @author: 张会理
 * @create: 2021-12-03 16:07
 **/
@Data
@NoArgsConstructor
@AllArgsConstructor
public class Dept {
    private Integer deptid;
    private String deptname;

    public Dept(String deptname) {
        this.deptname = deptname;
    }
}

2.在员工Staff实体类添加 Dept部门属性对象

package com.zhl.entity;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

/**
 * @program: HellowMybatis
 * @description:
 * @author: 张会理
 * @create: 2021-12-03 14:51
 **/
@Data
@AllArgsConstructor
@NoArgsConstructor
public class Staff {

    private Integer staffid;//员工的id

    private String staffname;//员工的姓名

    private String staffsex;//员工的性别

    private Integer deptid;//员工的部门编号

    private Dept dept;//Dept部门属性对象

    public Staff(String staffname, String staffsex, Integer deptid) {
        this.staffname = staffname;
        this.staffsex = staffsex;
        this.deptid = deptid;
    }
}

3.编写mapper映射文件

<resultMap id="Map02" type="com.zhl.entity.Staff" autoMapping="true">
        <!--id 唯一标识 主键的映射关系 必须写!!!
            property="属性名"===实体类自己写的列名
            column="列名"===数据库列名
            result 普通字段
        -->
        <id property="staffid" column="staff_id"/>
        <result property="staffname" column="staff_name"/>
        <result property="staffsex" column="staff_sex"/>
        <result property="deptid" column="dept_id"/>
        <!--association:表示多对一
            property:表示在Staff实体类中写的Dept对象属性名
            javaType:表示该对象所属的实体类类型
            autoMapping:表示自动映射
        -->
        <association property="dept" javaType="com.zhl.entity.Dept" autoMapping="true">
            <id property="deptid" column="dept_id"/>
            <result property="deptname" column="dept_name"/>
        </association>
    </resultMap>

    <select id="selectSD" resultMap="Map02">
        select * from staff s join dept d on s.dept_id=d.dept_id where s.staff_id=#{staffid}
    </select>

4.测试:

//根据员工id查询员工信息和员工所属部门信息
    @Test
    public void selectSD(){
        StaffDao mapper = session.getMapper(StaffDao.class);
        Staff staff = mapper.selectSD(5);
        System.out.println(staff);
    }

第二种多对一方法: 通过嵌套查询。----两次查询。

1.编写部门Dao类

package com.zhl.dao;

import com.zhl.entity.Dept;

public interface DeptDao {
    Dept selectById(int deptid);
}

2.编写员工Dao类方法

package com.zhl.dao;

import com.zhl.entity.Staff;

import java.util.List;

public interface StaffDao {

    int insertstaff(Staff staff);//添加员工

    int deletestaff(int staffid);//删除员工

    int updatestaff(Staff staff);//修改员工信息

    List<Staff> selectallstaff();//查找所有员工

    List<Staff> selectonestaff(int staffid);//根据id查找一个员工

    Staff selectSD(int staffid);//查询员工和部门信息--多对一链表查询 第一种方法

    Staff selectSD2(int staffid);//查询员工和部门信息--多对一链表查询 第二种方法
}

3.编写mapper映射文件----两个 这个是员工映射文件

<resultMap id="Map03" type="com.zhl.entity.Staff" autoMapping="true">
        <!--id 唯一标识 主键的映射关系 必须写!!!
            property="属性名"===实体类自己写的列名
            column="列名"===数据库列名
            result 普通字段
        -->
        <id property="staffid" column="staff_id"/>
        <result property="staffname" column="staff_name"/>
        <result property="staffsex" column="staff_sex"/>
        <result property="deptid" column="dept_id"/>
        <!--column:数据库列名  select='要调用另一个表的查询的方法名'-->
        <association property="dept" javaType="com.zhl.entity.Dept" column="dept_id" select="com.zhl.dao.DeptDao.selectById">

        </association>
    </resultMap>
    <select id="selectSD2" resultMap="Map03">
        select * from staff where staff_id=#{staffid}
    </select>

4.编写mapper映射文件----两个 这个是部门映射文件

<?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">
<!--namespace:命名空间:它的值现在可以随便写。
以后必须和dao接口对应。
-->
<mapper namespace="com.zhl.dao.DeptDao">
    <resultMap id="Map04" type="com.zhl.entity.Dept">
        <id property="deptid" column="dept_id"/>
        <result property="deptname" column="dept_name"/>
    </resultMap>
    <select id="selectById" resultMap="Map04">
        select * from dept where dept_id=#{deptid}
    </select>
</mapper>

5.测试

//根据员工id查询员工信息和员工所属部门信息 第二种方法
    @Test
    public void selectSD2(){
        StaffDao mapper = session.getMapper(StaffDao.class);
        Staff staff = mapper.selectSD2(5);
        System.out.println(staff);
    }

4. 链表查询 --->  一对多链表查询

例:根据部门id查询部门信息以及该部门的所有员工

1.在部门实体类里添加员工数组属性

package com.zhl.entity;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.util.List;

/**
 * @program: HellowMybatis
 * @description:
 * @author: 张会理
 * @create: 2021-12-03 16:07
 **/
@Data
@NoArgsConstructor
@AllArgsConstructor
public class Dept {
    private Integer deptid;
    private String deptname;
    private List<Staff> staff;//因为查询的可能是多个员工  所以定为数组返回


    public Dept(String deptname) {
        this.deptname = deptname;
    }
}

2.在部门Dao方法里添加 查询方法

Dept selectByStaff(int deptid);

3.编写mapper映射文件

<resultMap id="Map05" type="com.zhl.entity.Dept">
        <id property="deptid" column="dept_id"/>
        <result property="deptname" column="dept_name"/>
        <!--
            collection: 集合的意思  是很多的意思 emm
                property: 集合对象名
                ofType: 集合的泛型
        -->
        <collection property="staff" ofType="com.zhl.entity.Staff" autoMapping="true">
            <id property="staffid" column="staff_id"/>
            <result property="staffname" column="staff_name"/>
            <result property="staffsex" column="staff_sex"/>
            <result property="deptid" column="dept_id"/>
        </collection>
    </resultMap>
    <!--这里的id必须和Dao中的方法名一致-->
    <select id="selectByStaff" resultMap="Map05">
        select * from dept d join staff s on d.dept_id=s.dept_id where d.dept_id=#{deptid}
    </select>

4.测试

//一对多链表查询
    @Test
    public void selectByStaff(){
        DeptDao deptDao = session.getMapper(DeptDao.class);
        Dept dept = deptDao.selectByStaff(1);
        System.out.println(dept);
    }

5.动态SQL语句

动态SQL语句:  sql语句根据条件而发生改变。

准备: 在本地虚拟机mysql上创建一个book_info图书信息表:

 1.编写图书信息实体类

package com.zhl.entity;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

/**
 * @program: HellowMybatis
 * @description:
 * @author: 张会理
 * @create: 2021-12-03 19:13
 **/
@Data
@NoArgsConstructor
@AllArgsConstructor
public class Book_info {
    private Integer bookid;//图书id
    private String bookname;//图书名字
    private String bookauthor;//图书作者
    private Integer bookprice;//图书价格
    private String bookpub;//图书出版社
}

2.动态SQL语句 if和where一起使用

2.1编写Dao方法

package com.zhl.dao;

import com.zhl.entity.Book_info;

import java.util.List;
import java.util.Map;

/**
 * @program: HellowMybatis
 * @description:
 * @author: 张会理
 * @create: 2021-12-03 19:13
 **/
public interface Book_infoDao {
    List<Book_info> findByCondition(Map<String,Object> map);//if 和 where 一起使用  按条件查询
}

2.2编写BookMapper映射文件

<?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">
<!--namespace:命名空间:它的值现在可以随便写。
以后必须和dao接口对应。
-->
<mapper namespace="com.zhl.dao.Book_infoDao">
    <resultMap id="Map06" type="com.zhl.entity.Book_info">
        <id property="bookid" column="book_id"/>
        <result property="bookname" column="book_name"/>
        <result property="bookauthor" column="book_author"/>
        <result property="bookprice" column="book_price"/>
        <result property="bookpub" column="book_pub"/>
    </resultMap>

    <!--if和where一起用-->
    <select id="findByCondition" resultMap="Map06">
        /*where: 可以帮你添加where关键 并且把第一个的and | or 去除
            if:判断要查找的内容是否为空或者空字符
        */
        select * from book_info
        <where>
            <if test="bookname!=null and bookname!=''">
                and book_name=#{bookname}
            </if>
            <if test="bookauthor!=null and bookauthor!=''">
                and book_author=#{bookauthor}
            </if>
        </where>
    </select>
</mapper>

3.动态SQL语句 [choose , when , otherwise] 和 where 一起使用

3.1 编写Dao方法

package com.zhl.dao;

import com.zhl.entity.Book_info;

import java.util.List;
import java.util.Map;

/**
 * @program: HellowMybatis
 * @description:
 * @author: 张会理
 * @create: 2021-12-03 19:13
 **/
public interface Book_infoDao {
    List<Book_info> findByCondition(Map<String,Object> map);//if 和 where 一起使用  按条件查询

    List<Book_info> findByCondition1(Map<String,Object> map);//[choose , when , otherwise] 和 where 一起使用
}

3.2编写BookMapper映射文件

    <!--[choose , when , otherwise] 和 where 一起使用-->
    <select id="findByCondition1" resultMap="Map06">
        /*choose + where
            when: 当条件满足时不会执行下面的when和other  都不满足则执行otherwise
            otherwise: 当when所有条件都不满足时执行
        */
        select * from book_info
        <where>
            <choose>
                <when test="bookname!=null and bookname!=''">
                    and book_name=#{bookname}
                </when>
                <when test="bookauthor!=null and bookauthor!=''">
                    and book_author=#{bookauthor}
                </when>
                <otherwise>

                </otherwise>
            </choose>
        </where>
    </select>

3.3测试

/*[choose , when , otherwise] 和 where 一起使用*/
    @Test
    public void findByCondition1(){
        Book_infoDao mapper = session.getMapper(Book_infoDao.class);
        HashMap<String, Object> map = new HashMap<String, Object>();
        map.put("bookname","");
        map.put("bookauthor","");
        List<Book_info> list = mapper.findByCondition1(map);
        System.out.println(list);
    }

4.动态SQL语句 set标签 修改部分字段。和if一起使用

4.1 编写Dao方法

package com.zhl.dao;

import com.zhl.entity.Book_info;

import java.util.List;
import java.util.Map;

/**
 * @program: HellowMybatis
 * @description:
 * @author: 张会理
 * @create: 2021-12-03 19:13
 **/
public interface Book_infoDao {
    List<Book_info> findByCondition(Map<String,Object> map);//if 和 where 一起使用  按条件查询

    List<Book_info> findByCondition1(Map<String,Object> map);//[choose , when , otherwise] 和 where 一起使用

    void updatebook(Book_info bookInfo);//set标签 修改部分字段。和if一起使用
}

4.2 编写BookMapper映射文件

<!--set标签 修改部分字段。和if一起使用-->
    <update id="updatebook">
        /*set 可以帮你添加set关键字  并且去除最后的逗号*/
        update book_info
        <set>
            <if test="bookname!=null and bookname!=''">
                book_name=#{bookname},
            </if>
            <if test="bookauthor!=null and bookauthor!=''">
                book_author=#{bookauthor},
            </if>
            <if test="bookprice!=null and bookprice!=''">
                book_price=#{bookprice},
            </if>
            <if test="bookpub!=null and bookpub!=''">
                book_pub=#{bookpub},
            </if>
        </set>
        where book_id=#{bookid}
    </update>

4.3测试

    /*set标签 修改部分字段。和if一起使用*/
    @Test
    public void updatebook(){
        Book_infoDao mapper = session.getMapper(Book_infoDao.class);
        Book_info bookInfo = new Book_info();
        bookInfo.setBookid(1006);
        bookInfo.setBookname("完美世界");
        bookInfo.setBookauthor("辰东");
        bookInfo.setBookprice(23);
        //可以不写值 并且原来的内容不会被空字符或者别的什么修改掉
        bookInfo.setBookpub("");
        mapper.updatebook(bookInfo);
        session.commit();
    }

5.动态SQL语句 foreach 批量删除。

5.1 编写Dao方法

package com.zhl.dao;

import com.zhl.entity.Book_info;
import org.apache.ibatis.annotations.Param;

import java.util.List;
import java.util.Map;

/**
 * @program: HellowMybatis
 * @description:
 * @author: 张会理
 * @create: 2021-12-03 19:13
 **/
public interface Book_infoDao {
    List<Book_info> findByCondition(Map<String,Object> map);//if 和 where 一起使用  按条件查询

    List<Book_info> findByCondition1(Map<String,Object> map);//[choose , when , otherwise] 和 where 一起使用

    void updatebook(Book_info bookInfo);//set标签 修改部分字段。和if一起使用

    void batchdeletebook(@Param("bookid01") int[] bookid01);//foreach 批量删除
}

5.2 编写BookMapper映射文件

    <!--foreach 批量删除-->
    <!--
    这个语句相当于SQL语句中的===>   delete from book_info where book_id in (值1,值2,值3.........);

    foreach:
    collection: 要遍历的集合和数组名
    item: 每次遍历时赋值的元素变量名
    open: 以什么开始  这里以 ( 开始
    close: 以什么结束  这里以 ) 结束
    separator:  以什么作为分隔符  一般都为  ,
    -->
    <delete id="batchdeletebook">
        delete from book_info where book_id in
        <foreach collection="bookid01" item="bookid" open="(" close=")" separator=",">
            #{bookid}
        </foreach>
    </delete>

5.3 测试

    /*foreach 批量删除*/
    @Test
    public void batchdeletebook(){
        Book_infoDao mapper = session.getMapper(Book_infoDao.class);
        int[] bookid={1004,1005,1006};
        mapper.batchdeletebook(bookid);
        session.commit();
    }

6. 模糊查询  like关键字

1.例子:查询以 姓张 的员工

2.编写员工Dao方法

package com.zhl.dao;

import com.zhl.entity.Staff;

import java.util.List;

public interface StaffDao {

    //int insertstaff(Staff staff);//添加员工

    //int deletestaff(int staffid);//删除员工

    //int updatestaff(Staff staff);//修改员工信息

    //List<Staff> selectallstaff();//查找所有员工

    //List<Staff> selectonestaff(int staffid);//根据id查找一个员工

    //Staff selectSD(int staffid);//查询员工和部门信息--多对一链表查询 第一种方法

    //Staff selectSD2(int staffid);//查询员工和部门信息--多对一链表查询 第二种方法

    List<Staff> selectallstaff1(String staffname);//模糊查询
}

3.编写BookMapper映射文件

    <!--模糊查询-->
    <select id="selectallstaff1" resultMap="Map01">
        select * from staff s join dept d on s.dept_id=d.dept_id
        <where>
            <if test="staffname!=null and staffname!=''">
                s.staff_name like concat(#{staffname},'%')
            </if>
        </where>
    </select>

4.测试

    //模糊查询
    @Test
    public void selectallstaff1(){
        StaffDao mapper = session.getMapper(StaffDao.class);
        List<Staff> list = mapper.selectallstaff1("赵");
        System.out.println(list);
    }

7. 分页插件--PageHelper

例子:查询王姓员工的所有信息 , 分页查询 , 每页查询5个.

1.分页查询的SQL语句:   select * from 表名  limit (page-1)*pageSize,pageSize;

                                        page: 当前要显示的页码

                                        pageSize: 每页显示的条数

2.引入相关的pageHelper依赖

        <dependency>
            <groupId>com.github.pagehelper</groupId>
            <artifactId>pagehelper</artifactId>
            <version>5.1.11</version>
        </dependency>

3.加入拦截  -----在mybatis的配置文件中加入

    <!--
        plugins在此处的位置必须符合要求,否则会报错  顺序如下:
        properties? , settings?,
        typeAliases? , typeHandlers?,
        objectFactory?, objectWrapperFactory?,
        pligins?,
        environments?, databaseIdProvider?, mappers?
    -->
    <plugins>
        <!--com.github.pagehelper.PageInterceptor 为PageHelper类所在包名-->
        <plugin interceptor="com.github.pagehelper.PageInterceptor">
            <!--使用下面的而方式配置参数,后面会有所有的参数介绍-->
            <property name="param1" value="value1"/>
        </plugin>
    </plugins>

4.编写Dao方法

package com.zhl.dao;

import com.zhl.entity.Staff;

import java.util.List;

public interface StaffDao {

    /*int insertstaff(Staff staff);//添加员工

    int deletestaff(int staffid);//删除员工

    int updatestaff(Staff staff);//修改员工信息

    List<Staff> selectallstaff();//查找所有员工

    List<Staff> selectonestaff(int staffid);//根据id查找一个员工

    Staff selectSD(int staffid);//查询员工和部门信息--多对一链表查询 第一种方法

    Staff selectSD2(int staffid);//查询员工和部门信息--多对一链表查询 第二种方法

    List<Staff> selectallstaff1(String staffname);//模糊查询*/

    List<Staff> selectallstaff2(String staffname);//分页查询
}

5.编写BookMapper映射文件

    <!--分页查询-->
    <select id="selectallstaff2" resultMap="Map01">
        select * from staff s join dept d on s.dept_id=d.dept_id
        <where>
            <if test="staffname!=null and staffname!=''">
                s.staff_name like concat(#{staffname},'%')
            </if>
        </where>
    </select>

6.测试

    //分页查询
    @Test
    public void selectallstaff2(){
        StaffDao mapper = session.getMapper(StaffDao.class);
        PageHelper.startPage(0,5);//pageNum: 从哪里开始   pageSize: 显示的个数有多少个
        List<Staff> list = mapper.selectallstaff2("王");
        System.out.println(list);
    }

7. 可以把查询到的结果封装到PageInfo类中 包含你想要的任何信息  代码如下:

    //分页查询
    @Test
    public void selectallstaff2(){
        StaffDao mapper = session.getMapper(StaffDao.class);
        PageHelper.startPage(0,5);//pageNum: 从哪里开始   pageSize: 显示的个数有多少个
        List<Staff> list = mapper.selectallstaff2("王");
        //可以把查询到的结果封装到PageInfo类中  包含你想要的任何信息
        PageInfo<Staff> pageInfo = new PageInfo<Staff>(list);
        System.out.println("总条数为:"+pageInfo.getTotal());
        System.out.println("当前页码的数据:"+pageInfo.getList());
    }

  • 5
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值