首页>代码>JFinal-layui极速开发企业应用系统-专业版>/Jfinal-layui/src/main/java/com/qinhailin/common/base/service/DbService.java
/**
 * Copyright 2019-2021 覃海林(qinhaisenlin@163.com).
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */ 
package com.qinhailin.common.base.service;

import java.util.List;

import com.jfinal.kit.Kv;
import com.jfinal.plugin.activerecord.Db;
import com.jfinal.plugin.activerecord.DbPro;
import com.jfinal.plugin.activerecord.Page;
import com.jfinal.plugin.activerecord.Record;
import com.jfinal.plugin.activerecord.SqlPara;
import com.qinhailin.common.kit.SqlKit;
import com.qinhailin.common.vo.Grid;


/**
 * 没有model类的service接口
 * @author QinHaiLin
 * @date 2019年3月13日  
 */
public abstract class DbService {
	
	
	/**
	 * 指定表
	 * @return
	 * @author QinHaiLin
	 * @date 2019年3月14日
	 */
	public abstract String getTable();
	
	/**
	 * 指定主键
	 * @return
	 * @author QinHaiLin
	 * @date 2019年3月14日
	 */
	public abstract String getPrimaryKey();
	
	/**
	 * 指定数据源<br/>
	 * @return configName 若return null,则使用主数据源
	 * @author QinHaiLin
	 * @date 2019年3月13日
	 */
	public String getDb(){
		return null;
	};
	
	/**
	 * 获取DBPro数据源
	 * @return
	 */
	private DbPro getDbPro(){
		if(getDb()!=null){
			return Db.use(getDb());
		}
		return Db.use();
	}
	
	public List<Record> findAll(){
		SqlPara sp = Db.getSqlPara("crud.find", Kv.by("tableName",getTable()).set("cond", new Kv()));
		return getDbPro().find(sp);		
	}
	
	/**
	 * 无条件查询
	 * @param tableName
	 * @author QinHaiLin
	 * @date 2019年3月13日
	 */
	public List<Record> find(String tableName){
		SqlPara sp = Db.getSqlPara("crud.find", Kv.by("tableName",tableName).set("cond", new Kv()));
		return getDbPro().find(sp);		
	}
	
	
	/**
	 * 条件查询
	 * @param tableName 表名
	 * @param column 字段集合
	 * @author QinHaiLin
	 * @date 2019年3月13日
	 */
	public List<Record> find(String tableName,Kv columns){
		SqlPara sp = Db.getSqlPara("crud.find", Kv.by("tableName",tableName).set("cond", getKv(columns)));
		return getDbPro().find(sp);
	}
	
	public List<Record> find(Kv columns){
		SqlPara sp = Db.getSqlPara("crud.find", Kv.by("tableName",getTable()).set("cond", getKv(columns)));
		return getDbPro().find(sp);
	}
	
	public List<Record> find(String tableName,Kv columns,String groupOrderBySql){
		SqlPara sp = Db.getSqlPara("crud.find", Kv.by("tableName",tableName).set("cond", getKv(columns)).set("groupOrder",groupOrderBySql));
		return getDbPro().find(sp);
	}
	
	public List<Record> find(Kv columns,String groupOrderBySql){
		SqlPara sp = Db.getSqlPara("crud.find", Kv.by("tableName",getTable()).set("cond", getKv(columns)).set("groupOrder",groupOrderBySql));
		return getDbPro().find(sp);
	}
	
	public List<Record> find(String sql,Object... paras){
		return getDbPro().find(sql,paras);
	}
	
	public Record findById(String id) {
		String sql="select * from "+getTable() +" where "+getPrimaryKey()+"=?";
		List<Record> list=getDbPro().find(sql,id);
		if(list.size()>0){
			return list.get(0);
		}
		return null;
	}
	
	public Record findPk(String pk,Object value) {
		String sql="select * from "+getTable() +" where "+pk+"=?";
		List<Record> list=getDbPro().find(sql,value);
		if(list.size()>0){
			return list.get(0);
		}
		return null;
	}
	
	/**
	 * 根据某字段查询是否存在数据
	 * @param key
	 * @param paras
	 * @return
	 */
	public boolean isExit(String key,Object paras){
		String sql="select * from "+getTable() +" where "+key+"=?";
		List<Record> list=getDbPro().find(sql, paras);
		if(list.size()>0){
			return true;
		}
		
		return false;
	}
	
	/**
	 * 分页条件查询
	 * @param pageNumber
	 * @param pageSize
	 * @param tableName
	 * @param columns
	 * @author QinHaiLin
	 * @date 2019年3月13日
	 */
	public Grid page(int pageNumber,int pageSize,String tableName,Kv columns){
		SqlPara sp = Db.getSqlPara("crud.find", Kv.by("tableName",tableName).set("cond", getKv(columns)));	
		return getGrid(getDbPro().paginate(pageNumber, pageSize, sp));
	}
	
	public Grid page(int pageNumber,int pageSize,Kv columns){
		SqlPara sp = Db.getSqlPara("crud.find", Kv.by("tableName",getTable()).set("cond", getKv(columns)));	
		return getGrid(getDbPro().paginate(pageNumber, pageSize, sp));
	}
			
	/**
	 * 分页查询,分组、排序
	 * @param pageNumber
	 * @param pageSize
	 * @param tableName
	 * @param columns
	 * @param groupOrderBySql
	 * @author QinHaiLin
	 * @date 2019年3月13日
	 */
	public Grid page(int pageNumber,int pageSize,String tableName,Kv columns,String groupOrderBySql){	
		SqlPara sp = Db.getSqlPara("crud.find", Kv.by("tableName",tableName).set("cond", getKv(columns)).set("groupOrder",groupOrderBySql));
		return getGrid(getDbPro().paginate(pageNumber, pageSize, sp));
	}
	
	public Grid page(int pageNumber,int pageSize,Kv columns,String groupOrderBySql){	
		SqlPara sp = Db.getSqlPara("crud.find", Kv.by("tableName",getTable()).set("cond", getKv(columns)).set("groupOrder",groupOrderBySql));
		return getGrid(getDbPro().paginate(pageNumber, pageSize, sp));
	}
	
	public Grid page(int pageNumber,int pageSize,String select,String sqlExceptSelect){
		return getGrid(getDbPro().paginate(pageNumber, pageSize, select, sqlExceptSelect));
	}
	
	public Grid page(int pageNumber,int pageSize,String select,String sqlExceptSelect,Object... paras){
		return getGrid(getDbPro().paginate(pageNumber, pageSize, select, sqlExceptSelect,paras));
	}
	
	
	
	/**
	 * Save record with default primary key. 
	 * 
	 * <pre>
	 * Example:
	 * Record record = new Record().set("id", 123).set("name", 456);
	 * Db.use().save("user_role", userRole);
	 * </pre>
	 * 
	 * @param tableName
	 * @param record
	 * @author QinHaiLin
	 * @date 2019年3月13日
	 */
	public boolean save(String tableName,Record record) {
		return getDbPro().save(tableName, record);
	}
	public boolean save(Record record) {
		return getDbPro().save(getTable(), record);
	}
	
	/**
	 * Save record.
	 * <pre>
	 * Example:
	 * Record userRole = new Record().set("user_id", 123).set("role_id", 456);
	 * Db.use().save("user_role", "user_id, role_id", userRole);
	 * </pre>
	 * @param tableName the table name of the table
	 * @param primaryKey the primary key of the table, composite primary key is separated by comma character: ","
	 * @param record the record will be saved
	 * @param true if save succeed otherwise false
	 * @author QinHaiLin
	 * @date 2019年3月13日
	 */
	public boolean save(String tableName,String primaryKey,Record record) {
		return getDbPro().save(tableName,primaryKey, record);
	}
	
	/**
	 * Update record with default primary key. 
	 * 
	 * @param tableName
	 * @param record
	 * @return
	 * @author QinHaiLin
	 * @date 2019年3月13日
	 */
	public boolean update(String tableName,Record record) {
		return getDbPro().update(tableName, record);
	}
	
	public boolean update(Record record) {
		return getDbPro().update(getTable(), record);
	}
	
	public int update(Kv data,Kv whereData){
		Kv templateData=Kv.by("tableName",getTable()).set("cond", data).set("whereCond", getKv(data));	
		return getDbPro().update(Db.getSqlPara("crud.update", templateData));
	}
	
	/**
	 * Update Record.
	 * <pre>
	 * Example:
	 * Db.use().update("user_role", "user_id, role_id", record);
	 * </pre>
	 * @param tableName the table name of the Record save to
	 * @param primaryKey the primary key of the table, composite primary key is separated by comma character: ","
	 * @param record the Record object
	 * @param true if update succeed otherwise false
	 * @author QinHaiLin
	 * @date 2019年3月13日
	 */
	public boolean update(String tableName,String primaryKey,Record record) {
		return getDbPro().update(tableName,primaryKey, record);
	}
	
	public int update(String sql) {
		return getDbPro().update(sql);
	}
	
	public int update(String sql,Object... paras) {
		return getDbPro().update(sql,paras);
	}
		
	/**
	 * Delete Record by primary key
	 * @param tableName
	 * @param primaryKey
	 * @param list
	 * @return
	 * @author QinHaiLin
	 * @date 2019年3月13日
	 */
	public boolean deleteByIds(String tableName,String primaryKey,List<String> list) {
		String sql="delete from "+tableName+" where "+primaryKey+" in "+SqlKit.joinIds(list);
		return getDbPro().delete(sql)>0;
	}
	
	/**
	 * Delete Record width  primary key id
	 * @param tableName
	 * @param list
	 * @return
	 * @author QinHaiLin
	 * @date 2019年3月13日
	 */
	public boolean deleteByIds(String tableName,List<String> list) {
		String sql="delete from "+tableName+" where id in "+SqlKit.joinIds(list);
		return getDbPro().delete(sql)>0;
	}
	
	public boolean deleteByIds(List<String> list){
		String sql="delete from "+getTable()+" where id in "+SqlKit.joinIds(list);
		return getDbPro().delete(sql)>0;
	}
	
	public boolean deleteByIds(List<String> list,String primaryKey){
		String sql="delete from "+getTable()+" where "+primaryKey+" in "+SqlKit.joinIds(list);
		return getDbPro().delete(sql)>0;
	}
	
	public int delete(Kv data){
		Kv templateData=Kv.by("tableName",getTable()).set("cond", data);	
		return getDbPro().update(Db.getSqlPara("crud.delete", templateData));
	}
	
	/**
	 * 封装layui分页参数
	 * @param page
	 * @return
	 * @author QinHaiLin
	 * @date 2019年3月13日
	 */
	private Grid getGrid(Page<Record> page) {
		return new Grid(page.getList(),page.getPageNumber(),page.getPageSize(),page.getTotalRow());
	}
	
	/**
	 * 过滤查询条件
	 * @param columns
	 * @return
	 * @author QinHaiLin
	 * @date 2019年3月13日
	 */
	private Kv getKv(Kv columns) {
		Kv kv=new Kv();
		for(Object key:columns.keySet()) {
			if(columns.get(key)!=null&&!columns.get(key).equals("")) {
				 if(key.toString().toLowerCase().endsWith("like")) {
					 kv.set(key,"%"+columns.get(key)+"%");
					 continue;
				 }
				 kv.set(key,columns.get(key));
			}
		}
		return kv;
	}
	
}
最近下载更多
z875152686  LV8 2023年11月2日
2602275348  LV12 2022年4月8日
zcl02036716  LV17 2022年2月28日
微量的记忆  LV10 2022年2月11日
最代码官方  LV168 2021年10月5日
最近浏览更多
Frank_F 7月5日
暂无贡献等级
myfz0662  LV10 5月8日
云破月  LV8 4月12日
akittyboy  LV9 3月31日
z875152686  LV8 2023年11月2日
abc562311934  LV4 2022年10月8日
1986王志飞  LV6 2022年8月12日
bluesky2016  LV15 2022年6月10日
a318888331  LV13 2022年4月11日
2602275348  LV12 2022年3月31日
顶部 客服 微信二维码 底部
>扫描二维码关注最代码为好友扫描二维码关注最代码为好友