JdbcTemplate类是Spring对JDBC支持库类中的核心类;
JdbcTemplate负责创建和释放资源;执行SQL语句.存储过程.并且通过ResultSet返回数据;
增删改的实现
String sql="update student set stuNo=?,name=?,sex=? where id=?";
Object[] obj=new Object[]{student.getStuNo(),student.getName(),student.getSex(),student.getId()}; //按照了占位符顺序
int result=this.jdbcTemplate.update(sql, obj);
NamedParameterJdbcTemplate:使用具名参数values(:stuNo,:name,:sex);但是要实现SqlParameterSource接口:
SqlParameterSource 单一具名=new BeanPropertySqlParameterSource(stu);
SqlParameterSource[] 批量具名=SqlParameterSourceUtils.createBatch(stu);
批量具名增删改返回结果长度: this.NamedParameterJdbcTemplate.batchUpdate(sql, 批量具名);
单一具名增删改返回结果: this.NamedParameterJdbcTemplate.Update(sql, 单一具名);
查询方法
public Student findStudentById(int id) {
String sql="select * from student where id=?"; //使用hql id:id id是属性*****使用sql id:id id是字段
RowMapper<Student> rowMapper=new BeanPropertyRowMapper<Student>(Student.class); //运用反射机制(Student.class);返回一个student对象
Student student = this.jdbcTemplate.queryForObject(sql, rowMapper, id);
return student;
}
@Override
public List<Student> findAllStudents() { //根据name查询使用findAllStudents(String name)
String sql="select * from student";
RowMapper<Student> rowMapper=new BeanPropertyRowMapper<Student>(Student.class);
List<Student> list=this.jdbcTemplate.query(sql, rowMapper); //根据name查询使用this.jdbcTemplate.query(sql, rowMapper,name);
return list;
bean.xml配置
<!-- 配置数据源DataSource -->
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="com.mysql.jdbc.Driver"></property>
<property name="url" value="jdbc:mysql://localhost:3306/spring?useUnicode=true&characterEncoding=UTF-8&useSSL=false&serverTimezone=UTC"></property>
<property name="username" value="root"></property>
<property name="password" value="123456"></property>
</bean>
<!-- 配置JDBC模板 -->
<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
<property name="dataSource" ref="dataSource"></property>
</bean>
事务
SQL要么全部执行成功,要么撤销不执行
事务的描述(ACID)
- 原子性(Atomic)
- 原子性保证事务中的所有操作要么都发生,要么都不发生。
- 一致性(Consistent)
- 一旦事务结束了(不管是否成功),系统所处的状态和业务规则是一致的,不会被破坏一致性;
- 隔离性(Isolated)
- 一名用户的操作不会与其他用户的操作向混淆;
- 持久化(Durable)
- 一旦事务完成,结果持久化不被破坏;