上一篇讲了怎样生成一个sql中where的一部分,之后我们要做事情就简单很多了,就只要像最开始一样的生成各种sql语句就好了,之后只要再加上我们需要的条件,一个完整的sql就顺利的做好了。
现在我们开始写生成查询语句的sql。一个查询语句大致上是这样的:
SELECT name, id, create_date, age, mark, status FROM user
这里可以看出来,一个基础的查询语句基本上就是一个 SELECT 后面加上需要查询的字段,跟上 FROM 和要查询的表名称就好了。 最多后面可能需要加上 ORDER BY/GROUP BY/LIMIT ….之类的就好了,因为比较简单,这里就不写了。(太复杂的就直接写sql就好了,我自己不需要这种操作)
这几步都还是比较好做的,第一步很简单,仿照着之前写的就可以了。因为这里在执行sql的时候,我使用的是JdbcTemplate,这里有一个不大不小的坑,下面我说一下。
这个坑是我在使用我写好的这个项目给公司做报表的时候碰到的。原因是这样,因为数据库中有些字段是datetime类型的,这个字段有时候在表中的值是:0000-00-00 00:00:00,(我也不知道这个值是怎么进去的,但是就是存在/(ㄒoㄒ)/~~)但是这个值是无法转换成为java中的Date类型。所以这里会报错。
我在这里写了一个继承SpringJdbc中的ColumnMapRowMapper的类,是这样的:
import org.springframework.jdbc.core.ColumnMapRowMapper;
import java.sql.ResultSet;
import java.sql.SQLException;
/**
* 捕获取值的错误
*
* @author hjx
*/
public class PlusColumnMapRowMapper extends ColumnMapRowMapper {
/**
* 数据库类型为时间时, 如果值为 0000-00-00 00:00:00
* 会报错,所以重写此方法,返回null
*
* @param rs
* @param index
* @return
* @throws SQLException
*/
@Override
protected Object getColumnValue(ResultSet rs, int index) throws SQLException {
Object columnValue = null;
try {
columnValue = super.getColumnValue(rs, index);
} catch (SQLException e) {
e.printStackTrace();
}
return columnValue;
}
}
这个类具体在哪里使用,会在下面说明。
现在说一下怎么实现上面的思路,首先因为第一步比较简单,就不写了。我直接从第二步开始。
如果查询需要添加条件的话,可以使用之前讲的 生成条件的工具将条件的sql拼接在这里的sql后面,相应的,where里的参数也要按照顺序添加进数组就好了。
相同的,如果要添加 ORDER BY/GROUP BY/LIMIT这些东西的话也是一样的操作。主要还是要看自己的代码是怎么设计的了。我自己用的只写了ORDER BY 和 LIMIT 。可以在我的github上找到。地址在这里:https://github.com/hjx601496320/JdbcPlus 。