Spring数据库访问(HSQL)(三)
本文接上一篇继续研究JDBC模板。
之前说的都是插入操作,在我们使用自增主键的时候有时我们想立刻获得数据库为我们生成的主键值,那么jdbcTemplate是支持这个操作的,只是写起来麻烦一些,可以这么来做:
JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);KeyHolder keyHolder = new GeneratedKeyHolder();jdbcTemplate.update(new PreparedStatementCreator() {public PreparedStatement createPreparedStatement(Connection conn)throws SQLException {String sql = "insert into vehicle(PLATE,CHASSIS,COLOR,WHEEL,SEAT) values(?,?,?,?,?)";PreparedStatement pstat = conn.prepareStatement(sql);pstat.setString(1, vehicle.getPlate());pstat.setString(2, vehicle.getChassis());pstat.setString(3, vehicle.getColor());pstat.setInt(4, vehicle.getWheel());pstat.setInt(5, vehicle.getSeat());return pstat;}}, keyHolder);System.out.println("PK: " + keyHolder.getKey().intValue());JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);String sql = "insert into vehicle(PLATE,CHASSIS,COLOR,WHEEL,SEAT) values(?,?,?,?,?)";jdbcTemplate.update(sql, vehicle.getPlate(), vehicle.getChassis(),vehicle.getColor(), vehicle.getWheel(), vehicle.getSeat());int id = jdbcTemplate.queryForInt("CALL IDENTITY()");System.out.println("PK: " + id);public void insertBatch(final List<Vehicle> vehicles) {String sql = "insert into vehicle(PLATE,CHASSIS,COLOR,WHEEL,SEAT) values(?,?,?,?,?)";JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);jdbcTemplate.batchUpdate(sql, new BatchPreparedStatementSetter() {public void setValues(PreparedStatement pstat, int i)throws SQLException {Vehicle vehicle = vehicles.get(i);pstat.setString(1, vehicle.getPlate());pstat.setString(2, vehicle.getChassis());pstat.setString(3, vehicle.getColor());pstat.setInt(4, vehicle.getWheel());pstat.setInt(5, vehicle.getSeat());}public int getBatchSize() {return vehicles.size();}});}public static void main(String[] args) {ApplicationContext ctx = new ClassPathXmlApplicationContext("classpath:org/ourpioneer/vehicle/spring/applicationContext.xml");VehicleDAO vehicleDAO = (VehicleDAO) ctx.getBean("vehicleDAO");Vehicle vehicle1 = new Vehicle("辽B-000000", "1A00000001", "RED", 4, 4);Vehicle vehicle2 = new Vehicle("辽B-000001", "1A00000002", "RED", 4, 4);vehicleDAO.insertBatch(Arrays.asList(new Vehicle[] { vehicle1, vehicle2 }));}public Vehicle findById(int id) {String sql = "select * from vehicle where ID=?";JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);final Vehicle vehicle = new Vehicle();jdbcTemplate.query(sql, new Object[] { id }, new RowCallbackHandler() {public void processRow(ResultSet rs) throws SQLException {vehicle.setId(rs.getInt("ID"));vehicle.setPlate(rs.getString("PLATE"));vehicle.setChassis(rs.getString("CHASSIS"));vehicle.setColor(rs.getString("COLOR"));vehicle.setWheel(rs.getInt("WHEEL"));vehicle.setSeat(rs.getInt("SEAT"));}});return vehicle;}package org.ourpioneer.vehicle.jt;import java.sql.ResultSet;import java.sql.SQLException;import org.ourpioneer.vehicle.bean.Vehicle;import org.springframework.jdbc.core.RowMapper;public class VehicleRowMapper implements RowMapper<Vehicle> {public Vehicle mapRow(ResultSet rs, int rowNum) throws SQLException {Vehicle vehicle = new Vehicle();vehicle.setId(rs.getInt("ID"));vehicle.setPlate(rs.getString("PLATE"));vehicle.setChassis(rs.getString("CHASSIS"));vehicle.setColor(rs.getString("COLOR"));vehicle.setWheel(rs.getInt("WHEEL"));vehicle.setSeat(rs.getInt("SEAT"));return vehicle;}}public Vehicle findById(int id) {String sql = "select * from vehicle where ID=?";JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);Vehicle vehicle = (Vehicle) jdbcTemplate.queryForObject(sql,new Object[] { id }, new VehicleRowMapper());return vehicle;}public Vehicle findById(int id) {String sql = "select * from vehicle where ID=?";JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);BeanPropertyRowMapper<Vehicle> vehicleRowMapper=BeanPropertyRowMapper.newInstance(Vehicle.class);Vehicle vehicle=jdbcTemplate.queryForObject(sql, vehicleRowMapper, id);return vehicle;}public List<Vehicle> findAll() {String sql = "select * from vehicle";JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);List<Vehicle> vehicles = new ArrayList<Vehicle>();List<Map<String, Object>> rows = jdbcTemplate.queryForList(sql);for (Map<String, Object> row : rows) {Vehicle vehicle = new Vehicle();vehicle.setId((Integer) row.get("ID"));vehicle.setPlate((String) row.get("PLATE"));vehicle.setChassis((String) row.get("CHASSIS"));vehicle.setColor((String) row.get("COLOR"));vehicle.setWheel((Integer) row.get("WHEEL"));vehicle.setSeat((Integer) row.get("SEAT"));vehicles.add(vehicle);}return vehicles;}public static void main(String[] args) {ApplicationContext ctx = new ClassPathXmlApplicationContext("classpath:org/ourpioneer/vehicle/spring/applicationContext.xml");VehicleDAO vehicleDAO = (VehicleDAO) ctx.getBean("vehicleDAO");List<Vehicle> vehicles = vehicleDAO.findAll();for (Vehicle vehicle : vehicles) {System.out.println(vehicle);}}public List<Vehicle> findAll() {String sql = "select * from vehicle";JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);RowMapper<Vehicle> rows=BeanPropertyRowMapper.newInstance(Vehicle.class);List<Vehicle> vehicles=jdbcTemplate.query(sql, rows);return vehicles;}public String getChassis(int id) {String sql = "select COLOR from vehicle where ID=?";JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);String color = (String) jdbcTemplate.queryForObject(sql,new Object[] { id }, String.class);return color;}public int countVehicle() {String sql = "select count(*) from vehicle";JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);int count = jdbcTemplate.queryForInt(sql);return count;}public static void main(String[] args) {ApplicationContext ctx = new ClassPathXmlApplicationContext("classpath:org/ourpioneer/vehicle/spring/applicationContext.xml");VehicleDAO vehicleDAO = (VehicleDAO) ctx.getBean("vehicleDAO");int count = vehicleDAO.countVehicle();System.out.println("Vehicle Count: " + count);String chassis = vehicleDAO.getChassis(1);System.out.println("Chassis For No.1: " + chassis);}