以前一直用hibernateTemplate的,今天看了看spring的jdbcTemplate。
jdbcTemplate就是一个封装了jdbc的模板,直接使用JdbcTemplate很简单,它只依赖于数据源。它的配置就不多说了,文档写的很详细,主要讲讲它的一些常用的方法。
查询数据:RowCallbackHandler
public void query(String sql, RowCallbackHandler rch)
public void query(String sql,Object[] args,RowCallbackHandler rch)
下面是实现
public List<Advertisement> getAllByContractId(int id)
throws DataAccessException {
String sql = "select * from advertisement where contractid=" + id + " Order by id";
List<Advertisement> list = new ArrayList<Advertisement>();
getJdbcTemplate().query(sql, new AdvertisementRowCallbackHandler(list));
return list;
}
public class AdvertisementRowCallbackHandler implements RowCallbackHandler{
private List<Advertisement> setList=null;
public AdvertisementRowCallbackHandler(List<Advertisement> setList){
this.setList = setList;
}
public void processRow(ResultSet rs) throws SQLException{
Advertisement model=new Advertisement();
model.setId(rs.getInt("ID"));
model.setContractid(rs.getInt("CONTRACTID"));
model.setName(rs.getString("NAME"));
model.setIntervalType(rs.getString("INTERVAL_TYPE"));
model.setPlayUnit(rs.getString("PLAY_UNIT"));
model.setUnDecideLen(rs.getInt("UN_DECIDE_LEN"));
model.setAgentCompanyName(rs.getString("AGENT_ADCOMPANY_NAME"));
model.setNodeGroupNum(rs.getInt("NODEGROUP_NUM"));
model.setReleaseDays(rs.getInt("RELEASE_DAYS"));
setList.add(model);
}
}
查询数据:RowMapper
RowMapper的好处是,自动封装了List,并自动返回,无需自己添加List和把元素添加到List中。
RowMapper可以将数据中的每一行封装成用户定义的类,在数据库查询中,如果返回的类型是用户自定义的类型则需要包装,如果是Java自定义的类型,如:String则不需要
public List<Actor> findAllActors() {
return this.jdbcTemplate.query( "select first_name, last_name from t_actor", new ActorMapper());
}
private static final class ActorMapper implements RowMapper<Actor> {
public Actor mapRow(ResultSet rs, int rowNum) throws SQLException {
Actor actor = new Actor();
actor.setFirstName(rs.getString("first_name"));
actor.setLastName(rs.getString("last_name"));
return actor;
}
}
update:
public int update(String sql,Object[] args)
public int update(String sql,Object[] args,int[] argTypes)
public int update(String sql,PreparedStatementSetter pss)
主要讲讲第3个方法
String sql = "insert into t_forum(forum_name,forum_desc) values(?,?)";
getJdbcTemplate().update(sql, new PreparedStatementSetter(){
public void setValues(PreparedStatement ps) throws SQLException{
ps.setString(1, forum.getForumName());
ps.setString(2, forum.getForumDesc());
}
});
jdbcTemplate就是一个封装了jdbc的模板,直接使用JdbcTemplate很简单,它只依赖于数据源。它的配置就不多说了,文档写的很详细,主要讲讲它的一些常用的方法。
查询数据:RowCallbackHandler
public void query(String sql, RowCallbackHandler rch)
public void query(String sql,Object[] args,RowCallbackHandler rch)
下面是实现
public List<Advertisement> getAllByContractId(int id)
throws DataAccessException {
String sql = "select * from advertisement where contractid=" + id + " Order by id";
List<Advertisement> list = new ArrayList<Advertisement>();
getJdbcTemplate().query(sql, new AdvertisementRowCallbackHandler(list));
return list;
}
public class AdvertisementRowCallbackHandler implements RowCallbackHandler{
private List<Advertisement> setList=null;
public AdvertisementRowCallbackHandler(List<Advertisement> setList){
this.setList = setList;
}
public void processRow(ResultSet rs) throws SQLException{
Advertisement model=new Advertisement();
model.setId(rs.getInt("ID"));
model.setContractid(rs.getInt("CONTRACTID"));
model.setName(rs.getString("NAME"));
model.setIntervalType(rs.getString("INTERVAL_TYPE"));
model.setPlayUnit(rs.getString("PLAY_UNIT"));
model.setUnDecideLen(rs.getInt("UN_DECIDE_LEN"));
model.setAgentCompanyName(rs.getString("AGENT_ADCOMPANY_NAME"));
model.setNodeGroupNum(rs.getInt("NODEGROUP_NUM"));
model.setReleaseDays(rs.getInt("RELEASE_DAYS"));
setList.add(model);
}
}
查询数据:RowMapper
RowMapper的好处是,自动封装了List,并自动返回,无需自己添加List和把元素添加到List中。
RowMapper可以将数据中的每一行封装成用户定义的类,在数据库查询中,如果返回的类型是用户自定义的类型则需要包装,如果是Java自定义的类型,如:String则不需要
public List<Actor> findAllActors() {
return this.jdbcTemplate.query( "select first_name, last_name from t_actor", new ActorMapper());
}
private static final class ActorMapper implements RowMapper<Actor> {
public Actor mapRow(ResultSet rs, int rowNum) throws SQLException {
Actor actor = new Actor();
actor.setFirstName(rs.getString("first_name"));
actor.setLastName(rs.getString("last_name"));
return actor;
}
}
update:
public int update(String sql,Object[] args)
public int update(String sql,Object[] args,int[] argTypes)
public int update(String sql,PreparedStatementSetter pss)
主要讲讲第3个方法
String sql = "insert into t_forum(forum_name,forum_desc) values(?,?)";
getJdbcTemplate().update(sql, new PreparedStatementSetter(){
public void setValues(PreparedStatement ps) throws SQLException{
ps.setString(1, forum.getForumName());
ps.setString(2, forum.getForumDesc());
}
});