JdbcTemplate jdbc = new JdbcTemplate(JdbcUtils.getDataSourec()); //需要传递一个数据源给他,这个东西是线程安全的。。。所以可以用static来搞 String sql = "select id,name,money,birthday from user where name = ?"; Object[] args = new Object[]{name}; Object user = jdbc.queryForObject(sql,args, new RowMapper(){ public Object mapRow(ResultSet rs ,int rowNum)throws SQLException { User user = new User(); user.setId(rs.getInt("id")); user.setName(rs.getString("name")); user.setMoney(rs.getFloat("money")); user.setBirthday(rs.getDate("birthday")); return user; } }); return user; //上面的代码还是太繁琐了。。。spring 一定能通过反射把我们需要的东西给装起来 Object user = jdbc.queryForObject(sql ,args,new BeanPropertyRowMapper(User.class)); //这个东西牛就牛在他可以对数据库得命名规范进行转化,也就是说你的sql里面的查询字段不需要和bean的属性完全一致。。。如果数据库里面没有这条查询记录或者查询记录不止一个,那么这个屁玩意会报错的 注意:如果字段对不上的话,我们要使用别名哦。。。 如果我的sql里面有的属性,那么你的java类里面必须有,要不然会报错的,换句话说就是容器要足够大 List users = jdbc.query(sql,args,new BeanPropertyRowMapper(User.class)); //直接调用query是返回list,爽 return users; //下面我们使用一个和这个差不多的。。。不过是泛型 SimpleJdbcTemplate simple = new SimpleJdbcTemplate(JdbcUtils.getDataSource()); String sql = "delete from user where id = ?"; simple.update(sql,user.getId()); String sql = "select id,name,money,birthday from user where name=? and money = ?"; User user = simple.queryForObject(sql,ParameterizedBeanPropertyRowMapper.newInstance(User.class),name,100f); return user; SimpleJdbcTemplate 里面包了一个NamedParameterJdbcTemplelate,而 NamedParameterJdbcTemplelate里面又有一个 JdbcTemplelate 所以我们可以这样: simple.getNamedParameterJdbcOperations(); //得到NamedParameterJdbcTemplelate simple.getJdbcOperations();//得到JdbcTemplelate 这个里面没有String这种类型。。怎么办 String sql = "select name from user where id = 3"; Object name = jdbc.queryForObject(sql,String.class); return (String)name; //如果你认为这还不够灵活,那么下面的方法,spring将Connection创建后的所有事情都交给你去做了 jdbc.execute(new ConnectionCallback(){ public Object doInConnection(Connection con)throws Exception{ String sql = "" PreparedStatement ps = con...... ps.executeUpdate(); .... ResultSet rs = ps.getGeneratedKeys(); if(rs.next())user.setId(rs.getInt(1)); return null; } }); //比如这里可以拿到你的主键。。 jdbc.execute(String sql) ;这个是没有饭后值的,一般用来执行创建表删除表之类的操作 jdbc.execute(String ,PreparedStatementCallback); 下面介绍NamedParameterJdbcTemplate 他是对JdbcTemplate的封装哈 String sql = "select id ,name,money,birthday from user where name =:n and money>:m and id<:id"; Map params = new HashMap(); params.put("n",user.getName()); params.put("m",user.getMoney()); params.put("id",user.getId()); Object u = named.queryForObject(sql,params,new BeanPropertyRowMapper(User.class)); return (User)u; 如果属性名和命名是一样的 ,如 money>:money,那么我们还可以简化 SqlParameterSource 注意:sql 语句的参数的来源这里有两种,可以是map,也可以是Bean String sql = "select id,name,money,birthday from user where money>:money and id<:id"; SqlParameterSource ps = new BeanPropertySqlParameterSource(user); Object u = named.queryForObject(sql,ps,new BeanPropertyRowMapper(User.class)); return (User)u; //这样会把user中的值自动设置到preparedStatement中去,而且返回值也会自动设置到User里面去。。。 他的价值在于直接把一个JavaBean变成了参数 //这次我们要把值保存后,把key拿出来 String sql = "insert into user(name,birthday,money) values(:name,:birthday,:money)"; SqlParameterSource ps = new BeanPropertedKeyHolder(); KeyHolder keyHolder = new GeneratedKeyHolder(); named.update(sql,ps,keyHolder); int id = keyHolder.getKey().intValue(); user.setId(id); 如果是联合主键,那么 Map map = keyHolder.getKeys();