package david.mybatis.model/* * 分页参数实体类 */public class PagenateArgs {private int pageIndex private int pageSize private int pageStart private String orderFieldStr private String orderDirectionStr public PagenateArgs() {// TODO Auto-generated constructor stub}public PagenateArgs(int pageIndex, int pageSize, String orderFieldStr, String orderDirectionStr) {this.pageIndex = pageIndex this.pageSize = pageSize this.orderFieldStr = orderFieldStr this.orderDirectionStr = orderDirectionStr pageStart = pageIndex * pageSize }public int getPageIndex() {return pageIndex }public int getPageStart() {return pageStart }public int getPageSize() {return pageSize }public String orderFieldStr() {return orderFieldStr }public String getOrderDirectionStr() {return orderDirectionStr }}
package david.mybatis.model/* * 排序枚举 */public enum SortDirectionEnum {/* * 升序 */ASC,/* * 降序 */DESC}
完成上面的步骤以后在IVisitorOperation接口类中继续添加一个方法public List<Visitor>getListByPagenate(PagenateArgs args),这次的分页其实也就是在这个的基础上稍加改动即可,IVisitorOperation接口类 改动后如下所示:
package david.mybatis.demoimport java.util.Listimport david.mybatis.model.PagenateArgsimport david.mybatis.model.Visitorimport david.mybatis.model.VisitorWithRnpublic interface IVisitorOperation {/* * 基础查询 */public Visitor basicQuery(int id) /* * 添加访问者 */public int add(Visitor visitor) /* * 删除访问者 */public int delete(int id) /* * 更新访问者 */public int update(Visitor visitor) /* * 查询访问者 */public Visitor query(int id) /* * 查询List */public List<Visitor>getList() /* * 分页查询List */public List<Visitor>getListByPagenate(PagenateArgs args) }
接下来改动VisitorMapper.xml配置文件了,新增一个<select>节点id与参数类型参照前几章的方式配置好,如下此处新增的id就为getListByPagenate,配置好以后如下
<?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="david.mybatis.demo.IVisitorOperation"> <!-- useGeneratedKeys="true"代表是否使用自增长序列, keyProperty="Id"指定自增长列是哪一列, parameterType="Visitor"指定IVisitorOperation接口类中定义中所传的相应类型 --> <insert id="add" parameterType="Visitor" useGeneratedKeys="true"keyProperty="Id"> insert into Visitor (Name, Email, Status, CreateTime)values (#{name}, #{email}, #{status}, #{createTime})</insert> <delete id="delete" parameterType="int"> delete from Visitor wherestatus>0 and id = #{id}</delete> <update id="update" parameterType="Visitor"> update Visitor set Name =#{name}, Email=#{email}, Status=#{status} where id=#{id} and Status>0 </update> <select id="query" parameterType="int" resultType="Visitor"> select Id,Name, Email, Status, CreateTime from visitor where id=#{id} andStatus>0 order by Id</select> <select id="basicQuery" parameterType="int" resultType="Visitor"> select *from visitor where id=#{id} andStatus>0 order by Id</select> <select id="getList" resultMap="visitorRs"> <include refid="getListSql" /> </select> <sql id="getListSql"> select * from Visitor wherestatus>0</sql> <!-- 以下为新增部分用来分页,orderBySql这个提取出来是为了后面有示例复用 --> <resultMap type="Visitor" id="visitorRs"> <id column="Id" property="id" /> <result column="Name" property="name" /> <result column="Email" property="email" /> <result column="Status" property="status" /> <result column="CreateTime" property="createTime" /> </resultMap> <select id="getListByPagenate" parameterType="PagenateArgs"resultType="Visitor"> select * from (<include refid="getListSql" /><include refid="orderBySql"/> ) t <!-- #{}表示参数化输出,${}表示直接输出不进行任何转义 *** 作,自己进行转移 --> <if test="pageStart>-1 and pageSize>-1"> limit #{pageStart}, #{pageSize}</if> </select> <sql id="orderBySql"> order by ${orderFieldStr} ${orderDirectionStr}</sql></mapper>
这里面的字段属性都是针对PagenateArgs参数类中的属性名,保持一致。
<if test="pageStart>-1 and pageSize>-1"> limit #{pageStart}, #{pageSize}</if>
在DemoRun类中创建测试方法:
/* * 分页参数 */public static void queryVisitorListWithPagenate(int pageIndex, int pageSize, String orderField, String orderDire) {PagenateArgs args = new PagenateArgs(pageIndex, pageSize, orderField, orderDire) SqlSession session = MybatisUtils.getSqlSession() IVisitorOperation vOperation = session.getMapper(IVisitorOperation.class) List<Visitor>visitors = vOperation.getListByPagenate(args) for (Visitor visitor : visitors) {System.out.println(visitor) }MybatisUtils.closeSession(session) MybatisUtils.showMessages(CRUD_Enum.List, visitors.size())}
DemoRun.queryVisitorListWithPagenate(0, 100, "id", SortDirectionEnum.DESC.toString())
运行后下测试结果,先按Id倒序排列,查的Visitor表一共有14条记录,
假设取在第2页取5条,执行下面也就是6-10条数据,这样传参数就行了
DemoRun.queryVisitorListWithPagenate(1, 5, "id", SortDirectionEnum.DESC.toString())
平常使用可能发现不了问题,在处理大数据的时候,会发现内容被截取了,其实MYSQL内部对这个是有设置的,默认不设置的长度是1024个字符,如果我们需要更大,就需要手工去修改配置。
1、查看当前mysql group_concat_max_len
2、如果不方便重启mysql 可以在mysql状态通过命令设置,如
此种方式在mysql重启后会读取配置文件重新设置,会导致设置失效,所以建议依旧要修改配置文件。
3、修改配置文件:my.ini
在[mysqld]下新增配置:group_concat_max_len = 102400
重启,通过方式1查看即可。
4、不限制大小
有时我们并不知需要多大的字节才能满足需求,此种情况可以考虑不设置最大字节(即采用最大字节数)即在配置文件设置group_concat_max_len=-1
1、导出用的是Hutool导出工具类
mysql查询动态行转动态列,并使用mybatis执行
MySQL 动态 行转列(列值转换列名)
一、简介MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。
二、入门使用
1.使用maven管理依赖
2.在resources下创建application.xml和jdbc.properties
2.1 application.xml
2.2 jdbc.properties
3.建立pojo的包,建立User实体类
4.建立mapper包
4.1建立UserMapper接口
4.2建立UserMapper.xml
5.建立utils包,并建立UpdateDB类
6.测试程序
建立主类
运行测试,如下图
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)