起步软件技术论坛
搜索
 找回密码
 注册

QQ登录

只需一步,快速开始

楼主: qldsrx

[分享] [2016-07-07更新]高性能 baas后台查询封装

  [复制链接]

1014

主题

4371

帖子

1万

积分

论坛元老

Rank: 8Rank: 8

积分
10977
QQ
发表于 2016-6-12 14:28:56 | 显示全部楼层
楼主太棒了,欢迎楼主加入X5交流民间第一群 30057529
孤舟蓑笠翁,独钓寒江雪。
X5牛刀交流民间第一群:30057529
提供有偿服务,联系WX:18332024
bex5疑难问题解决方案
回复 支持 反对

使用道具 举报

34

主题

148

帖子

492

积分

中级会员

Rank: 3Rank: 3

积分
492
QQ
发表于 2016-6-27 20:43:42 | 显示全部楼层
楼主高手,已经下载替换了,看帖子描述,不需要修改现有代码就可以生效,所以也就没有专门测试了。
回复 支持 反对

使用道具 举报

64

主题

471

帖子

1127

积分

金牌会员

Rank: 6Rank: 6

积分
1127
 楼主| 发表于 2016-7-7 21:05:06 | 显示全部楼层
附件有更新,建议重新下载。
回复 支持 反对

使用道具 举报

718

主题

2841

帖子

5657

积分

论坛元老

Rank: 8Rank: 8

积分
5657
QQ
发表于 2016-7-11 13:29:46 | 显示全部楼层
CRUD.java我用您这个替换掉了官方原来的了,对官方的其他功能有没有影响?我做保存图片时,无法保存到相应的ID文件夹下了,不知道跟这个有没有关系?
WEX5初学者,欢迎初学者交流
QQ:597558229
tel:15857336322
回复 支持 反对

使用道具 举报

64

主题

471

帖子

1127

积分

金牌会员

Rank: 6Rank: 6

积分
1127
 楼主| 发表于 2016-7-11 16:09:56 | 显示全部楼层
你的ID是否在新增前就产生且不会改变,数据库里的自增长主键没法用在图片ID上面,因为保存前的ID是空值。
回复 支持 反对

使用道具 举报

718

主题

2841

帖子

5657

积分

论坛元老

Rank: 8Rank: 8

积分
5657
QQ
发表于 2016-7-12 18:43:25 | 显示全部楼层
己解决了,我将上传图片的JS换掉了,上传的直接放在统一文件夹下了
WEX5初学者,欢迎初学者交流
QQ:597558229
tel:15857336322
回复 支持 反对

使用道具 举报

94

主题

403

帖子

683

积分

高级会员

Rank: 4

积分
683
QQ
发表于 2016-11-7 02:14:43 | 显示全部楼层
本帖最后由 wex81997167 于 2016-11-7 02:18 编辑

保存部分能否也做下优化,在保存成功的时候如果是mysql数据库返回下自增id和受影响函数,尝试了下需要重新生成jar包的节奏啊,能不能不需要重新生成baas-api.jar也能达到效果!这是我们修改的代码
-------效果截图(返回一个id自增的集合,如果是批量插入也可以获取所有插入的最新id值):
811111111111111.png
-------
CURD.java

public static JSONObject save(JSONObject params, ActionContext context) throws SQLException, NamingException, ParseException {
                // 获取参数
                String db = params.getString("db");
                JSONArray tables = params.getJSONArray("tables");
                JSONObject permissions = params.containsKey("permissions")?params.getJSONObject("permissions"):null;
                JSONObject result = new JSONObject();
                Connection conn = context.getConnection(db);
                try {
                        conn.setAutoCommit(false);
                        int i=0;
                        if (tables != null && tables.size()>0) {
                                for(Object jsonTable : tables){
                                        Table table = Transform.jsonToTable((JSONObject)jsonTable);
                                        String tableName = table.getTableName();
                                        if(canSave(permissions, tableName)){
                                                result.put("ids",DataUtils.saveData(conn, table, getSaveColumnsByPermissions(permissions, tableName)));
                                        }
                                }
                        }
                        
                        return result;
                } finally {
                        conn.close();
                }
               
        }

-------

DataUtils.java

/**
         * 保存Table数据,并指定列范围
         * @param conn
         * @param table
         * @param tableName 数据库表名
         * @param columns 列范围
         * @throws SQLException
         */
        public static JSONObject saveData(Connection conn, Table table, Collection<String> columns){
                JSONObject result = new JSONObject();
                ResultSet rs=null;
                long id = 0;//自增ID  
                if (columns == null) {
                        columns = new ArrayList<String>();
                        columns.addAll(table.getColumnNames());
                }
                String idColumn = table.getIDColumn();
               
                PreparedStatement newStat = null;
                String newSQL = createNewSQL(table, columns);
                try {
                        newStat = conn.prepareStatement(newSQL,Statement.RETURN_GENERATED_KEYS);
                        for (Row row : table.getRows(RowState.NEW)) {
                                int i = 1,j=0;
                                for (String column : columns) {
                                        newStat.setObject(i, row.getValue(column));
                                        i++;
                                }
                                if(logger.isDebugEnabled())
                                        logger.debug("saveData:"+newStat.toString());
                                newStat.execute();
                                rs = newStat.getGeneratedKeys();
                                while(rs.next()){
                                        id=rs.getLong(1);
                                }
                                result.put("id"+j++,id);
                        }
                } catch (SQLException e) {
                        String msg = "SQL执行失败,"+newStat.toString();
                        throw new com.justep.baas.data.sql.SQLException(msg,e);
                }
                PreparedStatement editStat = null;
                String updateSQL = createUpdateSQL(table, columns);
                try {
                        editStat = conn.prepareStatement(updateSQL);
                        for (Row row : table.getRows(RowState.EDIT)) {
                                int i = 1;
                                for (String column : columns) {
                                        editStat.setObject(i, row.getValue(column));
                                        i++;
                                }
                                editStat.setObject(columns.size() + 1, row.isChanged(idColumn) ? row.getOldValue(table.getIDColumn()) : row.getValue(idColumn));
                                if(logger.isDebugEnabled())
                                        logger.debug("saveData:"+editStat.toString());
                                editStat.execute();
                        }
                } catch (SQLException e) {
                        String msg = "SQL执行失败,"+editStat.toString();
                        throw new com.justep.baas.data.sql.SQLException(msg,e);
                }
                PreparedStatement deleteStat = null;
                String deleteSQL = createDeleteSQL(table);
                try {
                        deleteStat = conn.prepareStatement(deleteSQL);
                        for (Row row : table.getRows(RowState.DELETE)) {
                                deleteStat.setObject(1, row.isChanged(idColumn) ? row.getOldValue(table.getIDColumn()) : row.getValue(idColumn));
                                if(logger.isDebugEnabled())
                                        logger.debug("saveData:"+deleteStat.toString());
                                deleteStat.execute();
                        }
                } catch (SQLException e) {
                        String msg = "SQL执行失败,"+deleteStat.toString();
                        throw new com.justep.baas.data.sql.SQLException(msg,e);
                }
               
                return result;
        }

欢迎各位加群讨论:http://bbs.wex5.com/forum.php?mod=viewthread&tid=105046&page=1&extra=#pid165306780
回复 支持 反对

使用道具 举报

1

主题

17

帖子

69

积分

初级会员

Rank: 2

积分
69
QQ
发表于 2016-11-30 14:10:53 | 显示全部楼层
向楼主请教下。你修改的增强crud,具体session是如何实现的。能否举例或给个演示。谢谢。
回复 支持 反对

使用道具 举报

1

主题

17

帖子

69

积分

初级会员

Rank: 2

积分
69
QQ
发表于 2016-11-30 14:12:47 | 显示全部楼层
WEX5关于这个SAVE总是觉得不安全,没有session验证,谁都可以POST一条数据就搞到数据库里了,很不安全。
回复 支持 反对

使用道具 举报

64

主题

471

帖子

1127

积分

金牌会员

Rank: 6Rank: 6

积分
1127
 楼主| 发表于 2016-11-30 17:19:32 | 显示全部楼层
guiziwen 发表于 2016-11-30 14:10
向楼主请教下。你修改的增强crud,具体session是如何实现的。能否举例或给个演示。谢谢。 ...

在登录时,相关action中写入session。后续sql查询里,可以设置条件参数,里面只要用:参数名的方式嵌入,值自动会先从session里读取。(两个冒号也可以,表示字符串替换参数,一个冒号是参数化查询的参数)
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|X3技术论坛|Justep Inc.    

GMT+8, 2024-11-21 20:41 , Processed in 0.070366 second(s), 23 queries .

Powered by Discuz! X3.4

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表