首页JavaBee 正文

如何高效地编写后端MVC代码(十)

时间: 2021年1月8日 浏览 281

文章来源网络,只为推广技术,若有侵权,联系删除文章。

  1. Dao要做什么工作

DAO(Data Access Object) 数据访问对象是一个面向对象的数据库接口。一般我们将访问数据库相关的功能放在Dao中。用Java语言,可以使用JDBC访问数据库,使用java.sql和javax.sql里的包,直接编码,但这样效率不高。所以现在软件工程师们一般都使用ORM工具,如Hibernate,Mybatis,还有在互联网高速发展背景下出现的Bee.

  Hibernate,Mybatis一般都需要写Javabean,还有xml匹配文件或将注解写在Javabean。而Bee只需要纯的Javabean,甚至Javabean里都可以没有get,set方法。

 完成了与表相关的Javabean等,就是实现SQL相关的功能了。Mybatis 需要写比较多SQL语句,即使只是查单个表的信息;而Hibernate则用面向对象的方式写SQL时不够灵活。Bee是一个开箱即用的ORM框架,这些工作已由Bee的Suid,SuidRich等接口负责,程序员何需去费心这些。

  Suid suid = BeeFactory.getHoneyFactory().getSuid();
  Orders orders1 = new Orders();
  orders1.setName("Bee");
  List<Orders> list1 = suid.select(orders1); //select

看以上的程序段,就4条语句,就可以将订单表的相关信息,通过List返回了。有两个语句,还是实体相关的。下面,就让我们一起来看下,如何自动生成实体Javabean。

  1. 自动生成Javabean

public class GenBeanExam {
public static void main(String[] args) {
try{
String dbName=HoneyConfig.getHoneyConfig().getDbName();
// driverName,url,username,password config in bee.properties.

  GenConfig config = new GenConfig();
  config.setDbName(dbName);
  config.setGenToString(true);//生成toString方法
  config.setGenSerializable(true);

// 更改成本地的具体路径 change to your real path
config.setBaseDir("D:\xxx\yyy\bee-exam\src\main\java\");
config.setPackagePath("org.teasoft.exam.bee.osql.entity");

  GenBean genBean = new GenBean(config);
  genBean.genSomeBeanFile("Orders");

// genBean.genSomeBeanFile("Orders,user"); //同时生成多个表

  } catch (BeeException e) {
     e.printStackTrace();
  }

}
}
配置了数据库的driverName,url,username,password等信息,就可以生成DB表对应的Javabean了。GenBean还提供了可以一下就生成所有的表Javabean,是不是开发效率很高呀。

  1. 自动生成基于Spring的Rest代码(后端MVC代码)

    以下是一个查询历史订单信息的服务,是前后端分离的,后端利用Spring的RestController注解,返回Json格式。更为重要的是,这个类是自动生成的,而且操作别的表的数据,也是可以自动生成的,是不是开发效率很高呀。

/*

  • Copyright 2016-2020 the original author.All rights reserved.
  • Kingstar(aiteasoft@163.com)
  • The license,see the LICENSE file.
    */

package com.automvc.enet.order.rest;

import java.util.List;

import org.teasoft.bee.osql.BeeSQLException;
import org.teasoft.bee.osql.FunctionType;
import org.teasoft.bee.osql.service.ObjSQLRichService;
import org.teasoft.bee.osql.service.ObjSQLService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

import com.automvc.enet.order.entity.Orderhistory;
import com.automvc.common.jquery.Result;

/**

  • @author AiTeaSoft.com
  • @since 1.0
  • Create on 2019-05-23 23:03:21
    */
    @RestController
    @RequestMapping("/orderhistory")
    public class OrderhistoryRest {
    @Autowired
    ObjSQLService objSQLService;

@Autowired
ObjSQLRichService objSQLRichService;

@RequestMapping("/list")
public Result list(Orderhistory orderhistory,
@RequestParam(value = "page", defaultValue = "1", required = false) int page,
@RequestParam(value = "rows", defaultValue = "20", required = false) int rows) {
Result result =new Result();
try{
String count=objSQLRichService.selectWithFun(orderhistory,FunctionType.COUNT,"*");
List list=objSQLRichService.select(orderhistory, (page-1)*rows, rows);
result.setRows(list);
int total=count==null?0:Integer.parseInt(count);
result.setTotal(total);
} catch (BeeSQLException e) {
System.err.println(e.getMessage());
result.setErrorMsg(e.getMessage());
}

 return result;

}

@RequestMapping("/add")
public Result insert(Orderhistory orderhistory){

Result  result =new Result();
try{
  int num=objSQLService.insert(orderhistory);
  result.setTotal(num);
  if(num<=0) result.setErrorMsg("insert failed!");
} catch (BeeSQLException e) {
  result.setErrorMsg(e.getMessage());
}
return result;

}

@RequestMapping("/edit")
public Result update(Orderhistory orderhistory){
Result result =new Result();
try{
int num=objSQLService.update(orderhistory);
result.setTotal(num);
if(num<=0) result.setErrorMsg("update failed!");
} catch (BeeSQLException e) {
result.setErrorMsg(e.getMessage());
}
return result;
}

@RequestMapping("/del")
public Result delete(String ids) {
Result result = new Result();
try {
int num=objSQLRichService.deleteById(Orderhistory.class, ids);
result.setTotal(num);
if (num <= 0) result.setErrorMsg("delete failed!");
} catch (BeeSQLException e) {
result.setErrorMsg(e.getMessage());
}
return result;
}
}

现在我们就来看下,这个类的代码,是如何生成的。

import org.teasoft.honey.osql.autogen.GenFiles;
/**

  • @author Kingstar
  • @since 1.7.2
    */
    public class GenFilesExam {

public static void main(String[] args) {

Map<String, String> map = new HashMap<>();
map.put("entityName1", "Orderhistory");
map.put("entityName", "orderhistory");
map.put("packageName", "com.automvc.enet.order.rest");
String basePath = "D:\\xxx\\yyy\\bee-exam\\src\\main\\java\\org\\teasoft\\exam\\bee\\osql\\autogen\\";

String templatePath = basePath + "OrderhistoryRest.java.template";
String targetFilePath = basePath + "OrderhistoryRest.java";
GenFiles.genFile(templatePath, map, targetFilePath);

System.out.println("finished!");

}

}

是不是很简单,几行代码,就可以源源不断的生成类似的代码了。后端MVC代码就应该这样用Bee的工具开发出来。

更多例子,请访问:https://gitee.com/automvc/bee-exam

或: https://github.com/automvc/bee-exam

Bee简单易用:单表操作、多表关联操作,可以不用写sql,极少语句就可以完成SQL操作;10分钟即可学会使用。

Bee功能强大:复杂查询也支持向对象方式,分页查询性能更高,一级缓存即可支持个性化优化。高级需求,还可以方便自定义SQL语句。