Bootstrap

Spring jdbc

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();//执行函数
		}
	}
}


;