`
lkjxshi
  • 浏览: 29179 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

SWING通过中间类传递多参数SQL语句

阅读更多

      重构一书中有说过,一个方法的参数最好不要超过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#开发中不可或缺的一部分,它确保了数据在多窗体...

    java\Java swing 连接数据库的步骤

    以上步骤只是一个基础的数据库连接示例,实际开发中可能需要处理更多的异常情况,优化SQL语句,使用预编译的`PreparedStatement`防止SQL注入,以及考虑事务管理等高级特性。此外,现代的Java开发通常会使用像...

    java 修改员工信息

    例如,可能有一个`updateEmployee()`方法,该方法接收员工ID和新的工资信息作为参数,然后构建并执行一个UPDATE SQL语句,例如: ```java String sql = "UPDATE Employee SET salary = ? WHERE id = ?"; ...

    SWT增删改查

    当用户选择一行进行操作时,程序获取选中行的下标,然后将其作为参数传递给相应的SQL语句。 6. 表格数据显示与编辑: SWT提供了`Table`控件来显示和编辑表格数据。你可以通过`TableItem`来创建和修改表格行,`Table...

    Jtable_同一表格内实现增删改查.rar

    同样,这些更改也应同步到数据库,这可能涉及使用UPDATE SQL语句。 4. **查询(Query)**:查询数据通常涉及从数据库加载数据到JTable。你需要使用JDBC连接到MySQL 8.0数据库,执行SELECT语句获取数据,然后将结果...

    推荐课程 完整版优质java教程 java精品教学课件 Java语言程序设计 第6章 类和对象(共50页).ppt

    这一章将介绍如何使用JDBC(Java Database Connectivity)连接数据库,执行SQL语句,以及处理结果集。 ## 第16章 网络编程 最后,我们将学习Java的网络编程,包括套接字通信、URL处理和HTTP客户端编程。 通过这个...

    java范例大全

    - PreparedStatement:预编译SQL语句,防止SQL注入。 - ResultSet:处理查询结果。 10. **Java库与框架**: - Swing和JavaFX:构建图形用户界面(GUI)。 - JUnit:单元测试框架。 - Spring:依赖注入、AOP、...

    java编程新手自学手册源代码

    源代码会包含如何连接数据库,执行SQL语句,处理结果集等基本的数据库操作。 九、Java Swing与GUI编程 通过Swing库创建图形用户界面,学习组件的使用、布局管理、事件监听等。 十、Java的高级特性 可能涉及反射、...

    2021-2022计算机二级等级考试试题及答案No.16045.docx

    9. 存储过程的特性:存储过程可以带有参数,并且可以包含各种SQL语句,包括数据更新语句,但不局限于更新,也可以有返回值。 10. 关系模型操作:从关系模型中选择部分属性形成新的关系称为投影。 11. 段落选择:在...

    Java类库 java中常用的类 可以参考

    // 通过创建字符数组传递给 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...

    java导学书中源代码

    学习如何使用JDBC API连接数据库,执行SQL语句,处理结果集。 十、泛型 源代码中会展示泛型类、泛型方法的使用,提高代码类型安全性和可读性。 十一、IO流与NIO 对比传统IO和NIO(New IO)的使用,理解缓冲通道、...

    j本科院校java上课课件

    4. 方法:方法是代码的重用单元,用于实现特定功能,通过方法参数传递数据。 二、面向对象编程 1. 类与对象:Java是面向对象的语言,类是对象的蓝图,对象是类的实例。 2. 继承:Java支持单继承和多层继承,通过...

    java 完美仿qq 源码

    - JDBC(Java Database Connectivity):JavaDB的访问通过JDBC API实现,允许Java应用程序连接到数据库并执行SQL语句。 5. **项目结构与部署** - 项目的结构可能包括了源代码文件、资源文件、配置文件以及数据库...

    javajava基础基础

    PreparedStatement 提供预编译的 SQL 语句,适用于多次执行相同 SQL 的场景,提高了效率并减少了 SQL 注入风险。 2. Java 与数据库的连接方式主要有 JDBC-ODBC 桥接和直接使用数据库提供的 JDBC 驱动。Statement 和...

    java入门 应用程序实例

    了解如何加载驱动、建立连接、执行SQL语句和处理结果集是必要的。 10. **Swing和JavaFX图形用户界面**:对于开发桌面应用,Java提供了Swing和JavaFX库来创建丰富的用户界面。学习组件使用、布局管理和事件处理是这...

    疯狂JAVA讲义

    学生提问:既然内部类是外部类的成员,是否可以为外部类定义子类,在子类中再定义一个内部类来重写其父类中的内部类? 211 6.7.4 局部内部类 211 6.7.5 匿名内部类 212 6.7.6 闭包(Closure)和回调 215 6.8 ...

    java面试题

    构造器的名字必须与类名相同,但是一个类可以有多个构造器,只要它们具有不同的参数列表即可。 4. **Java访问数据库的包** - 选项:(A) java.sql (B) java.awt (C) java.lang (D) java.swing - 正确答案:A - **...

    21天学通Java-由浅入深

    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 对象引用的使用 ...

    推荐课程 完整版优质java教程 java精品教学课件 Java语言程序设计 第3章 流程控制(共41页).ppt

    3. **第4章 方法 函数**:讲解函数的定义、调用以及参数传递。 4. **第5章 数组**:介绍一维和多维数组的使用。 5. **第6章 类和对象**:核心的面向对象概念,如类的定义、对象的创建、封装和继承。 6. **第7章 ...

    java课件java课件

    - 方法:了解方法的定义、参数传递、返回值等概念。 2. **第4章 Java面向对象的程序设计(一)**: - 类与对象:理解类的定义、对象的创建以及封装的概念。 - 构造器:用于对象初始化的特殊方法。 - 继承:实现...

Global site tag (gtag.js) - Google Analytics