jdbc----spring_jdbc

[code]

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();

[/code]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值