0. Spring Container的整体结构
主要内容:
1. Spring配置导入属性文件
2. Spring整合JDBC处理数据库业务
3. 使用JDBCTemplate组件简化数据操作
1. Spring配置导入属性文件
方法1:
方法2:(推荐使用)
2. Spring整合JDBC处理数据库业务
- 配置数据源
- 配置数据库事务管理对象并注入被管理的数据源
- 配置jdbcTemplate模板并注入数据源
- 配置事务处理属性通知并管理事务管理对象
- 配置事务拦截切入点关联事务处理通知
我这里的例子使用的是mysql数据库
1)配置数据源
配置apacheDBCP数据源
2)配置数据库数据管理组件
配置JDBC事务管理组件管理数据库事务,并注入依赖的数据源
3)配置JDBCTemplate模板
JDBCTemplate模板组件提供了简化数据增删改查操作的有用方法
4)配置事务属性通知
事务属性描述了如何处理事务操作,通常使用
5)配置事务拦截接入点关联事务属性
事务AOP拦截设置描述哪些url下的哪些组件哪些方法被切入并应用数据库事务处理。
3. 使用JDBCTemplate组件简化数据操作
JdbcTemplate是Spring框架提供的执行数据库操作的组件,通常在DAO组件类中注入JdbcTemplate组件对象利用其提供的相关方法实现简化数据操作的业务。
3.1 JDBCTemplate常用方法
使用的时候可以去查询官方的API
1) 常用更新方法
- int update(String sql) 执行给定的sql语句返回被影响数据库表行数结果
- int update(String sql, Object args) 执行给定的sql语句并使用args作为sql参数返回被影响数据库行数结果
示例:
@Autowired
private BasicDataSource ds; //自动依赖注入
@Resource(name = "jdbcTemplate")
private JdbcTemplate jt; //按名称查找
@Override
public void addStudent(Student student) throws Exception {
System.out.println("添加用户到数据库");
String sql = "insert into student (name, sex, address) value (?,?,?)";
jt.update(sql,student.getName(), student.getSex(), student.getAddress());
}
2) 常用的查询方法
- void query(String sql, RowCallbackHandler rch)
- T query(String sql, ResultSetExtractor
rse) - List
query(String sql, RowMapper rm) - T queryForObject(String sql, Class
cls) - Map queryForMap(String sql)
- List
下面举几个查询方法的例子
首先必不可少的要在数据库要建立相应的表,然后建立相应的实体类,然后来实践一下查询方法~
- List
query(String sql, RowMapper rm)
public List queryDepList() throws Exception {
String sql = "select id, name, code, newDate, descs from department";
List depList = null;
depList = jt.query(sql, new RowMapper() {
@Override
public Department mapRow(ResultSet resultSet, int i) throws SQLException {
Department department = new Department();
department.setId(resultSet.getString("id"));
department.setName(resultSet.getString("name"));
department.setCode(resultSet.getString("code"));
department.setNewDate(resultSet.getDate("newDate"));
department.setDescs(resultSet.getString("descs"));
return department;
}
});
return depList;
}
如果没有建立实体类的话,可以用Map进行匹配
- List
public List
- List
query(String sql, Class cls)
public List queryEmpList() throws Exception {
String sql = "select * from emp";
List empList = new ArrayList<>();
empList = jt.query(sql, new BeanPropertyRowMapper<>(Employee.class));
return empList;
}
- T queryForObject(String sql, Class
cls)
public Employee findEmpById(String id) throws Exception {
String sql = "select id,name, gender, birth, address, " +
"phone,email from emp where id = '" + id + "' ";
Employee employee = jt.queryForObject(sql, new BeanPropertyRowMapper<>(Employee.class));
return employee;
}