“dddb超级”工具包——高效、快速开发JavaWeb项目后端结构

时间:2022-07-25
本文章向大家介绍“dddb超级”工具包——高效、快速开发JavaWeb项目后端结构,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

dddb.jar工具包使用简介

dddb.jar工具包将JavaWeb项目后端的Dao层、DaoImpl层、DataBase层和Bean层的常用属性和方法封装起来,采用模板化的思想,封装了常见的Student类型JavaBean,Admin类型JavaBean(管理员),People类型JavaBean和一些工具包提供的模板JavaBean。而DataBase层封装了与常见数据库如Mysql,SqlServer连接的方法,内置了连接驱动并提供了多种连接方式。DaoImpl层则封装了数据的增、删、查、改,其中“超级DaoImpl“还封装了一些常见的查询函数,如求最大值、最小值、平均值、求某范围内的数据值等函数。

dddb.jar鼓励用户创建dddb层,创建业务需求所需的特定dddb类。将数据库连接、数据库数据操作以及JSON字符串封装集成到一个类中,从而减少后端代码开发工作量。在提高效率的同时,牺牲了运行性能,如数据库部分字段冗余、增多了文件IO次数,代码耦合度高,打破了传统的层次模型理念。因此可以将dddb类理解为一个优秀的超级模板,不鼓励但支持用户自定义扩展。

dddb.jar工具包致力于解决短时间内构建JavaWeb项目后端代码编写任务重问题,推荐广大新手、小白想短时间内构建Web类项目的人群使用,也推荐给学业繁重或任务紧急的码农们使用。但是请不要长期依赖于此工具包,因为此工具包在牺牲部分性能的前提下提高了代码开发效率。当学会模板化思想后,还是应该手写”dddb层"代码。接下来首先介绍工具包结构。

工具包结构

包名

作用

com.yixi.bean

封装的各类JavaBean

com.yixi.dao

封装的JavaBean对应接口

com.yixi.daoImpl

JavaBean对应接口的实现类

com.yixi.database

封装有关数据库连接操作的工具类

com.yixi.lib

依赖包,主要是数据库驱动

com.yixi.sql

初始化表格所需的sql文件

com.yixi.test

开发人员的测试类包

com.yixi.util

封装了其它常用的工具类

创建一个“dddb"类

假设场景:现需要开发一个企业进存销管理系统,涉及的传统JavaBean有”产品类“、”管理员类“、”普通用户类“。要求实现后端代码和部分业务逻辑代码,并将相关数据以JSON字符串的方式返回给前端,供前端开发人员调用。

新建一个项目(模块),引入yixi-dddb-1.5.jar并添加为库文件后,新建dddb包,在此包中新建测试类。本文仅以Product.java类作为演示,其它代码读者可以按照此模板自行开发。

Product.java

package com.dddb;
public class Product extands SuperBaseBean{ //用户可以指定使用哪
个内置的模板Bean,这里我们直接使用 "超级Bean" 作为模板
private Integer productID = -1; //产品ID
private String productName = ""; //产品名称
private Integer productPrice = 0; //产品价格
private String productDate = ""; //生产日期
public Product() { //默认无参构造方法
}
//满参构造方法
public Product(Integer productID, String productName,
Integer productPrice, String productDate) {
this.productID = productID;
this.productName = productName;
this.productPrice = productPrice;
this.productDate = productDate;
}
//以下为对应字段的get()和set()方法
public Integer getProductID() {
	return productID;
}
public void setProductID(Integer productID) {
	this.productID = productID;
}
public String getProductName() {
	return productName;
}
public void setProductName(String productName) {
	this.productName = productName;
}
public Integer getProductPrice() {
	return productPrice;
}
public void setProductPrice(Integer productPrice) {
	this.productPrice = productPrice;
}
public String getProductDate() {
	return productDate;
}
public void setProductDate(String productDate) {
	this.productDate = productDate;
}
//重写的toString()方法,方便后续调试输出对象信息
@Override
public String toString() {
return "Product{" +
"productID=" + productID +
", productName='" + productName + ''' +
", productPrice=" + productPrice +
", productDate='" + productDate + ''' +
'}';
}
}

到此为止,JavaBean的编写与普通的没有什么不同,相信大多数小白也可以轻松上手,接下来开始使用dddb工具包,带你进行高效率的开发之旅。

在成员变量中新增一个“超级DaoImpl",借用内置封装好的的SuperBaseBean模板进行数据操作。

private SuperBaseDaoImpl superBaseDao = new SuperBaseDaoImpl("tb_product");

既然是进行数据操作,肯定我们要先进行数据库连接。

数据库连接

dddb工具包以及封装好了数据库连接的方法并内置驱动,所以对于数据库连接还不太熟练的小白们还是很友好的。工具包中支持多数据库(Mysql和SqlServer)连接,多表连接以及多方式连接(通过自带参数的方式连接和通过配置文件进行连接)。

我们在Product.java类中写一个主方法来测试连接是否成功。

public static void main(String[] args) {
    MysqlConnection mysqlConnection = new MysqlConnection("dddbTest","root","123456");     //通过MysqlConnection自带参数方法进行连接
    if (null != mysqlConnection.getConnection()){                                          //参数值分别为:数据库名称、数据库账号、数据库密码
        System.out.println("database getConnection success");                              //若连接成功,则显示成功信息
    }else {
        System.out.println("database getConnection fail");                                 //若连接失败,则显示失败信息
    }
}

运行结果:

可以看到Mysql数据库连接成功,而SqlServer连接方法类似,只需要new一个SqlServerConnection并带上参数即可,本文不以赘述,接下来我们就可以把以上代码注释掉进行后续开发。但是工具包同时支持一种更加便捷的数据库连接,通过配置文件的方式连接数据库。代码如下:

public static void main(String[] args) {
    BaseConnection connection = new BaseConnection();     //通过配置文件的方法进行连接
    if (null != connection.getConnection()){
        System.out.println("success");
    }else {
        System.out.println("fail");
    }
}

这种连接方式不区分连接数据库的类型,也就是说Mysql和SqlServer数据库都可以使用以上方式,如果使用者不配置文件直接运行以上代码,会得到一下报错信息:

这是因为我们还没有配置文件,在第一次连接数据库的时候,配置文件还没有生成,当出现以上报错信息的时候,说明数据库配置文件错误(丢失或者配置信息不正确)。这个时候我们同时看到项目中会自动生成一个databaseConfig.config文件。

我们用IDEA或者记事本方式将其打开,可以看到如下初始信息。

Driver-Mysql=true :默认使用Mysql驱动,如使用者想用SqlServer请将本行参数改成false Driver-SqlServer=false:若使用者想用SqlServer请将本行参数改为true 注:若同时为true则系统默认使用Mysql驱动,参数名区分大小写,请一律改为小写参数 DataBaseName= : 数据库名称,请填写数据库名称字符串,在这里我们填上测试数据库名,dddbTest DataBaseUser= : 数据库账号名,这里我们填上默认账户名,root DataBasePwd= : 数据库密码,这里我们填上默认密码,123456 再次运行主方法:

数据库连接成功,接下来我们注释掉主方法,并进行数据库数据操作代码开发。

数据库表初始化

我们新建了dddbTest数据库,但是还没有product对应的产品数据表。这个时候工具包为了节省用户开发时间和减小工作量,提供了数据库表初始化方法,该方法支持“全部初始化”和“部分初始化”,全部初始化是指帮助用户生成可能使用到的所有表结构,若非大工作量的开发,不建议使用者调用此方法,因为会造成表结构冗余。我们推荐使用“部分初始化”的方法,指定表类型和表名就可以自动初始化。

InitTable.Init(InitTable.SuperBaseSQL,"tb_product");              //调用部分初始化方法,第一个参数为表类型,第二个参数为表名称

第一个参数用户可使用内置的表类型字段,使用InitTable的常量参数即可。第二个参数是用户自定义的表名称。若两个参数都为空,则会自动调用全部初始化方法,得到的表名称为数据库内置默认的表名称。

可以看到,“部分初始化方法”为使用者生成了一个“超级表结构”,这个表结构内置了足够多的字段,包含字符串类型和整型。用户若想追求性能,也可以使用其它表类型,如内置的student表结构、admin表结构、base表结构和people表结构。这些表结构仅保留了常见字段和部分预留字段,在运行性能上高于“超级表结构”。

“增、删、查、改”基本方法

因为工具包为每个内置Bean对象封装好了增、删、查、改基本方法,所以理论上使用者可以直接通过DaoImpl实例化的对象调用即可,但为了是业务逻辑更加清晰。我们推荐使用用户自定义的Bean对象将这些增删查改方法进行二次封装,以便后续调用。注:SuperBaseDaoImple类除了基本的增、删、查、改以外还封装了大类的常用函数,如正逆排序,最值运算,求平均值等等。还支持多表查询等操作。

为了二次封装,我们需要重写Product的get()和set()方法,使传入的参数值均赋值给内置模板对象,得到的参数值也均从内置的模板对象处获取。然后再进行二次封装。

package com.dddb;

import com.yixi.bean.SuperBaseBean;
import com.yixi.daoImpl.SuperBaseDaoImpl;
import java.util.ArrayList;

public class Product extends SuperBaseBean {    
	private Integer productID = -1;    
	private String productName = "";    
	private Integer productPrice = 0;    
	private String productDate = "";    
	private SuperBaseDaoImpl superBaseDao = new SuperBaseDaoImpl("tb_product");    
	
	public Product() {
	
	    }    
	    
	public Product(Integer productID, String productName, Integer productPrice, String productDate) {        
		this.productID = productID;        
		this.productName = productName;        
		this.productPrice = productPrice;
		this.productDate = productDate        			  
	}    

	public Integer getProductID() {        
		return super.getID();    
	}    

	public void setProductID(Integer productID) {  
	    super.setID(productID);    
	}    

	public String getProductName() {        
		return super.getFieldStr1();    
	}    

	public void setProductName(String productName) { 
	    super.setFieldStr1(productName);    
	}    

	public Integer getProductPrice() {        
		return super.getFieldInt1();    
	}    

	public void setProductPrice(Integer productPrice) { 
        super.setFieldInt1(productPrice);    
	}    

	public String getProductDate() {        
		return super.getFieldStr2();    
	}    

	public void setProductDate(String productDate) {
	    super.setFieldStr2(productDate);    
	}    

	@Override    
	public String toString() {    
	return "Product{" +
	"productID=" + getProductID() +
	", productName='" + getProductName() + ''' +    
	", productPrice=" + getProductPrice() +           
	", productDate='" + getProductDate() + ''' +             
	'}';
}    

//二次封装基本方法    

//保存一个product对象    
	public void insert(Product product){        
		superBaseDao.insert(product);    
	}    

//按照ID号删除一个product对象    
	public int delete(Integer ID){        
		int ret = superBaseDao.delete(ID);        
		return ret;    
	}    

	//查询所有product对象,结果以集合方式返回    
	public ArrayList<Product> select(){        		
		ArrayList<Product> arrayList = new ArrayList<>();        	
		Product product;        
		ArrayList<SuperBaseBean> list = superBaseDao.select();        
		for (SuperBaseBean superBaseBean : list) {            	
			product = new Product();            	
			product.setProductID(superBaseBean.getID());            
			product.setProductName(superBaseBean.getFieldStr1());  
			product.setProductDate(superBaseBean.getFieldStr2());  
			product.setProductPrice(superBaseBean.getFieldInt1());  	
			arrayList.add(product);       
		 }        
		return arrayList;    
	}
}

二次封装完成后,我们已经完成的工作量相当于传统的Dao层、DaoImpl层、DataBase层和Bean层的代码开发量总和。现在来进行测试是否二次封装成功。

package com.dddb;


public class Test {
    public static void main(String[] args) {
        
        //测试新增一个product对象方法
        Product product1 = new Product();
        product1.setProductID(1);
        product1.setProductName("苹果");
        product1.setProductPrice(10);
        product1.setProductDate("2020/8/8");
        product1.insert(product1);


        Product product2 = new Product();
        product2.setProductID(2);
        product2.setProductName("梨子");
        product2.setProductPrice(15);
        product2.setProductDate("2020/8/8");
        product2.insert(product2);
    }
}

运行结果如下:可以看到保存成功

测试查询方法:

package com.dddb;

import java.util.ArrayList;

public class Test {
    public static void main(String[] args) {
        Product product = new Product();
        ArrayList<Product> list = product.select();
        for (Product p : list) {
            System.out.println(p);
        }
    }
}

运行结果如下:可以看到查询成功。(注:若此处运行没有报错但运行结果与下图不符,请仔细检查toString()方法是否重写成功)。

测试删除方法:

package com.dddb;

import java.util.ArrayList;

public class Test {
    public static void main(String[] args) {
        Product product = new Product();
        product.delete(1);
        ArrayList<Product> list = product.select();
        for (Product p : list) {
            System.out.println(p);
        }
    }
}

运行结果如下:可以看到删除成功。

以上我们进行了一个简单的使用dddb工具包开发后端代码的过程。但是仍然有很多没有进行说明的部分,dddb工具包里内置了很多内置Bean对象以及对应的数据库数据操作函数。灵活的使用可使读者的开发工作量大大减少。虽然以上是一个“标准的”使用dddb工具包开发代码示例,但在实际开发中,我们可以更加灵活的使用,使我们代码量再次进一步减少。我们接下来注释掉Product.java类所有代码,直接使用dddb工具包进行开发,同时完成相同的业务需求。

”超级操作“方法

package com.dddb;


import com.yixi.bean.SuperBaseBean;
import com.yixi.daoImpl.SuperBaseDaoImpl;
import java.util.ArrayList;


public class TestSuper {
    public static void main(String[] args) {
        SuperBaseDaoImpl tb_product = new SuperBaseDaoImpl("tb_product");
        
        SuperBaseBean bean = new SuperBaseBean();
        bean.setFieldStr1("苹果");
        bean.setFieldStr2("2020/8/8");
        bean.setFieldInt1(10);
        
        //新增一个对象方法
        tb_product.insert(bean);


        //通过ID查询对象方法
        SuperBaseBean baseBean = tb_product.select(1);
        
        //将对象转换成JSON字符串方法
        System.out.println(SuperBaseBean.superbaseToJSON(baseBean));
        
        //通过ID删除方法
        tb_product.delete(2);


        //查询总行数方法
        System.out.println("已记录的总数据量为:" + tb_product.countNumber());
        
        //查询所有数据方法
        ArrayList<SuperBaseBean> arrayList = tb_product.select();
        
        //将集合类型转换成JSON字符串方法
        System.out.println(SuperBaseBean.superbaseArrayToJSON(arrayList));
        
        //求最大值方法
        tb_product.maxQuery("fieldInt1");
        
        //求最小值方法
        tb_product.minQuery("fieldInt1");
        
        //求平均值方法
        tb_product.avgQuery("fieldInt1");
        
        //正逆排序方法
        ArrayList<SuperBaseBean> arrayList1 = tb_product.sortByFieldAsc("fieldStr1");
        ArrayList<SuperBaseBean> arrayList2 = tb_product.sortByFieldDesc("fieldStr2");
        
        //查询某字段属于某范围方法
        ArrayList<SuperBaseBean> arrayList3 = tb_product.beanList(10, 20, "fieldInt1");
    }
}

总结

理论上的核心代码只有一行 SuperBaseDaoImpl tb_product = new SuperBaseDaoImpl(“tb_product”); 使用者可以理解为SuperBaseDaoImpl就是一个”表“对象,当实例化此对象时,只需要将表明作为参数带入,即可操作所有该”表“对象的所有方法,以上代码示例仅展示了部分数据操作方法,其余方法读者可以自行研究使用。配合其它基本内置Bean对象和数据库连接方法,使得dddb工具包具有格外强大的代码复用能力。对于短时间内后端开发十分有利!

工具包下载地址:

百度云: 点我下载. 提取码:oesi