简介
springboot
设计目标就是为了减速开发,缩小xml的配置。如果你不想写配置文件只须要在配置文件增加绝对应的配置就能疾速的启动的程序。
通用mapp
通用mapper只反对对单表的操作,对单表的增删改查,无需在mapper.xml写对应的sql语句,只须要咱们调用相应的接口即可。
pagehelp
pagehelper次要是在对查问的数据进行一个分页查问。
首先在maven我的项目,在pom.xml中引入mapper和pagehelper的依赖
<!-- pagehelp --> <dependency> <groupId>com.github.pagehelper</groupId> <artifactId>pagehelper-spring-boot-starter</artifactId> <version>1.2.3</version> </dependency> <!-- 通用mapper --> <dependency> <groupId>tk.mybatis</groupId> <artifactId>mapper-spring-boot-starter</artifactId> <version>1.0.0</version> </dependency>
新建一个mymapper.java文件,继承mapper接口
public interface MyMapper<T> extends Mapper<T>, MySqlMapper<T>,ConditionMapper<T> { //FIXME 特地留神,该接口不能被扫描到,否则会出错}
这个java文件不能和其它mapper放在一起,免得被扫描到。获取单表数据的操作都间接调用这个办法。
3 在配置文件上增加当前属性字段
#jdbcspring.datasource.url=jdbc:mysql://127.0.0.1:3306/newsspring.datasource.username=数据库用户名spring.datasource.password=数据库明码spring.datasource.driver-class-name=com.mysql.jdbc.Driverspring.freemarker.request-context-attribute=request#mapper mapper.mappers=com.imooc.springboot.mapper.util.MyMappermapper.not-empty=falsemapper.identity=MYSQL#pagehelperpagehelper.helper-dialect = mysqlpagehelper.reasonable = truepagehelper.support-methods-arguments = truepagehelper.params= count= countSql
下面的配置mapper.mappers 是第2步外面文件所在的门路。
4 增加了controller文件之后,由controller外面的办法去调用server外面的办法。尽管是有通用mapper办法,然而每次增加一个server办法之后都要增加对应的mapper办法,这样开发的也显得比拟繁琐,所以咱们须要一个通用server类,用这个类去调用第二步的办法就能够了。
public interface BaseService<T> { /** * 查问所有 * * @return 返回所有数据 */ List<T> findAll(); /** * 增加 * * @param t 实体 * * @return */ int save(T t); /** * 批改 * * @param t * 实体 * @return */ int updateByPrimaryKey(T t); /** * 依据主键删除 * * @param t 主键 * * @return */ int deleteByPrimaryKey(int t); /** * 查问表格列表 * @param t 分页参数 * @return */ TableData<T> getTableData(PageBean pageBean);}
下面只是封装根本增删改查的办法,后续可自行添加办法。
而后增加实现类
public abstract class BaseServiceImpl<T> implements BaseService<T> { @Autowired protected MyMapper<T> mapper; @Override public List<T> findAll() { return mapper.selectAll(); } @Override public int save(T t) { return mapper.insert(t); } @Override public int updateByPrimaryKey(T t) { return mapper.updateByPrimaryKey(t); } @Override public int deleteByPrimaryKey(int t) { return mapper.deleteByPrimaryKey(t); } @Override public TableData<T> getTableData(PageBean bean) { int count = mapper.selectAll().size(); if (count > 0) { PageHelper.startPage((bean.getOffset()/bean.getLimit()) + 1, bean.getLimit()); List<T> list = this.findAll(); return TableData.bulid(count, list); } return TableData.empty(); }}
留神:我用的编辑器是eclipse,如果用idea编辑器,这里可把abstract去掉。
而后增加对应的接口和实现类继承下面的接口和办法就能够了,比方增加一个newsserver 接口和newsserverImpl类
public interface NewsService extends BaseService<SysUser> {}
@Servicepublic class NewsServiceImpl extends BaseServiceImpl<SysUser> implements NewsService{}
5 为了缩小数据库服务器的压力,个别咱们查问数据的时候都会应用pagehelper进行分页查问,为了更加清晰的显示咱们展现的数据,应用bootstrap table展现数据,bootstrap table获取数据有两种途经,一种是客户端模式,即获取全副数据之后,在前端进行分页展现。另外一种,也就是咱们接下来要说的服务端模式:要获取的数据信息,比方获取数据页码,每一页数据的大小,都能够通过前端发送以上的参数向后盾发申请,后盾失去这些参数信息之后返回数据。
6 引入bootstrap table相干的js css文件之后,开始在网上找了一些材料之后发现很多都是要在前端页面增加如下繁琐的配置,
$('#mytable').bootstrapTable({ //申请办法 method: 'get', //是否显示行距离色 striped: true, //是否应用缓存,默认为true,所以个别状况下须要设置一下这个属性(*) cache: false, //是否显示分页(*) pagination: true, //是否启用排序 sortable: false, //排序形式 sortOrder: "desc", //初始化加载第一页,默认第一页 //我设置了这一项,然而貌似没起作用,而且我这默认是0,- - //pageNumber:1, //每页的记录行数(*) pageSize: 10, //可供选择的每页的行数(*) pageList: [10, 25, 50, 100], //这个接口须要解决bootstrap table传递的固定参数,并返回特定格局的json数据 url: "${contextPath}/mapper/getTableData", //默认值为 'limit',传给服务端的参数为:limit, offset, search, sort, order Else //queryParamsType:'', ////查问参数,每次调用是会带上这个参数,可自定义 queryParams: queryParams : function(params) { var subcompany = $('#subcompany option:selected').val(); var name = $('#name').val(); return { pageNumber: params.offset+1, pageSize: params.limit, companyId:subcompany, name:name }; }, //分页形式:client客户端分页,server服务端分页(*) sidePagination: "server", //是否显示搜寻 search: false, //Enable the strict search. strictSearch: true, //Indicate which field is an identity field. idField : "id", columns: [], pagination:true });
每次增加一个页面如果都要增加以上的配置信息也显得繁琐,不过bootstrap-table.js外面有个默认的配置,只须要批改外面的几个配置。
contentType: 'application/json',//post申请头 application/x-www-form-urlencoded; charset=UTF-8' dataType: 'json', sidePagination: 'server', // 改成server
当咱们点击表格分页页码的时候,获取扭转每页显示的页码时候,前端会主动调用queryParams()办法,咱们须要将这些数据传递给后盾,
function queryParams(params) { var query={}; query["limit"] = params.limit;//第几条数据开始 query["offset"] = params.offset;//数据大小 return query; }
6 配合上一步前端的分页,咱们就须要应用pagehelp插件了,同样咱们把这个分页的办法放在通用server类上,
public TableData<T> getTableData(PageBean bean) { int count = mapper.selectAll().size(); if (count > 0) { PageHelper.startPage((bean.getOffset()/bean.getLimit()) + 1, bean.getLimit()); List<T> list = this.findAll(); return TableData.bulid(count, list); } return TableData.empty(); }
下面的pagehelper.startpage须要做一点扭转,前端传过来的是显示第几条数据,然而startpage办法第一个参数是显示第几页的数据,所以做一个转换pageoffset/limit +1,而后在查问数据,须要留神的是,肯定要将startpage办法办法查问数据语句的前一行,不能空行,或者换行。
附录:
github源码
demo展现