本次总结的查询十分灵活,下面来看看吧。
假设我们的字段有
id | name | sex | age | remark | |
编号 | 姓名 | 性别 | 年龄 | 个性 |
我们在实际生活中查询是很随意的,想要根据id来查,非常好操作,如果我记不住id,想要根据name or sex or age or remark来查,就是本篇文章要讲的重点了。
我们首先观察mysql的查询语句,select * from user where xx=? and .....
这样的语句我们可以根据修改xx=?这里来做文章。
用一个HashMap作映射,我们可以写一个如下的方法------>>
一个技巧 where 1=1 代表永真,注意一个细节,字符串要用' '
//按照任意的参数查询
public List<Roomate> query(List<Map<String,Object> >params) throws SQLException {
//申请一个List
List<Roomate> L = new ArrayList<Roomate>();
//申请一个Roomate对象
Roomate r = new Roomate();
//获得mysql连接
con = DBUtil.getCon();
StringBuilder sb = new StringBuilder();
//1=1永真 这里记住这个技巧
sb.append("select * from user where 1=1 ");
Map<String,Object> map;
if(params!=null && params.size()>0){
for (int i = 0; i <params.size() ; i++) {
map = params.get(i);
sb.append(" and "+map.get("name")+map.get("rela")+map.get("value"));
}
}
PreparedStatement stmt = con.prepareStatement(sb.toString());
ResultSet rs = stmt.executeQuery();
while(rs.next()) {
r = new Roomate();
r.setId(rs.getInt("id"));
r.setAge(rs.getInt("age"));
r.setSex(rs.getString("sex"));
r.setName(rs.getString("name"));
r.setRemark(rs.getString("remark"));
L.add(r);
}
return L;
}
查询的时候--->>
Map<String,Object> map = new HashMap<>();
List<Map<String,Object> > L = new ArrayList<>();
map.put("name","name");
map.put("rela","=");
//注意名字要用''
map.put("value","'XXX'");
L.add(map);
List<Roomate> query = r.query(L);
for (Roomate rs: query) {
System.out.println("id:" + rs.getId() + "\tname: " + rs.getName() + "\tsex: " +
rs.getSex() + "\tage: " + rs.getAge() + "\tremark: " + rs.getRemark());
}
有的时候我们可能记不住全部信息,那么可以实现模糊查找,即根据关键字查询----->>
Map<String,Object> map = new HashMap<>();
List<Map<String,Object> > L = new ArrayList<>();
map.put("name","name");
map.put("rela","like");
//注意名字要用''
//%XXX%是通配符
map.put("value","'%XXX%'");
L.add(map);
List<Roomate> query = r.query(L);
for (Roomate rs: query) {
System.out.println("id:" + rs.getId() + "\tname: " + rs.getName() + "\tsex: " +
rs.getSex() + "\tage: " + rs.getAge() + "\tremark: " + rs.getRemark());
}