java用类代替数据库_结合Mybatis和Java集合实现的通用数据库处理方法(取代传统Dao层结构)...

本套方法主要核心为利用Java中的集合替代了传统Dao模式下的bean层,从而减少了代码量。

废话不多,代码如下。

以新增方法为例:

(1)java中的mapper接口

/*** 通用添加数据操作

*@parammap

*@return

*/

public boolean add(Mapmap);

定义接收参数类型。

(2)Maybatis的mapper.xml映射文件。

insert into ${tablename}${k}values${params[k]}

传入的参数为一个Map对象,内部封装有表名:tableName;插入字段名列表:keys(为一字符串数组);字段值:params(Map对象,键为字段名,值为字段值)。

根据标签循环组合完整的为SQL语句。

(3)业务层实现方法。

/**

* 添加数据

* @param tableName表名

* @param params参数列表

* @returntrue:修改成功 false: 修改失败

*/

public boolean addData(String tableName, Mapparams) {

String[] keys= new String[params.size()]; //字段名

Set sset =params.keySet();int i = 0;for(String os : sset){

keys[i++] =os;

}

Map map=new HashMap();

map.put("tablename", tableName);

map.put("keys", keys);

map.put("params", params);if(commonMapper.add(map)){return true;

}else{return false;

}

}

该层主要作用为将数据封装成map层所需要的数据结构,即将表名,字段名,字段值封装入Mao中传递给Dao层方法。

(4)Controller层方法

/**

* 添加数据

*

* @param request

* @param response

* @param model

* @return

*/@RequestMapping("/user/addData.do")

public@ResponseBody String addData(HttpServletRequest request,

HttpServletResponse response, Model model) {

String tableName=""; //表名

String ds = null; //前台数据

try{

ds = new String (request.getParameter("postData"));

} catch(Exception e1) {

e1.printStackTrace();

}

JSONArray json=JSONArray.parseArray(ds);

JSONObject jsonOne;

Map map=new HashMap();

for(int i=0;i

jsonOne =json.getJSONObject(i);

if(jsonOne.get("Key").equals("tableName")){

tableName = (String) jsonOne.get("Value"); //获取表名

}else{

String key = (String) jsonOne.get("Key");

String value = jsonOne.get("Value").toString();

if(key.charAt(0)=='#'){

//数值类型

key = key.substring(1);

}else{

//字符串类型加引号

value = "'"+value+"'";

}

map.put(key,value);

}

}

if(commonService.addData(tableName,map)){

return "true";

}else{

return "false";

}

}

controller层方法,主要为接受前台数据,将其初步组合传递给Server层进行封装,并接受其返回数据。

以上即为新增方法完整的后台操作流程。下面以较为复杂的分组查询方法为例介绍查询操作的实现。

(1)Maper接口

/*** 根据字段查询(查询字段)

*@parammap

*@return

*/

public List> selectFieldsByKeys(Map map);

同样的接口定义,返回类型定义为List>类型数据,其中Map的键对应返回数据的字段名,值对应字段值。前台接收数据时即可根据对应Key值接收字段值。

(2)Mapper XML实现

SELECT ${fieldName} FROM ${tablename}

${k} = ${params[k]}

GROUP BY ${groupName}

HAVING ${havingName}

ORDER BY ${orderName}

<1>定义返回类型为 resultType="java.util.Map" 类型。

<2>循环接收查询条件

<3>判断是否加入其他SQL语句

(3)service方法实现

/**

* 分组查询(条件为=)

* @param tableName表名

* @param fieldName所需查询的字段名

* @param params查询条件 map(key:字段名 value:数据值)

* @param groupName分组依赖

* @param havingName聚合条件

* @param orderName排序条件(所需排序的字段名)

* @return

*/

public List> selectFieldsByKeys(String tableName,String fieldName,Mapparams,String groupName,

String havingName,String orderName) {

Map map=new HashMap();

String[] keys= null;if(params!=null){

keys= new String[params.size()]; //查询字段名数组

Set sset = params.keySet(); //获取字段名

int i = 0;for(String os : sset) {

keys[i++] =os;

}

}

map.put("fieldName",fieldName);

map.put("tablename", tableName);

map.put("keys", keys);

map.put("params", params);

map.put("groupName", groupName);

map.put("havingName", havingName);

map.put("orderName", orderName);

List> result = null;

result=commonMapper.selectFieldsByKeys(map);returnresult;

}

将数据封装成map层所需要的数据结构

(4)Controller层方法

根据不同的需求调用。

注:

以上两个例子分别是以添加和删除为例介绍了实现思想,实际运用中,可根据不同的需要添加其他方法。例如,多条添加;根据子查询添加,特殊条件查询,调用存储过程等本文主要介绍了后台代码的实现,前台可根据时间需求一样设计出同样的通用操作,减少代码量,提高复用,在此不再赘述。

该套方法,主要作用就是与数据库进行解耦,不用构建实体类与数据库做映射,可实现不同程序间的代码复用。

业务的实现,可在业务层进行代码实现Spring 可通过 @Transactional注解实现。

该套方法适用场景有所局限,例如:安全性,在xml中,是通过'$'进行的拼接,容易被SQL注入攻击。

该套方法还有很大的改进空间和适用局限欢迎各位大神指出错误,提出建议。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值