Home > Database > Mysql Tutorial > 一个根据配置文件对数据库进行增删改查的三层架构解决方法

一个根据配置文件对数据库进行增删改查的三层架构解决方法

WBOY
Release: 2016-06-07 15:29:19
Original
1234 people have browsed it

最近在项目中遇到一个问题,数据库中有很多张需要由人手工维护的基本数据表,而这些数据表每一个都需要人工对其中的数据进行维护。在开发的过程中发现基本上每个页面需要做的控件相差不大,区别在于不同的界面对应的表和字段不同,而基本的代码处理流程是一

最近在项目中遇到一个问题,数据库中有很多张需要由人手工维护的基本数据表,而这些数据表每一个都需要人工对其中的数据进行维护。在开发的过程中发现基本上每个页面需要做的控件相差不大,区别在于不同的界面对应的表和字段不同,而基本的代码处理流程是一至的,所以这就促使我想到能不能有更好一点的办法简化这个开发过程。

用户界面层,我们最重点的是用户操作界面的控件要和数据库的字段匹配,在开发过程中还有,如果数据库的字段有变化的话代码修改越少越好。所以最好UI可以根据数据库的字段自动生成相应的控件。

业务层,可能会做一些基本的数据校验之类的工作,由于在需求中重点是UI和数据库访问所以业务层的功能应该会相对简单一些。

数据库访问层,在数据库的操作语句中我们也需要知道数据库的字段,以此生成增删改查的语句。

在这里我打算使用配置文件来进行配置。

在这里我也想到过可以通过DAO来获得数据库的字段和字段类型,但是转念一想再数据库中我们很多时候可能会使用一样的SQL类型来存储不一样的数据类型,比如使用varchar可以存储字符串,但是也有人使用varchar存储枚举型数据,可能不同的人会使用不同的控件显示对应同一个SQL数据类型。所以这里我打算适当的使用一些配置来对UI显示数据的控件进行配置。

想到这里,在配置文件中就需要有这样一些配置项,1.数据库的字段。2.这个字段可以是用什么样地数据类型存储的3.在界面上是用什么控件来展示的。

这里我打算使用java来做开发,但是这种思想我觉得其他任何语言都是可以考虑使用的。所以如果读者们有什么意见的话也可以一起交流。

下一步是要对配置文件进行定型了。

2014-03-20

<?xml version="1.0" encoding="UTF-8"?>
<root>
	<Table name="country">
		<countrycode type="string" UIDisplay="true">
			<UIControl type="text" label="Country Code"/>
		</countrycode>
		<countryname type="string" UIDisplay="true">
			<UIControl type="text" label="Country Name"/>
		</countryname>
		<createdby type="string" UIDisplay="false" />
		<createdat type="datetime" UIDisplay="false" />
		<updatedby type="string" UIDisplay="false" />
		<updatedat type="datetime" UIDisplay="false" />
	</Table>
</root>
Copy after login

配置结构则需要考虑什么控件需要在界面上展示,怎么样展示,目前还是比较简单的控件只是输入文本的。

由于在每个界面上都有的保存,删除等的按钮,所以就添加一个的通用界面吧,当然直接在JFrame上画开始也可以。

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextField;
import java.awt.BorderLayout;
import javax.swing.JButton;
import java.util.TreeMap;
Copy after login
public class ProjectForm extends JFrame{
	public String nameString;
	public JPanel panel ;
	public TreeMap<String, JTextField> TextFieldList = new TreeMap<String,JTextField>();
	public ProjectForm() {
		
		panel = new JPanel();
		getContentPane().add(panel, BorderLayout.CENTER);
		panel.setLayout(null);
		
		JPanel panel_1 = new JPanel();
		panel_1.setBounds(82, 5, 265, 33);
		panel.add(panel_1);
		
		JButton btnNew = new JButton("New");
		panel_1.add(btnNew);
		
		JButton btnSave = new JButton("Save");
		panel_1.add(btnSave);
		
		JButton btnClear = new JButton("Clear");
		panel_1.add(btnClear);
		
		JButton btnDelete = new JButton("Delete");
		panel_1.add(btnDelete);
	}
}
Copy after login
在生成的时候根据不同的表名向上添加控件。
import java.io.File;
import java.util.List;
import javax.swing.JLabel;
import javax.swing.JTextField;
import org.jdom2.*;
import org.jdom2.input.SAXBuilder;
Copy after login
public class FormCreator {
	static ProjectForm CreateForm(String name)
	{
		ProjectForm form = new ProjectForm();
		form.nameString = name;
		String filename = "D:\\work eclipse\\1.xml";
		int topx = 20;
		int topy = 80;
		int Labelwidth = 100;
		int LabelHeight = 15;
		int gapy = 30;
		int textwidth = 300;
		try 
		{
			SAXBuilder builder = new SAXBuilder();
			org.jdom2.Document document;
			File file = new File(filename);
			document = builder.build(file);
			Element rootElement = document.getRootElement();
			List<Element> tableList = rootElement.getChildren();
			
			for (int i = 0; i < tableList.size(); i++) 
			{
				Element node = tableList.get(i);
				String tNameString = node.getAttribute("name").getValue();
				if(!tNameString.equalsIgnoreCase(name))
				{
					continue;
				}
				List<Element> tablefeilds = node.getChildren();
				for(int j=0;j<tablefeilds.size();j++)
				{
					Element feildnode = tablefeilds.get(j);
					if(!"true".equalsIgnoreCase(feildnode.getAttribute("UIDisplay").getValue()))
					{
						continue;
					}
					List<Element> UIfeilds = feildnode.getChildren();
					for(int k=0;k<UIfeilds.size();k++)
					{
						Element UIfeild = UIfeilds.get(k);
						Attribute attribute = UIfeild.getAttribute("label");
						if(attribute != null)
						{
							JLabel label= new JLabel(attribute.getValue());
							label.setBounds(topx,topy+gapy*j,Labelwidth,LabelHeight);
							form.panel.add(label);
						}
						attribute = UIfeild.getAttribute("type");
						if("text".equalsIgnoreCase(attribute.getValue()))
						{
							JTextField TextField= new JTextField();
							TextField.setBounds(topx+Labelwidth,topy+gapy*j,textwidth,20);
							form.panel.add(TextField);
							form.TextFieldList.put(feildnode.getName(), TextField);
						}
					}
				}
			}
			
		} 
		catch (Exception e) {
			System.out.println(e.getMessage());
		}

		return form;
	}
}
Copy after login
之后则应该还有BLL和DAL的部分。
source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template