一个任意字段查询的通用方法

我们在编写程序时应该尽量提高代码的复用性,力求简洁,并且在简洁的情况下,依然可以完整地实现相应的功能。

在项目练习中,经常需要写操作数据库的方法,比如在实现注册登录业务时,需要查询数据库,并通过返回的结果集判断是否可以注册或登录。不同情况下有不同的查询条件,相应的也就有不同的查询语句。比如注册时,一般用户名不可重复,所以我们需要查询数据库中此用户名是否已存在。如果用户名不存在,即没有查询到结果,才可以注册。

// 查询返回user中所有userName为tom的数据
String sql="select * from user where userName='tom';";

但当登录时,我们不仅要查询用户名是否存在,还要判断密码是否匹配。此时的sql语句应当为:

// 查询返回user中所有userName为tom的数据
String sql="select * from user where userName='tom' and passWord='tom123';";

作为一个初学者,面对这种情况,我们下意识地会想到再写一个方法,实现不同条件的查询,这样很麻烦。
实际的项目中,不只会遇到用户名和密码两种条件的查询。面对不同的查询需要,如果我们写多个方法,其工作量大且效率比较低,代码也比较冗杂。

下面的一个方法可以实现对user对象的任意条件查询。
首先假定我们的User类有如下属性:

    private int id;
    private String userName;
    private String passWord;
    private String sex;
    private int age;

当我们需要查询任意字段时,先创建一个空的对象。再将查询条件作为属性赋给此对象,然后就可以将此对象作为参数传入以下方法进行查询:

public ArrayList<User> getUsers(User user) throws SQLException {
        StringBuffer str=new StringBuffer("select * from user where 1=1");
        if(user.getId()!=0)
            str.append("and id="+user.getId());
        if(user.getUserName()!=null)
            str.append("and userName='"+user.getUserName()+"'");
        if(user.getPassWord()!=null)
            str.append("and passWord='"+user.getPassWord()+"'");
        if(user.getSex()!=null)
            str.append("and sex='"+user.getSex()+"'");
        if(user.getAge()!=0)
            str.append("and age='"+user.getAge()+"'");
        String sql=str.toString();
        System.out.println(sql);
        JDBCTools jt=new JDBCTools();
       ResultSet rs= jt.selectObject(sql);
       if(rs==null)
           return null;
        ArrayList<User> users=new ArrayList();
       while (rs.next())
       {
           int id=rs.getInt("id");
           String userName=rs.getString("userName");
           String passWord=rs.getString("passWord");
           String sex=rs.getString("sex");
           int age=rs.getInt("age");
           User u=new User(id,userName,passWord,sex,age);
           users.add(u);
       }
       return users;
    }

此方法需要的参数为所查询的类的对象。将查询条件封装到对象中,查询后返回的结果为对象集合,再对集合进行具体的处理,以实现不同的业务逻辑。所以这是一个通用的查询方法。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值