为啥spring 要开发这个 NamedParameterJdbcTemplate 他解决了在可变参数中的匹配不正确 在参数列表中 ? 对应的索引号 如果出现了新增参数改变起来很不方便而且还容易处错误这就是它的由来
下面看看它如何使用的 并体会下
import org.junit.Before;
import org.junit.Test;
import org.springframework.jdbc.core.namedparam.BeanPropertySqlParameterSource;
import org.springframework.jdbc.core.namedparam.MapSqlParameterSource;
import org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate;
import org.springframework.jdbc.core.namedparam.SqlParameterSource;
import org.springframework.jdbc.datasource.DriverManagerDataSource;
public class SJTest2 {
NamedParameterJdbcTemplate nam = null;
@Before
public void init() {
DriverManagerDataSource ds = new DriverManagerDataSource();
ds.setDriverClassName("com.mysql.jdbc.Driver");
ds.setUrl("jdbc:mysql://127.0.0.1:3306/test");
ds.setUsername("root");
ds.setPassword(""); // 我的数据库没有密码
nam = new NamedParameterJdbcTemplate(ds);
}
/**
* 这种 " : " 用法在 hibernate 里面也有提供。
*/
@Test
public void insert() {
Student stu = new Student();
stu.setSid(19);
stu.setAge("100");
String sql = "insert into student(sid,age) values(:sid,:age)";
SqlParameterSource sps = new BeanPropertySqlParameterSource(stu);
nam.update(sql, sps);
}
@Test
public void insert2() {
Student stu = new Student();
stu.setAge("200");
stu.setSid(20);
// . . 这种是一种简单的链式编程内部返回自身
String sql = "insert into student(sid,age) values(:sid,:age)";
MapSqlParameterSource sps = new MapSqlParameterSource().addValue("sid", stu.getSid())
.addValue("age", stu.getAge());
nam.update(sql, sps);
}
class Student {
private long sid;
private String age;
public String getAge() {
return age;
}
public void setAge(String age) {
this.age = age;
}
public long getSid() {
return sid;
}
public void setSid(long sid) {
this.sid = sid;
}
@Override
public String toString() {
return "Student [sid=" + sid + ", age=" + age + "]";
}
}
}