项目基于SpringBoot+JFinal
BaseDao代码
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;
import com.jfinal.plugin.activerecord.Db;
import com.jfinal.plugin.activerecord.Model;
import com.jfinal.plugin.activerecord.Page;
import com.jfinal.plugin.activerecord.Record;
import com.jfinal.plugin.activerecord.SqlPara;
import com.jfinal.plugin.activerecord.Table;
import com.jfinal.plugin.activerecord.TableMapping;
public abstract class BaseDao <M extends Model<?>>{
protected M model;
protected List<String> filterColumns;
private void setModelIn() {
model=setModel();
}
private void setFilterColumnsIn() {
filterColumns=setFilterColumns();
}
public abstract M setModel();
public abstract List<String> setFilterColumns();
public boolean insert(M m) {
return m.save();
}
public boolean update(M m) {
return m.update();
}
public boolean del(M m) {
return m.delete();
}
@SuppressWarnings("unchecked")
public M findById(Object id) {
HashMap<String, Object> params=new HashMap<String, Object>();
params.put("id", id);
String sql = getSql(params, null, "limit 1");
SqlPara sqlPara = getSqlPara(sql);
return (M) model.findFirst(sqlPara);
}
public boolean delById(Object id) {
setModelIn();
return model.deleteById(id);
}
@SuppressWarnings("unchecked")
public List<M> select(HashMap<String, Object> params,HashMap<String, Object> orderBy,String sql){
String sql2 = getSql(params, orderBy, sql);
List<M> find = (List<M>) model.find(sql2);
return find;
}
public Page<Map<String,Object>> page(HashMap<String, Object> params,HashMap<String, Object> orderBy,String sql,int pageNumber,int pageSize){
String sql2 = getSql(params, orderBy, sql);
SqlPara sqlPara=new SqlPara();
sqlPara.setSql(sql2);
Page<Record> paginate = Db.paginate(pageNumber, pageSize, sqlPara);
return toMapPage(paginate);
}
private SqlPara getSqlPara(String sql) {
SqlPara sqlPara = new SqlPara();
sqlPara.setSql(sql);
return sqlPara;
}
private String getSql(HashMap<String, Object> params,HashMap<String, Object> orderBy,String sql) {
setModelIn();
StringBuffer s=new StringBuffer();
s.append("select ");
Set<String> columnNameSet = getTable().getColumnNameSet();
String columnNames = columnNameSet.toString().replace("[", "").replace("]", "").replace(" ", "");
setFilterColumnsIn();
if (filterColumns!=null&&filterColumns.size()!=0) {
for (String column : filterColumns) {
if (columnNames.contains(column)) {
columnNames=columnNames.replace(","+column, "");
if (columnNames.contains(column)) {
columnNames=columnNames.replace(column+",", "");
}
if (columnNames.contains(column)) {
columnNames=columnNames.replace(column, "");
}
}
}
}
s.append(columnNames);
s.append(" from ");
s.append(getTable().getName());
s.append(" where 1=1 ");
if (params!=null) {
Set<String> keySet = params.keySet();
for (String key : keySet) {
s.append("and ");
s.append(key);
s.append("=");
s.append(params.get(key));
}
}
if (sql!=null) {
s.append(" ");
s.append(sql);
}
if (orderBy!=null) {
Set<String> keySet = orderBy.keySet();
s.append(" ");
s.append("order by");
s.append(" ");
for (String key : keySet) {
if (orderBy.get(key)!=null) {
s.append(key);
s.append(" ");
s.append(orderBy.get(key));
}
}
}
return s.toString();
}
private Table getTable() {
return TableMapping.me().getTable(model.getClass());
}
@SuppressWarnings({ "unchecked", "rawtypes" })
private Page<Map<String,Object>> toMapPage(Page<Record> recordPage){
List<Map<String,Object>> list = toMapList(recordPage.getList());
Page<Map<String,Object>> result = new Page(
list,
recordPage.getPageNumber(),
recordPage.getPageSize(),
recordPage.getTotalPage(),
recordPage.getTotalRow());
return result;
}
private List<Map<String,Object>> toMapList(List<Record> recordList){
List<Map<String,Object>> result = new ArrayList<Map<String,Object>>();
if(null!=recordList && !recordList.isEmpty()){
for(Record record:recordList){
result.add(record.getColumns());
}
}
return result;
}
}
使用方法
创建dao层 dao代码
import java.util.List;
import org.springframework.stereotype.Repository;
import com.wx.base.BaseDao;
import com.wx.model.Configs;
@Repository
public class ConfigDao extends BaseDao<Configs>{
@Override
public Configs setModel() {
return new Configs();
}
@Override
public List<String> setFilterColumns() {
return null;
}
}
Controller调用
为了方便省略service层
实际开发中不建议省略
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import com.alibaba.fastjson.JSONObject;
import com.wx.dao.ConfigDao;
import com.wx.entity.ResultBean;
import com.wx.model.Configs;
@RequestMapping("config")
@RestController
public class ConfigController {
@Autowired
private ConfigDao cd;
@RequestMapping("test")
public Object test(String id) {
return cd.findById(id);
}
@RequestMapping("getConfig")
public ResultBean getConfig() {
try {
List<Configs> select = cd.select(null, null,null);
return ResultBean.success(select.get(0));
} catch (Exception e) {
e.printStackTrace();
return ResultBean.fail("系统错误,请稍后再试");
}
}
@RequestMapping("modify")
public ResultBean modify(String json) {
try {
Configs config = JSONObject.parseObject(json, Configs.class);
boolean update = cd.update(config);
if (update) {
return ResultBean.success();
}else {
return ResultBean.fail("修改失败,请稍后再试");
}
} catch (Exception e) {
e.printStackTrace();
return ResultBean.fail("系统错误,请稍后再试");
}
}
}
生成的sql为
Sql: select msg,img,id,title from configs where 1=1
查询结果为
{"id":1,"msg":"test","img":"test","title":"test"}
若设置了过滤列
Dao层实现方法
@Override
public List<String> setFilterColumns() {
List<String> strs=new ArrayList<String>();
strs.add("title");
return strs;
}
生成sql为
Sql: select msg,img,id from configs where 1=1 and id=1 limit 1
查询结果为
{"id":1,"msg":"test","img":"test","title":null}
希望各位大佬给点改进建议