1、配置NamedParameterJdbcTemplete,该对象可以使用具名参数,其没有无参的构造器,所以必须为其构造器指定参数
在xml文件中要加入
可以为参数起名字:
1、如果有多个参数,便于维护,不用再去对应位置直接对应参数名字就好
public void testNamedParameterJdbcTemplate()
{
String sql="insert into employee(id,name,sex,dept_id) values(:npjtid,:npjtname,:npjtsex,:npjtsept_id)";
Map<String,Object> paramMap=new HashMap<>();
paramMap.put("npjtid",10);
paramMap.put("npjtname","李小龙");
paramMap.put("npjtsex","男");
paramMap.put("npjtsept_id",1);
namedParameterJdbcTemplate.update(sql, paramMap);
}
使用具名参数时,可以使用update(String sql,SqlParameterSource paramSourse)方法
更新操作、
1、SQL语句中的参数名和类中的属性一致、
2、使用SqlParameterSource 的BeanPropertySqlParameterSource实现类作为参数
public void testNamedParameterJdbcTemplate2()
{
String sql="insert into employee(id,name,sex,dept_id) "
+ "values(:id,:name,:sex,:dept_id)";
Employee employee=new Employee();
employee.setId(11);
employee.setName("未");
employee.setSex("男");
employee.setDept_id(2);
SqlParameterSource paramSource=new BeanPropertySqlParameterSource(employee);
namedParameterJdbcTemplate.update(sql, paramSource);
}
下面补充不使用具名参数的情况:
在不使用具名参数的时候我们要在我们的xml文件中加入这一个bean标签
我将他叫做jdbc模板
<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
<property name="dataSource" ref="dataSource"></property>
</bean>
@Repository
public class UserDao {
@Autowired
private JdbcTemplate jdbcTemplate;
@Autowired
private NamedParameterJdbcTemplate npjTemplate;
//在Dao中我们声明出来一个jdbc模板
public void insertUserInfo(SysUser su) {
String sql = "insert into t_sys_user (user_name, passwd, salt, real_name, avatar, phone, "
+ "email, gender, create_time) values (?, ?, ?, ?, ?, ?, ?, ?, now())";
jdbcTemplate.update(sql, su.getUserName(), su.getPasswd(), su.getSalt(), su.getRealName(),
su.getAvatar(), su.getPhone(), su.getEmail(), su.getGender());
}
//上面就是不适用具名参数来进行值的注入,他将会受我们的?的顺序影响
public void insertUserInfoByNJP(SysUser su) {
String sql = "insert into t_sys_user (user_name, passwd, salt, real_name, avatar, phone, "
+ "email, gender, create_time) values (:userName, :passwd, :salt, :realName, :avatar, :phone, :email, :gender, now())";
//上面我们使用的是具名参数的形式来进行数据的插入
//我们相当是给我们的插入数据进行了重新命名,命名之后我们我们就能够根据我们命名来进行
//数据的插入
//在map中将我们的命名和值进行对应,之后就是调用update进行更新操作
Map<String, Object> paramMap = new HashMap<String, Object>();
paramMap.put("userName", su.getUserName());
paramMap.put("passwd", su.getPasswd());
paramMap.put("salt", su.getSalt());
paramMap.put("realName", su.getRealName());
paramMap.put("avatar", su.getAvatar());
paramMap.put("phone", su.getPhone());
paramMap.put("email", su.getEmail());
paramMap.put("gender", su.getGender());
npjTemplate.update(sql, paramMap);
}
public SysUser getUserById(int userId) {
String sql = "select * from t_sys_user where user_id = ?";
return jdbcTemplate.query(sql, new Object[] {userId}, new BeanPropertyRowMapper<SysUser>(SysUser.class)).get(0);
//不使用具名参数的形式来进行查询
//注意返回的类型是一个类类型和其他的不一样
}
public void payByCard() {
// Class.forName("");
Connection conn = null;
// conn = DriverManager.getConnection(url, user, password)
Statement stat = conn.createStatement();
conn.setAutoCommit(false);//手动提交数据
// stat.executeUpdate(sql);
// stat.executeUpdate(sql)
if(错误) {
conn.rollback();//回滚函数
conn.commit();//执行函数
}
}
}