在项目中负责的模块,数据都是从其他两张表格,需要展示到前台和高级条件查询
配置位置:多模块开发 mapper模块 中applicationContext-mapper.xml
分页必配置分页拦截和 mybatis 的包
com.rpms.iteam.domain
com.rpms.iteam.query
***
helperDialect=mysql
***
在不使用mybatis 关联映射 查询的条件下,使用普通的spl 多表关联查询一张中间的临时表 ,这张表命名 commonVo .java, 表示查询出来的数据 ,展示到前台
数据库在通过连接两张或多张表来返回记录时,都会生成一张中间的临时表,然后再将这张临时表返回给用户。
在使用left jion时,on和where条件的区别如下:
1、 on条件是在生成临时表时使用的条件,它不管on中的条件是否为真,都会返回左边表中的记录。
2、where条件是在临时表生成好后,再对临时表进行过滤的条件。这时已经没有left join的含义(必须返回左边表的记录)了,条件不为真的就全部过滤掉。
两个查询方法:一个无条件查询所有的, 一个 带有 拼接 的多条件 查询
在 两张表的 中 任意一个的mapper.xml 下 配置 这 两个查询方法
多条件查询 的数据封装在一个 query中
private String q;//关键字
private int page = 0;//页数
private int rows = 10;//每页的条目数
public String getQ() {
return q;
}
public void setQ(String q) {
this.q = q;
}
public int getPage() {
return page;
}
public void setPage(int page) {
this.page = page;
}
public int getRows() {
return rows;
}
public void setRows(int rows) {
this.rows = rows;
}
private long total; //总条数
private List rows; //这一行的数据
public Pagination(Page page) {
this.total = page.getTotal();
this.rows = page.getResult();
}
public long getTotal() {
return total;
}
public void setTotal(long total) {
this.total = total;
}
public List getRows() {
return rows;
}
public void setRows(List rows) {
this.rows = rows;
}
mapper :
// 基本的分页条件 查所有的数据
pageList selectAll(BaseQuery query);
// 多条件查询 ,返回page 时插件里 分页对象
Page selectByQuery (CommonQuery query);
IserviceImpl :
@Override
public PaginationselectAll(SettedQuery query) {
//配置分页的值
//分页插件工具 (对后面的一个查询方法结果分页) ,把符合条件的先查出来,封装到页面分页数据中 ,最后由selectAll 分页
PageHelper.startPage(query.getPage(),query.getRows());
Page page =commonMapper. selectByQuery(query);
return new pageList(page);
}
只有紧跟在 PageHelper.startPage 方法后的第一个 MyBatis 的查询(select)方法会被分页。
请不要在系统中配置多个分页插件(使用 spring 时,mybatis-config.xml 和 Spring 配置方式,请选择其中一种,不要同时配置多个分页插件)。
对于带有 for update 的 sql,会抛出运行时异常,对于这样的 sql 建议手动分页,毕竟这样的 sql 需要重视。
由于嵌套结果方式会导致结果集被折叠,因此分页查询的结果在折叠后总数会减少,所以无法保证分页结果数量正确。
java.lang.ClassCastException: java.util.ArrayList cannot be cast to com.github.pagehelper.Page
在使用分页插件时,方法使用错误,如果只用一种查询方法,会提示强转成page 类,
其实强转并不起作用,只是解决不报错,运行时就会出上面的问题
解决办法 :用上述方式封装
Connected to server
[2019-04-14 10:15:25,726] Artifact rpms-web:war exploded: Artifact is being deployed, please wait…
14-Apr-2019 10:15:28.148 严重 [RMI TCP Connection(3)-127.0.0.1] org.apache.catalina.core.ContainerBase.addChildInternal ContainerBase.addChild: start:
org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Catalina].StandardHost[localhost].StandardContext[]]
解决:
(1)重新部署项目,可以消除这个错误;
(2)clean一下项目,重新启动服务器