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 | 封装了其它常用的工具类 |
假设场景:现需要开发一个企业进存销管理系统,涉及的传统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
注:若下载失败请留言或加微信联系。
微信交流(备注CSDN):HD15542547268