1.3 原始jdbc操作的分析 原始jdbc开发存在的问题如下: ①数据库连接创建、释放频繁造成系统资源浪费从而影响系统性能 ②sql 语句在代码中硬编码,造成代码不易维护,实际应用 sql 变化的可能较大,sql 变动需要改变java代码。 ③查询操作时,需要手动将结果集中的数据手动封装到实体中。插入操作时,需要手动将实体的数据设置到sql语句的占位符位置
应对上述问题给出的解决方案: ①使用数据库连接池初始化连接资源 ②将sql语句抽取到xml配置文件中 ③使用反射、内省等底层技术,自动将实体与表进行属性与字段的自动映射 1.4 什么是Mybatismybatis 是一个优秀的基于java的持久层框架,它内部封装了jdbc,使开发者只需要关注sql语句本身,而不需要花费精力去处理加载驱动、创建连接、创建statement等繁杂的过程。 mybatis通过xml或注解的方式将要执行的各种 statement配置起来,并通过java对象和statement中sql的动态参数进行映射生成最终执行的sql语句。 最后mybatis框架执行sql并将结果映射为java对象并返回。采用ORM思想解决了实体和数据库映射的问题,对jdbc 进行了封装,屏蔽了jdbc api 底层访问细节,使我们不用与jdbc api 打交道,就可以完成对数据库的持久化操作。 MyBatis开发步骤: ①添加MyBatis的坐标 ②创建user数据表 ③编写User实体类 ④编写映射文件UserMapper.xml ⑤编写核心文件SqlMapConfig.xml ⑥编写测试类 MyBatis常用配置解析1)environments标签 数据库环境的配置,支持多环境配置 file://D:/JAVA/%E6%96%B0%E5%BB%BA%E6%96%87%E4%BB%B6%E5%A4%B9%20(2)/web%E8%AF%BE%E7%A8%8B/web%E8%AF%BE%E7%A8%8B/SSM/mybatis/mybatis-day01/%E7%AC%94%E8%AE%B0/img/%E5%9B%BE%E7%89%878.png?lastModify=1560319589 其中,事务管理器(transactionManager)类型有两种: •JDBC:这个配置就是直接使用了JDBC 的提交和回滚设置,它依赖于从数据源得到的连接来管理事务作用域。 •MANAGED:这个配置几乎没做什么。它从来不提交或回滚一个连接,而是让容器来管理事务的整个生命周期(比如 JEE 应用服务器的上下文)。 默认情况下它会关闭连接,然而一些容器并不希望这样,因此需要将 closeConnection 属性设置为 false 来阻止它默认的关闭行为。 其中,数据源(dataSource)类型有三种: •UNPOOLED:这个数据源的实现只是每次被请求时打开和关闭连接。 •POOLED:这种数据源的实现利用“池”的概念将 JDBC 连接对象组织起来。 •JNDI:这个数据源的实现是为了能在如 EJB 或应用服务器这类容器中使用,容器可以集中或在外部配置数据源,然后放置一个 JNDI 上下文的引用。 2)mapper标签 该标签的作用是加载映射的,加载方式有如下几种: •使用相对于类路径的资源引用,例如: <mapper resource="org/mybatis/builder/AuthorMapper.xml"/> •使用完全限定资源定位符(URL),例如: <mapper url="file:///var/mappers/AuthorMapper.xml"/> •使用映射器接口实现类的完全限定类名,例如: <mapper class="org.mybatis.builder.AuthorMapper"/> •将包内的映射器接口实现全部注册为映射器,例如: <package name="org.mybatis.builder"/> 3)Properties标签 实际开发中,习惯将数据源的配置信息单独抽取成一个properties文件,该标签可以加载额外配置的properties文件 file://D:/JAVA/%E6%96%B0%E5%BB%BA%E6%96%87%E4%BB%B6%E5%A4%B9%20(2)/web%E8%AF%BE%E7%A8%8B/web%E8%AF%BE%E7%A8%8B/SSM/mybatis/mybatis-day01/%E7%AC%94%E8%AE%B0/img/%E5%9B%BE%E7%89%879.png?lastModify=1560319589 4)typeAliases标签 类型别名是为Java 类型设置一个短的名字。原来的类型名称配置如下 file://D:/JAVA/%E6%96%B0%E5%BB%BA%E6%96%87%E4%BB%B6%E5%A4%B9%20(2)/web%E8%AF%BE%E7%A8%8B/web%E8%AF%BE%E7%A8%8B/SSM/mybatis/mybatis-day01/%E7%AC%94%E8%AE%B0/img/%E5%9B%BE%E7%89%8710.png?lastModify=1560319589 配置typeAliases,为com.itheima.domain.User定义别名为user file://D:/JAVA/%E6%96%B0%E5%BB%BA%E6%96%87%E4%BB%B6%E5%A4%B9%20(2)/web%E8%AF%BE%E7%A8%8B/web%E8%AF%BE%E7%A8%8B/SSM/mybatis/mybatis-day01/%E7%AC%94%E8%AE%B0/img/%E5%9B%BE%E7%89%8711.png?lastModify=1560319589 上面我们是自定义的别名,mybatis框架已经为我们设置好的一些常用的类型的别名 file://D:/JAVA/%E6%96%B0%E5%BB%BA%E6%96%87%E4%BB%B6%E5%A4%B9%20(2)/web%E8%AF%BE%E7%A8%8B/web%E8%AF%BE%E7%A8%8B/SSM/mybatis/mybatis-day01/%E7%AC%94%E8%AE%B0/img/%E5%9B%BE%E7%89%8712.png?lastModify=1560319589 5.3 知识小结核心配置文件常用配置: properties标签:该标签可以加载外部的properties文件 <properties resource="jdbc.properties"></properties>typeAliases标签:设置类型别名 <typeAlias type="com.itheima.domain.User" alias="user"></typeAlias>mappers标签:加载映射配置 <mapper resource="com/itheima/mapper/UserMapping.xml"></mapper>environments标签:数据源环境配置标签 file://D:/JAVA/%E6%96%B0%E5%BB%BA%E6%96%87%E4%BB%B6%E5%A4%B9%20(2)/web%E8%AF%BE%E7%A8%8B/web%E8%AF%BE%E7%A8%8B/SSM/mybatis/mybatis-day01/%E7%AC%94%E8%AE%B0/img/%E5%9B%BE%E7%89%8713.png?lastModify=1560319589 6.MyBatis相应API6.1 SqlSession工厂构建器SqlSessionFactoryBuilder常用API:SqlSessionFactory build(InputStream inputStream) 通过加载mybatis的核心文件的输入流的形式构建一个SqlSessionFactory对象 String resource = "org/mybatis/builder/mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
SqlSessionFactory factory = builder.build(inputStream);其中, Resources 工具类,这个类在 org.apache.ibatis.io 包中。Resources 类帮助你从类路径下、文件系统或一个 web URL 中加载资源文件。 6.2 SqlSession工厂对象SqlSessionFactorySqlSessionFactory 有多个个方法创建SqlSession 实例。常用的有如下两个: file://D:/JAVA/%E6%96%B0%E5%BB%BA%E6%96%87%E4%BB%B6%E5%A4%B9%20(2)/web%E8%AF%BE%E7%A8%8B/web%E8%AF%BE%E7%A8%8B/SSM/mybatis/mybatis-day01/%E7%AC%94%E8%AE%B0/img/%E5%9B%BE%E7%89%8714.png?lastModify=1560319589 6.3 SqlSession会话对象SqlSession 实例在 MyBatis 中是非常强大的一个类。在这里你会看到所有执行语句、提交或回滚事务和获取映射器实例的方法。 执行语句的方法主要有: <T> T selectOne(String statement, Object parameter)
<E> List<E> selectList(String statement, Object parameter)
int insert(String statement, Object parameter)
int update(String statement, Object parameter)
int delete(String statement, Object parameter)
操作事务的方法主要有: void commit()
void rollback()
MyBatis常用配置解析1)environments标签 数据库环境的配置,支持多环境配置 file://D:/JAVA/%E6%96%B0%E5%BB%BA%E6%96%87%E4%BB%B6%E5%A4%B9%20(2)/web%E8%AF%BE%E7%A8%8B/web%E8%AF%BE%E7%A8%8B/SSM/mybatis/mybatis-day01/%E7%AC%94%E8%AE%B0/img/%E5%9B%BE%E7%89%878.png?lastModify=1560319589 其中,事务管理器(transactionManager)类型有两种: •JDBC:这个配置就是直接使用了JDBC 的提交和回滚设置,它依赖于从数据源得到的连接来管理事务作用域。 •MANAGED:这个配置几乎没做什么。它从来不提交或回滚一个连接,而是让容器来管理事务的整个生命周期(比如 JEE 应用服务器的上下文)。 默认情况下它会关闭连接,然而一些容器并不希望这样,因此需要将 closeConnection 属性设置为 false 来阻止它默认的关闭行为。 其中,数据源(dataSource)类型有三种: •UNPOOLED:这个数据源的实现只是每次被请求时打开和关闭连接。 •POOLED:这种数据源的实现利用“池”的概念将 JDBC 连接对象组织起来。 •JNDI:这个数据源的实现是为了能在如 EJB 或应用服务器这类容器中使用,容器可以集中或在外部配置数据源,然后放置一个 JNDI 上下文的引用。 2)mapper标签 该标签的作用是加载映射的,加载方式有如下几种: •使用相对于类路径的资源引用,例如: <mapper resource="org/mybatis/builder/AuthorMapper.xml"/> •使用完全限定资源定位符(URL),例如: <mapper url="file:///var/mappers/AuthorMapper.xml"/> •使用映射器接口实现类的完全限定类名,例如: <mapper class="org.mybatis.builder.AuthorMapper"/> •将包内的映射器接口实现全部注册为映射器,例如: <package name="org.mybatis.builder"/> 3)Properties标签 实际开发中,习惯将数据源的配置信息单独抽取成一个properties文件,该标签可以加载额外配置的properties文件 file://D:/JAVA/%E6%96%B0%E5%BB%BA%E6%96%87%E4%BB%B6%E5%A4%B9%20(2)/web%E8%AF%BE%E7%A8%8B/web%E8%AF%BE%E7%A8%8B/SSM/mybatis/mybatis-day01/%E7%AC%94%E8%AE%B0/img/%E5%9B%BE%E7%89%879.png?lastModify=1560319589 4)typeAliases标签 类型别名是为Java 类型设置一个短的名字。原来的类型名称配置如下 file://D:/JAVA/%E6%96%B0%E5%BB%BA%E6%96%87%E4%BB%B6%E5%A4%B9%20(2)/web%E8%AF%BE%E7%A8%8B/web%E8%AF%BE%E7%A8%8B/SSM/mybatis/mybatis-day01/%E7%AC%94%E8%AE%B0/img/%E5%9B%BE%E7%89%8710.png?lastModify=1560319589 配置typeAliases,为com.itheima.domain.User定义别名为user file://D:/JAVA/%E6%96%B0%E5%BB%BA%E6%96%87%E4%BB%B6%E5%A4%B9%20(2)/web%E8%AF%BE%E7%A8%8B/web%E8%AF%BE%E7%A8%8B/SSM/mybatis/mybatis-day01/%E7%AC%94%E8%AE%B0/img/%E5%9B%BE%E7%89%8711.png?lastModify=1560319589 上面我们是自定义的别名,mybatis框架已经为我们设置好的一些常用的类型的别名 file://D:/JAVA/%E6%96%B0%E5%BB%BA%E6%96%87%E4%BB%B6%E5%A4%B9%20(2)/web%E8%AF%BE%E7%A8%8B/web%E8%AF%BE%E7%A8%8B/SSM/mybatis/mybatis-day01/%E7%AC%94%E8%AE%B0/img/%E5%9B%BE%E7%89%8712.png?lastModify=1560319589 5.3 知识小结核心配置文件常用配置: properties标签:该标签可以加载外部的properties文件 <properties resource="jdbc.properties"></properties>typeAliases标签:设置类型别名 <typeAlias type="com.itheima.domain.User" alias="user"></typeAlias>mappers标签:加载映射配置 <mapper resource="com/itheima/mapper/UserMapping.xml"></mapper>environments标签:数据源环境配置标签 file://D:/JAVA/%E6%96%B0%E5%BB%BA%E6%96%87%E4%BB%B6%E5%A4%B9%20(2)/web%E8%AF%BE%E7%A8%8B/web%E8%AF%BE%E7%A8%8B/SSM/mybatis/mybatis-day01/%E7%AC%94%E8%AE%B0/img/%E5%9B%BE%E7%89%8713.png?lastModify=1560319589 6.MyBatis相应API6.1 SqlSession工厂构建器SqlSessionFactoryBuilder常用API:SqlSessionFactory build(InputStream inputStream) 通过加载mybatis的核心文件的输入流的形式构建一个SqlSessionFactory对象 String resource = "org/mybatis/builder/mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
SqlSessionFactory factory = builder.build(inputStream);其中, Resources 工具类,这个类在 org.apache.ibatis.io 包中。Resources 类帮助你从类路径下、文件系统或一个 web URL 中加载资源文件。 6.2 SqlSession工厂对象SqlSessionFactorySqlSessionFactory 有多个个方法创建SqlSession 实例。常用的有如下两个: file://D:/JAVA/%E6%96%B0%E5%BB%BA%E6%96%87%E4%BB%B6%E5%A4%B9%20(2)/web%E8%AF%BE%E7%A8%8B/web%E8%AF%BE%E7%A8%8B/SSM/mybatis/mybatis-day01/%E7%AC%94%E8%AE%B0/img/%E5%9B%BE%E7%89%8714.png?lastModify=1560319589 6.3 SqlSession会话对象SqlSession 实例在 MyBatis 中是非常强大的一个类。在这里你会看到所有执行语句、提交或回滚事务和获取映射器实例的方法。 执行语句的方法主要有: <T> T selectOne(String statement, Object parameter)
<E> List<E> selectList(String statement, Object parameter)
int insert(String statement, Object parameter)
int update(String statement, Object parameter)
int delete(String statement, Object parameter)
操作事务的方法主要有: void commit()
void rollback()
Mybatis的Dao层实现1.1 传统开发方式1.1.1编写UserDao接口public interface UserDao {
List<User> findAll() throws IOException;
}1.1.2.编写UserDaoImpl实现public class UserDaoImpl implements UserDao {
public List<User> findAll() throws IOException {
InputStream resourceAsStream =
Resources.getResourceAsStream("SqlMapConfig.xml");
SqlSessionFactory sqlSessionFactory = new
SqlSessionFactoryBuilder().build(resourceAsStream);
SqlSession sqlSession = sqlSessionFactory.openSession();
List<User> userList = sqlSession.selectList("userMapper.findAll");
sqlSession.close();
return userList;
}
}1.1.3 测试传统方式@Test
public void testTraditionDao() throws IOException {
UserDao userDao = new UserDaoImpl();
List<User> all = userDao.findAll();
System.out.println(all);
}
1.2 代理开发方式1.2.1 代理开发方式介绍采用 Mybatis 的代理开发方式实现 DAO 层的开发,这种方式是我们后面进入企业的主流。 Mapper 接口开发方法只需要程序员编写Mapper 接口(相当于Dao 接口),由Mybatis 框架根据接口定义创建接口的动态代理对象,代理对象的方法体同上边Dao接口实现类方法。 Mapper 接口开发需要遵循以下规范: 1) Mapper.xml文件中的namespace与mapper接口的全限定名相同 2) Mapper接口方法名和Mapper.xml中定义的每个statement的id相同 3) Mapper接口方法的输入参数类型和mapper.xml中定义的每个sql的parameterType的类型相同 4) Mapper接口方法的输出参数类型和mapper.xml中定义的每个sql的resultType的类型相同
1.2.2 编写UserMapper接口file://D:/JAVA/%E6%96%B0%E5%BB%BA%E6%96%87%E4%BB%B6%E5%A4%B9%20(2)/web%E8%AF%BE%E7%A8%8B/web%E8%AF%BE%E7%A8%8B/SSM/mybatis/mybatis-day02/%E7%AC%94%E8%AE%B0/img/%E5%9B%BE1.png?lastModify=1560319717 1.2.3测试代理方式@Test
public void testProxyDao() throws IOException {
InputStream resourceAsStream = Resources.getResourceAsStream("SqlMapConfig.xml");
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(resourceAsStream);
SqlSession sqlSession = sqlSessionFactory.openSession();
//获得MyBatis框架生成的UserMapper接口的实现类
UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
User user = userMapper.findById(1);
System.out.println(user);
sqlSession.close();
}1.3 知识小结MyBatis的Dao层实现的两种方式: 手动对Dao进行实现:传统开发方式 代理方式对Dao进行实现: **UserMapper userMapper = sqlSession.getMapper(UserMapper.class);**2.MyBatis映射文件深入2.1 动态sql语句2.1.1动态sql语句概述Mybatis 的映射文件中,前面我们的 SQL 都是比较简单的,有些时候业务逻辑复杂时,我们的 SQL是动态变化的,此时在前面的学习中我们的 SQL 就不能满足要求了。 参考的官方文档,描述如下: file://D:/JAVA/%E6%96%B0%E5%BB%BA%E6%96%87%E4%BB%B6%E5%A4%B9%20(2)/web%E8%AF%BE%E7%A8%8B/web%E8%AF%BE%E7%A8%8B/SSM/mybatis/mybatis-day02/%E7%AC%94%E8%AE%B0/img/%E5%9B%BE%E7%89%872.png?lastModify=1560319717 2.1.2动态 SQL 之<if> 我们根据实体类的不同取值,使用不同的 SQL语句来进行查询。比如在 id如果不为空时可以根据id查询,如果username 不同空时还要加入用户名作为条件。这种情况在我们的多条件组合查询中经常会碰到。 <select id="findByCondition" parameterType="user" resultType="user">
select * from User
<where>
<if test="id!=0">
and id=#{id}
</if>
<if test="username!=null">
and username=#{username}
</if>
</where>
</select>
当查询条件id和username都存在时,控制台打印的sql语句如下: … … …
//获得MyBatis框架生成的UserMapper接口的实现类
UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
User condition = new User();
condition.setId(1);
condition.setUsername("lucy");
User user = userMapper.findByCondition(condition);
… … …file://D:/JAVA/%E6%96%B0%E5%BB%BA%E6%96%87%E4%BB%B6%E5%A4%B9%20(2)/web%E8%AF%BE%E7%A8%8B/web%E8%AF%BE%E7%A8%8B/SSM/mybatis/mybatis-day02/%E7%AC%94%E8%AE%B0/img/%E5%9B%BE%E7%89%873.png?lastModify=1560319717
当查询条件只有id存在时,控制台打印的sql语句如下: … … …
//获得MyBatis框架生成的UserMapper接口的实现类
UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
User condition = new User();
condition.setId(1);
User user = userMapper.findByCondition(condition);
… … …
file://D:/JAVA/%E6%96%B0%E5%BB%BA%E6%96%87%E4%BB%B6%E5%A4%B9%20(2)/web%E8%AF%BE%E7%A8%8B/web%E8%AF%BE%E7%A8%8B/SSM/mybatis/mybatis-day02/%E7%AC%94%E8%AE%B0/img/%E5%9B%BE%E7%89%874.png?lastModify=1560319717
2.1.3 动态 SQL 之<foreach> 循环执行sql的拼接操作,例如:SELECT * FROM USER WHERE id IN (1,2,5)。 <select id="findByIds" parameterType="list" resultType="user">
select * from User
<where>
<foreach collection="array" open="id in(" close=")" item="id" separator=",">
#{id}
</foreach>
</where>
</select>测试代码片段如下: … … …
//获得MyBatis框架生成的UserMapper接口的实现类
UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
int[] ids = new int[]{2,5};
List<User> userList = userMapper.findByIds(ids);
System.out.println(userList);
… … …
file://D:/JAVA/%E6%96%B0%E5%BB%BA%E6%96%87%E4%BB%B6%E5%A4%B9%20(2)/web%E8%AF%BE%E7%A8%8B/web%E8%AF%BE%E7%A8%8B/SSM/mybatis/mybatis-day02/%E7%AC%94%E8%AE%B0/img/%E5%9B%BE%E7%89%875.png?lastModify=1560319717 foreach标签的属性含义如下: <foreach>标签用于遍历集合,它的属性: •collection:代表要遍历的集合元素,注意编写时不要写#{} •open:代表语句的开始部分 •close:代表结束部分 •item:代表遍历集合的每个元素,生成的变量名 •sperator:代表分隔符 2.2 SQL片段抽取Sql 中可将重复的 sql 提取出来,使用时用 include 引用即可,最终达到 sql 重用的目的 <!--抽取sql片段简化编写-->
<sql id="selectUser" select * from User</sql>
<select id="findById" parameterType="int" resultType="user">
<include refid="selectUser"></include> where id=#{id}
</select>
<select id="findByIds" parameterType="list" resultType="user">
<include refid="selectUser"></include>
<where>
<foreach collection="array" open="id in(" close=")" item="id" separator=",">
#{id}
</foreach>
</where>
</select>2.3 知识小结MyBatis映射文件配置: :查询
<insert>:插入 <update>:修改 <delete>:删除 <where>:where条件 <if>:if判断 <foreach>:循环 <sql>:sql片段抽取
3. MyBatis核心配置文件深入3.1typeHandlers标签无论是 MyBatis 在预处理语句(PreparedStatement)中设置一个参数时,还是从结果集中取出一个值时, 都会用类型处理器将获取的值以合适的方式转换成 Java 类型。下表描述了一些默认的类型处理器(截取部分)。 file://D:/JAVA/%E6%96%B0%E5%BB%BA%E6%96%87%E4%BB%B6%E5%A4%B9%20(2)/web%E8%AF%BE%E7%A8%8B/web%E8%AF%BE%E7%A8%8B/SSM/mybatis/mybatis-day02/%E7%AC%94%E8%AE%B0/img/%E5%9B%BE%E7%89%876.png?lastModify=1560319717 你可以重写类型处理器或创建你自己的类型处理器来处理不支持的或非标准的类型。具体做法为:实现 org.apache.ibatis.type.TypeHandler 接口, 或继承一个很便利的类 org.apache.ibatis.type.BaseTypeHandler, 然后可以选择性地将它映射到一个JDBC类型。例如需求:一个Java中的Date数据类型,我想将之存到数据库的时候存成一个1970年至今的毫秒数,取出来时转换成java的Date,即java的Date与数据库的varchar毫秒值之间转换。 开发步骤: ①定义转换类继承类BaseTypeHandler<T> ②覆盖4个未实现的方法,其中setNonNullParameter为java程序设置数据到数据库的回调方法,getNullableResult为查询时 mysql的字符串类型转换成 java的Type类型的方法 ③在MyBatis核心配置文件中进行注册 测试转换是否正确 public class MyDateTypeHandler extends BaseTypeHandler<Date> {
public void setNonNullParameter(PreparedStatement preparedStatement, int i, Date date, JdbcType type) {
preparedStatement.setString(i,date.getTime()+"");
}
public Date getNullableResult(ResultSet resultSet, String s) throws SQLException {
return new Date(resultSet.getLong(s));
}
public Date getNullableResult(ResultSet resultSet, int i) throws SQLException {
return new Date(resultSet.getLong(i));
}
public Date getNullableResult(CallableStatement callableStatement, int i) throws SQLException {
return callableStatement.getDate(i);
}
}
<!--注册类型自定义转换器-->
<typeHandlers>
<typeHandler handler="com.itheima.typeHandlers.MyDateTypeHandler"></typeHandler>
</typeHandlers>测试添加操作: user.setBirthday(new Date());
userMapper.add2(user);数据库数据: file://D:/JAVA/%E6%96%B0%E5%BB%BA%E6%96%87%E4%BB%B6%E5%A4%B9%20(2)/web%E8%AF%BE%E7%A8%8B/web%E8%AF%BE%E7%A8%8B/SSM/mybatis/mybatis-day02/%E7%AC%94%E8%AE%B0/img/%E5%9B%BE%E7%89%877.png?lastModify=1560319717 测试查询操作: file://D:/JAVA/%E6%96%B0%E5%BB%BA%E6%96%87%E4%BB%B6%E5%A4%B9%20(2)/web%E8%AF%BE%E7%A8%8B/web%E8%AF%BE%E7%A8%8B/SSM/mybatis/mybatis-day02/%E7%AC%94%E8%AE%B0/img/%E5%9B%BE%E7%89%878.png?lastModify=1560319717 3.2 plugins标签MyBatis可以使用第三方的插件来对功能进行扩展,分页助手PageHelper是将分页的复杂操作进行封装,使用简单的方式即可获得分页的相关数据 开发步骤: ①导入通用PageHelper的坐标 ②在mybatis核心配置文件中配置PageHelper插件 ③测试分页数据获取
①导入通用PageHelper坐标<!-- 分页助手 -->
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper</artifactId>
<version>3.7.5</version>
</dependency>
<dependency>
<groupId>com.github.jsqlparser</groupId>
<artifactId>jsqlparser</artifactId>
<version>0.9.1</version>
</dependency>
②在mybatis核心配置文件中配置PageHelper插件<!-- 注意:分页助手的插件 配置在通用馆mapper之前 -->
<plugin interceptor="com.github.pagehelper.PageHelper">
<!-- 指定方言 -->
<property name="dialect" value="mysql"/>
</plugin>③测试分页代码实现@Test
public void testPageHelper(){
//设置分页参数
PageHelper.startPage(1,2);
List<User> select = userMapper2.select(null);
for(User user : select){
System.out.println(user);
}
}获得分页相关的其他参数 //其他分页的数据
PageInfo<User> pageInfo = new PageInfo<User>(select);
System.out.println("总条数:"+pageInfo.getTotal());
System.out.println("总页数:"+pageInfo.getPages());
System.out.println("当前页:"+pageInfo.getPageNum());
System.out.println("每页显示长度:"+pageInfo.getPageSize());
System.out.println("是否第一页:"+pageInfo.isIsFirstPage());
System.out.println("是否最后一页:"+pageInfo.isIsLastPage());
3.3 知识小结MyBatis核心配置文件常用标签: 1、properties标签:该标签可以加载外部的properties文件 2、typeAliases标签:设置类型别名 3、environments标签:数据源环境配置标签 4、typeHandlers标签:配置自定义类型处理器 5、plugins标签:配置MyBatis的插件 "
|