Prototype功能预览三:没有价值的MyBatis/iBatis

来源:互联网 发布:大麦盒子直播软件 编辑:程序博客网 时间:2024/04/30 02:51

框架整体介绍:http://blog.csdn.net/flyxxxxx/article/category/7055640

对此框架有兴趣或想参与开发的请加QQ群:255195191


以下演示一段基于Prototype框操作数据库CRUD的例子:

@Prototype //此注解标识这是一个基于原型模式的类
public class PreparedBusiness {

    private Integer id;

    @Transactional  //开启数据库事务
    public boolean execute() {
        insertDict("insert into sys_dict(name) values(?)", new Object[] { "test1" });//插入数据
        List<Dict> list = select("select id,name from sys_dict");//查询数据并包装为对象
        query();//更复杂的查询
        if (updateDict("update sys_dict set name=? where id=?", new Object[] { "test2", list.get(0).getId() }) > 0) {//更新数据
            Dict dict = selectOne("select id,name from sys_dict where id=?", new Object[] { list.get(0).getId() }); //查询数据
            deleteDict("delete from sys_dict where id=?", new Object[] { dict.getId() });  //删除数据
            return true;
        }
        return false;
    }

    private void query() {  //构建一个查询
        SQLBuilder builder = new SQLBuilder();
        builder.append("select id,name from sys_dict where id>0");
        builder.appendWhenNotEmpty(id, "and id=?");
        builder.appendWhenNotEmpty(new ArrayList<Integer>(), "and id in");
        Dict rs = query(builder);
        Assert.notNull(rs);
    }

    @PreparedSql
    private Dict query(SQLBuilder builder) {
        return null; //此处不需要写查询实现
    }

    @PreparedSql(type = StatementType.DELETE)
    private void deleteDict(String sql, Object[] params) {  } //此处不需要写查询实现

    @PreparedSql({ "id", "name" })
    private Dict selectOne(String sql, Object[] params) {
        return null; //此处不需要写查询实现
    }

    @PreparedSql({ "id", "name" })
    private List<Dict> select(String sql) {
        return null; //此处不需要写查询实现
    }

    @PreparedSql(type = StatementType.UPDATE)
    private int updateDict(String sql, Object[] params) {
        return 0; //此处不需要写查询实现
    }

    @PreparedSql(type = StatementType.INSERT)
    private Integer insertDict(String sql, Object[] params) {
        return null;  //此处不需要写查询实现
    }

}


测试代码:

public void test(){

  PreparedBusiness busi=new PreparedBusiness();

  busi.execute();

}

上述方法将完成数据库的增删改查,并自动将执行结果包装为需要的对象。

不再需要将if / else这样的条件写入xml文件,也不需要在xml中为如统计结果之类的复杂查询写复杂的mapping和SQL配置,完全使用原生JAVA

理想情况下,我们希望每个接口没有任何多余的输入参数和输出结果,而目前包括spring mvc / dubbo 等各种序列化方法无法做到这一点,Prototype框架将为接口最小化原则提供完整的支持,避免前端和APP开发受到额外数据的干扰。

MyBatis / iBatis在常见的三层(多层)体系架构下,同一查询会向多个Service提供服务,这是不符合接口最小化原则的。在微服务下,通常在一个服务内,并不需要一个查询向多个Service提供服务,这类服务调用将采用Http REST这类远程调用完成。因此,与 Prototype框架相比,再无太大价值。






原创粉丝点击