重构一书中有说过,一个方法的参数最好不要超过7个,否则就是不雅的编码。在SWING开发中,表单的提交不同于HTML,并没有请求对象request,控件中的值往往要在提交BUTTON时通过参数的形式传递,如果控件有很多个,传递的值会霸占几个参数位置,当然很多人喜欢用List、Property存储控件值,这里提供另一种思路用于传递控件值到逻辑业务层中,使用中间实体类做传递。
1、首先建立中间类,存储表单要提交的参数。
public class Condition implements Serializable{
/**
* 逻辑关系(and or !)
*/
private String logic;
/**
*
*/
private String beginBracket;
private String fieldName;
private String operator;
private Object value;
private String endBracket;
public Condition(String logic, String beginBracket, String fieldName, String operator,
Object value, String endBracket){
this.logic = logic;
this.beginBracket = beginBracket;
this.fieldName = fieldName;
this.operator = operator;
this.value = value;
this.endBracket = endBracket;
}
/**
* @return Returns the beginBracket.
*/
public String getBeginBracket() {
return beginBracket;
}
/**
* @param beginBracket The beginBracket to set.
*/
public void setBeginBracket(String beginBracket) {
this.beginBracket = beginBracket;
}
/**
* @return Returns the endBracket.
*/
public String getEndBracket() {
return endBracket;
}
/**
* @param endBracket The endBracket to set.
*/
public void setEndBracket(String endBracket) {
this.endBracket = endBracket;
}
/**
* @return Returns the fieldName.
*/
public String getFieldName() {
return fieldName;
}
/**
* @param fieldName The fieldName to set.
*/
public void setFieldName(String fieldName) {
this.fieldName = fieldName;
}
/**
* @return Returns the operator.
*/
public String getOperator() {
return operator;
}
/**
* @param operator The operator to set.
*/
public void setOperator(String operator) {
this.operator = operator;
}
/**
* @return Returns the value.
*/
public Object getValue() {
return value;
}
/**
* @param value The value to set.
*/
public void setValue(Object value) {
this.value = value;
}
/**
* @return Returns the logic.
*/
public String getLogic() {
return logic;
}
/**
* @param logic The logic to set.
*/
public void setLogic(String logic) {
this.logic = logic;
}
}
2、表现层将表单中的值插入中间实体中,比如:
List<Condition> conditions = new ArrayList<Condition>();
conditions.add(new Condition("and", null, "billMaster.validDate",
">=", CommonVars.getBeginDate(date), null));
conditions.add(new Condition("and", null,"billMaster.isValid", "=",new Boolean(true), null));
3、
/**
* 组织HQL报表条件公共查询
*
* @param selects
* 选择内容
* @param className
* 类名
* @param conditions
* 查询条件
* @param groupBy
* 分组
* @param leftOuter
* 左连接内容
* @return 查询结果
*/
public List commonSearch(String selects, String className, List conditions,
String groupBy, String leftOuter) {
if (leftOuter == null) {
leftOuter = "";
}
String sql = "";
sql = " from " + className + " a " + leftOuter + " where a.company =? ";
if (selects != null && !selects.equals("")) {
sql = selects + sql;
} else {// selects == null
sql = " select a from " + className + " a " + leftOuter
+ " where a.company =? ";
}
List<Object> params = new ArrayList<Object>();
params.add(CommonUtils.getCompany());
if (conditions != null) {
for (int i = 0; i < conditions.size(); i++) {
Condition condition = (Condition) conditions.get(i);
if (condition.getLogic() != null) {
sql += " " + condition.getLogic() + " ";
}
if (condition.getBeginBracket() != null) {
sql += condition.getBeginBracket();
}
if (condition.getFieldName() != null) {
sql += "a." + condition.getFieldName();
}
if (condition.getOperator() != null) {
sql += condition.getOperator();
}
if (condition.getValue() != null) {
if(condition.getOperator().indexOf("in")>0){
String[] strs = (String[])condition.getValue();
for(int j=0;j<strs.length;j++){
if(j==0){
sql += "?";
}else{
sql +=",?";
}
}
for(String str : strs){
params.add(str);
}
}else{
sql += "? ";
params.add(condition.getValue());
System.out.println("value1="+condition.getValue());
}
}
if (condition.getEndBracket() != null)
sql += condition.getEndBracket();
}
}
if (groupBy != null && !groupBy.equals("")) {
sql = sql + " " + groupBy;
}
System.out.println("---------------sql:" + sql);
List result = this.find(sql, params.toArray());
return result;
}
4、在业务逻辑层中调用
leftOuter = " left join fetch a.billMaster left join fetch a.wareSet left join fetch a.complex ";
List ms = casDao.commonSearch("", billDetailTableName, conditions, "",leftOuter);
分享到:
相关推荐
这可能涉及ADO.NET或其他ORM框架,如Entity Framework,用于连接数据库,执行SQL语句,获取结果集,然后将结果传递给目标窗体。 总的来说,"不同窗体参数传递"是C#开发中不可或缺的一部分,它确保了数据在多窗体...
以上步骤只是一个基础的数据库连接示例,实际开发中可能需要处理更多的异常情况,优化SQL语句,使用预编译的`PreparedStatement`防止SQL注入,以及考虑事务管理等高级特性。此外,现代的Java开发通常会使用像...
例如,可能有一个`updateEmployee()`方法,该方法接收员工ID和新的工资信息作为参数,然后构建并执行一个UPDATE SQL语句,例如: ```java String sql = "UPDATE Employee SET salary = ? WHERE id = ?"; ...
当用户选择一行进行操作时,程序获取选中行的下标,然后将其作为参数传递给相应的SQL语句。 6. 表格数据显示与编辑: SWT提供了`Table`控件来显示和编辑表格数据。你可以通过`TableItem`来创建和修改表格行,`Table...
同样,这些更改也应同步到数据库,这可能涉及使用UPDATE SQL语句。 4. **查询(Query)**:查询数据通常涉及从数据库加载数据到JTable。你需要使用JDBC连接到MySQL 8.0数据库,执行SELECT语句获取数据,然后将结果...
这一章将介绍如何使用JDBC(Java Database Connectivity)连接数据库,执行SQL语句,以及处理结果集。 ## 第16章 网络编程 最后,我们将学习Java的网络编程,包括套接字通信、URL处理和HTTP客户端编程。 通过这个...
- PreparedStatement:预编译SQL语句,防止SQL注入。 - ResultSet:处理查询结果。 10. **Java库与框架**: - Swing和JavaFX:构建图形用户界面(GUI)。 - JUnit:单元测试框架。 - Spring:依赖注入、AOP、...
源代码会包含如何连接数据库,执行SQL语句,处理结果集等基本的数据库操作。 九、Java Swing与GUI编程 通过Swing库创建图形用户界面,学习组件的使用、布局管理、事件监听等。 十、Java的高级特性 可能涉及反射、...
9. 存储过程的特性:存储过程可以带有参数,并且可以包含各种SQL语句,包括数据更新语句,但不局限于更新,也可以有返回值。 10. 关系模型操作:从关系模型中选择部分属性形成新的关系称为投影。 11. 段落选择:在...
// 通过创建字符数组传递给 String 类构造器来创建新的字符串 char c1[] = {'H', 'e', 'l', 'l', 'o'}; String s5 = new String(c1); System.out.println(s1); System.out.println(s2); System.out.println(s3...
学习如何使用JDBC API连接数据库,执行SQL语句,处理结果集。 十、泛型 源代码中会展示泛型类、泛型方法的使用,提高代码类型安全性和可读性。 十一、IO流与NIO 对比传统IO和NIO(New IO)的使用,理解缓冲通道、...
4. 方法:方法是代码的重用单元,用于实现特定功能,通过方法参数传递数据。 二、面向对象编程 1. 类与对象:Java是面向对象的语言,类是对象的蓝图,对象是类的实例。 2. 继承:Java支持单继承和多层继承,通过...
- JDBC(Java Database Connectivity):JavaDB的访问通过JDBC API实现,允许Java应用程序连接到数据库并执行SQL语句。 5. **项目结构与部署** - 项目的结构可能包括了源代码文件、资源文件、配置文件以及数据库...
PreparedStatement 提供预编译的 SQL 语句,适用于多次执行相同 SQL 的场景,提高了效率并减少了 SQL 注入风险。 2. Java 与数据库的连接方式主要有 JDBC-ODBC 桥接和直接使用数据库提供的 JDBC 驱动。Statement 和...
了解如何加载驱动、建立连接、执行SQL语句和处理结果集是必要的。 10. **Swing和JavaFX图形用户界面**:对于开发桌面应用,Java提供了Swing和JavaFX库来创建丰富的用户界面。学习组件使用、布局管理和事件处理是这...
学生提问:既然内部类是外部类的成员,是否可以为外部类定义子类,在子类中再定义一个内部类来重写其父类中的内部类? 211 6.7.4 局部内部类 211 6.7.5 匿名内部类 212 6.7.6 闭包(Closure)和回调 215 6.8 ...
构造器的名字必须与类名相同,但是一个类可以有多个构造器,只要它们具有不同的参数列表即可。 4. **Java访问数据库的包** - 选项:(A) java.sql (B) java.awt (C) java.lang (D) java.swing - 正确答案:A - **...
101 6.3.2 成员变量的初始化 102 6.4 局部变量 105 6.4.1 局部变量的创建和初始化 105 6.4.2 局部变量和成员变量的区别 106 6.5 方法 106 6.5.1 方法的创建和参数 106 6.5.2 方法参数的传递 108 6.6 对象引用的使用 ...
3. **第4章 方法 函数**:讲解函数的定义、调用以及参数传递。 4. **第5章 数组**:介绍一维和多维数组的使用。 5. **第6章 类和对象**:核心的面向对象概念,如类的定义、对象的创建、封装和继承。 6. **第7章 ...
- 方法:了解方法的定义、参数传递、返回值等概念。 2. **第4章 Java面向对象的程序设计(一)**: - 类与对象:理解类的定义、对象的创建以及封装的概念。 - 构造器:用于对象初始化的特殊方法。 - 继承:实现...