tk.mybatis的使用说明

tk.mybatis的使用用法说明依赖<dependency> <groupId>tk.mybatis</groupId> <artifactId>mapper-spring-boot-starter</artifactId> <version>2.0.0</version></dependency>或 <dependency> <groupId>javax.persistence</groupId> <artifactId>persistence-api</artifactId> <version>1.0</version> </dependency> <dependency> <groupId>tk.mybatis</groupId> <artifactId>mapper</artifactId> <version>3.4.2</version> </dependency>前者包含了mybatis一些依赖,若ssm项目搭建好了,用后者就行。实体类与Mapper改造若属性与数据库字段对应不上需要用@Column注解对于,表名不一样同理用@Table,一样的无需添加,主键上需加@Id注解。@Data@Table(name = "t_order")public class Order { /** * CREATE TABLE orders( order_id INT PRIMARY KEY AUTO_INCREMENT, order_no VARCHAR(20), price FLOAT ); */ //Order实体类中属性名和orders表中的字段名是不一样的 @GeneratedValue(generator = "JDBC") // 自增的主键映射 @Id @Column(name = "order_id") private int id; //id===>order_id @Column(name = "order_no") private String orderNo; //若跟数据库字段一致可不写注解 private Double price; }Mapper接口需继承tk的Mapper<T>import ssm.entity.Person;import tk.mybatis.mapper.common.Mapper;public interface PersonMapper extends Mapper<Person> {}xml可以内容为空,但最好加上结果集设置好与数据库字段对应关系(如果实体类属性与数据库字段不一致的话)<?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="ssm.dao.PersonMapper"> <resultMap id="BaseResultMap" type="ssm.entity.Person"> <id column="id" jdbcType="INTEGER" property="id" /> <result column="name" jdbcType="VARCHAR" property="name" /> <result column="description" jdbcType="VARCHAR" property="description" /> <result column="creater" jdbcType="VARCHAR" property="creater" /> <result column="create_time" jdbcType="DATE" property="createTime" /> <result column="updater" jdbcType="VARCHAR" property="updater" /> <result column="update_time" jdbcType="DATE" property="updateTime" /> </resultMap></mapper>报错解决报错:java.lang.NoSuchMethodException: tk.mybatis.mapper.provider.base.BaseSelectProvider怎么办?这种情况是MapperScan包的问题,mybatis与tk.mybatis都有这个,在此我们导包请导tk的这个包。对于SpringBoot项目在Appliction启动类上使用MapperScan注解的,更改导包路径为。import tk.mybatis.spring.annotation.MapperScan;对于传统SSM项目,将mybatis的扫描配置器改成tk的即可 <!-- DAO接口所在包名,Spring会自动查找其下的类 ,自动扫描了所有的XxxxMapper.xml对应的mapper接口文件,只要Mapper接口类和Mapper映射文件对应起来就可以了 --><!-- <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">--> <bean class="tk.mybatis.spring.mapper.MapperScannerConfigurer"> <property name="basePackage" value="ssm.dao" /> <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"></property> </bean>

PageHelper简单使用说明

Mybatis分页插件 - PageHelperPageHelper是一款最方便使用的分页插件之一。支持各种数据库实现物理分页。开源地址:https://github.com/pagehelper/Mybatis-PageHelper开源中国主页:https://www.oschina.net/p/mybatis_pagehelper依赖<dependency> <groupId>com.github.pagehelper</groupId> <artifactId>pagehelper</artifactId> <version>5.1.2</version></dependency>xml中配置在sqlSessionFactory中加入pageHelper插件的配置<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> <property name="dataSource" ref="dataSource" /> <!-- 传入PageHelper的插件 --> <property name="plugins"> <array> <!-- 传入插件的对象 --> <bean class="com.github.pagehelper.PageInterceptor"> <property name="properties"> <props> <prop key="helperDialect">mysql</prop> <prop key="reasonable">true</prop> </props> </property> </bean> </array> </property> <!-- 自动扫描mapping.xml文件 --> <property name="mapperLocations" value="classpath*:ssm/mapper/*.xml"></property></bean>SpringBoot中配置依赖<dependency> <groupId>com.github.pagehelper</groupId> <artifactId>pagehelper-spring-boot-starter</artifactId> <version>1.2.10</version></dependency>配置pagehelper: # dialect: ① # 分页插件会自动检测当前的数据库链接,自动选择合适的分页方式(可以不设置) helper-dialect: mysql # 上面数据库设置后,下面的设置为true不会改变上面的结果(默认为true) auto-dialect: true page-size-zero: false # ② reasonable: true # ③ # 默认值为 false,该参数对使用 RowBounds 作为分页参数时有效。(一般用不着) offset-as-page-num: false # 默认值为 false,RowBounds是否进行count查询(一般用不着) row-bounds-with-count: false #params: ④ #support-methods-arguments: 和params配合使用,具体可以看下面的讲解 # 默认值为 false。设置为 true 时,允许在运行时根据多数据源自动识别对应方言的分页 auto-runtime-dialect: false # ⑤ # 与auto-runtime-dialect配合使用 close-conn: true # 用于控制默认不带 count 查询的方法中,是否执行 count 查询,这里设置为true后,total会为-1 default-count: false #dialect-alias: ⑥代码中使用PageHelper.startPage(page, pageSize);//这里使用 PageHelper.offsetPage(page, pageSize);亦可PageInfo pageInfo = new PageInfo<>(testMapper.findAll(Test));返回的PageInfo中可获取总条数及当且页数据pageInfo.getTotal() //总条数pageInfo.getList() //页面数据或使用Page强转亦可Page page=(Page)testMapper.findAll(Test);page.getTotal();//总条数page.getResult();//页面数据从以下源码可以看出来startPage可选参数更加丰富 /** * 开始分页 * * @param pageNum 页码 * @param pageSize 每页显示数量 * @param count 是否进行count查询 * @param reasonable 分页合理化,null时用默认配置 * @param pageSizeZero true且pageSize=0时返回全部结果,false时分页,null时用默认配置 */ public static <E> Page<E> startPage(int pageNum, int pageSize, boolean count, Boolean reasonable, Boolean pageSizeZero) { Page<E> page = new Page<E>(pageNum, pageSize, count); page.setReasonable(reasonable); page.setPageSizeZero(pageSizeZero); //当已经执行过orderBy的时候 Page<E> oldPage = getLocalPage(); if (oldPage != null && oldPage.isOrderByOnly()) { page.setOrderBy(oldPage.getOrderBy()); } setLocalPage(page); return page; } /** * 开始分页 * * @param offset 页码 * @param limit 每页显示数量 * @param count 是否进行count查询 */ public static <E> Page<E> offsetPage(int offset, int limit, boolean count) { Page<E> page = new Page<E>(new int[]{offset, limit}, count); //当已经执行过orderBy的时候 Page<E> oldPage = getLocalPage(); if (oldPage != null && oldPage.isOrderByOnly()) { page.setOrderBy(oldPage.getOrderBy()); } setLocalPage(page); return page; }分页插件可选参数如下:dialect:默认情况下会使用 PageHelper 方式进行分页,如果想要实现自己的分页逻辑,可以实现 Dialect(com.github.pagehelper.Dialect) 接口,然后配置该属性为实现类的全限定名称。下面几个参数都是针对默认 dialect 情况下的参数。使用自定义 dialect 实现时,下面的参数没有任何作用。helperDialect:分页插件会自动检测当前的数据库链接,自动选择合适的分页方式。 你可以配置helperDialect属性来指定分页插件使用哪种方言。配置时,可以使用下面的缩写值:oracle,mysql,mariadb,sqlite,hsqldb,postgresql,db2,sqlserver,informix,h2,sqlserver2012,derby特别注意:使用 SqlServer2012 数据库时,需要手动指定为 sqlserver2012,否则会使用 SqlServer2005 的方式进行分页。你也可以实现 AbstractHelperDialect,然后配置该属性为实现类的全限定名称即可使用自定义的实现方法。offsetAsPageNum:默认值为 false,该参数对使用 RowBounds 作为分页参数时有效。 当该参数设置为 true 时,会将 RowBounds 中的 offset 参数当成 pageNum 使用,可以用页码和页面大小两个参数进行分页。rowBoundsWithCount:默认值为false,该参数对使用 RowBounds 作为分页参数时有效。 当该参数设置为true时,使用 RowBounds 分页会进行 count 查询。pageSizeZero:默认值为 false,当该参数设置为 true 时,如果 pageSize=0 或者 RowBounds.limit = 0 就会查询出全部的结果(相当于没有执行分页查询,但是返回结果仍然是 Page 类型)。reasonable:分页合理化参数,默认值为false。当该参数设置为 true 时,pageNum<=0 时会查询第一页, pageNum>pages(超过总数时),会查询最后一页。默认false 时,直接根据参数进行查询。params:为了支持startPage(Object params)方法,增加了该参数来配置参数映射,用于从对象中根据属性名取值, 可以配置 pageNum,pageSize,count,pageSizeZero,reasonable,不配置映射的用默认值, 默认值为pageNum=pageNum;pageSize=pageSize;count=countSql;reasonable=reasonable;pageSizeZero=pageSizeZero。supportMethodsArguments:支持通过 Mapper 接口参数来传递分页参数,默认值false,分页插件会从查询方法的参数值中,自动根据上面 params 配置的字段中取值,查找到合适的值时就会自动分页。 使用方法可以参考测试代码中的 com.github.pagehelper.test.basic 包下的 ArgumentsMapTest 和 ArgumentsObjTest。autoRuntimeDialect:默认值为 false。设置为 true 时,允许在运行时根据多数据源自动识别对应方言的分页 (不支持自动选择sqlserver2012,只能使用sqlserver),用法和注意事项参考下面的场景五。closeConn:默认值为 true。当使用运行时动态数据源或没有设置 helperDialect 属性自动获取数据库类型时,会自动获取一个数据库连接, 通过该属性来设置是否关闭获取的这个连接,默认true关闭,设置为 false 后,不会关闭获取的连接,这个参数的设置要根据自己选择的数据源来决定。重要提示:当 offsetAsPageNum=false 的时候,由于 PageNum 问题,RowBounds查询的时候 reasonable 会强制为 false。使用 PageHelper.startPage 方法不受影响。其他说明可参考:https://blog.csdn.net/qq_38375620/article/details/79467545