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框架相比,再无太大价值。
- Prototype功能预览三:没有价值的MyBatis/iBatis
- Prototype功能预览十:面向未来技术的框架
- Prototype功能预览六:业务数据与处理代码集中管理的工作流水线
- Prototype功能预览七:一个注解分离日志及事件的发送于处理逻辑
- Prototype功能预览九:接口最小化原则-更安全的接口
- 知识是没有价值的
- prototype的Ajax功能
- Prototype功能预览二:两个注解实现数据库批处理
- Prototype功能预览五:一个注解简化任意IO操作
- Prototype功能预览十二:一个注解可在Spring MVC的Servlet3的异步处理与同步处理间切换
- mybatis和ibatis的比较
- mybatis 与ibatis的区别
- Mybatis与ibatis的对比
- mybatis与ibatIS的区别
- Ibatis和 Mybatis的区别
- Mybatis与ibatis的区别
- Mybatis和Ibatis的区别
- ibatis和mybatis的区别
- Android系统CPU使用率获取(附java代码)%25
- 判断一棵二叉树是否是另一棵树的子树
- Deep Learning and Autonomous Driving
- hadoop cgroup源码解读
- R语言-逻辑测试的一些技巧
- Prototype功能预览三:没有价值的MyBatis/iBatis
- HTML基础之事件
- hdu2023 求平均成绩 (C语言)
- Java_基础—递归
- scrapy shell的settings user_agent问题
- 最大子矩阵和
- java 方法 methodA(int ... ids)
- 机器学习实战学习_____(2)决策树
- nyoj 236 心急的C小加