spring和jdbctemplate
1.spring与jdbc整合应用
a。增删改
-获取connection
-获取statement
-设置sql中?参数
-执行sql操作
-释放connection
b。查询
-获取connection
-获取statement
-设置sql中?参数
-执行sql操作获取resultset结果
-将resultset结果封装成实体对象
-释放connection
1.spring提供了JdbcTemplate,编写DAO的工具类
a。jdbcTemplate.update("insert。。。。。",参数);
b。提供了aop事务管理(不需要再方法中追加事务提交和回滚)
c。提供了统一的异常处理DataAccessException
2.spring整合jdbc步骤
a。引入spring(ioc,aop,dao),数据库驱动,添加src/applicationContext.xml
b.编写实体类
c。编写DAO
d.在applicationContext.xml中扫描EmpDAO,注入JdbcTemplate对象
dbcp注入jdbctemplate,jdbctemplate注入empdao。
dbcp和jdbctemplate用的(xml的bean定义),empdao用的自动扫描。
例子:
spring.xml:
<!-- 开启自动扫描,扫描DAO -->
<context:component-scan base-package="org.alexhe"></context:component-scan>
<!-- 定义JdbcTemplate -->
<bean id="template" class="org.springframework.jdbc.core.JdbcTemplate">
<!-- 注入连接信息 -->
<property name="dataSource" ref="dbcp"></property>
</bean>
<bean id="dbcp" class="org.apache.commons.dbcp.BasicDataSource">
<property name="username" value="root"></property>
<property name="password" value="19850319a"></property>
<property name="driverClassName" value="com.mysql.jdbc.Driver"></property>
<property name="url" value="jdbc:mysql://localhost:3306/danei?useSSL=false&useUnicode=true&characterEncoding=utf8"></property>
</bean>
empdao.java:
@Repository//扫描Dao
public class EmpDao {
@Resource//注入
private JdbcTemplate template;//注入
public void save(Emp emp){
String sql="insert into emp(name,salary,age) values(?,?,?)";
Object[] params={emp.getName(),emp.getSalary(),emp.getAge()};
template.update(sql,params);
}
public void delete(int id){
String sql="delete from emp where id=?";
Object[] params={id};
template.update(sql,params);
}
public List<Emp> findAll(){
String sql="select * from emp";
EmpRowMapper rowMapper=new EmpRowMapper();
List<Emp> list=template.query(sql, rowMapper);
return list;
}
public Emp findById(int id){
String sql="select * from emp where id=?";
Object[] params={id};
EmpRowMapper rowMapper=new EmpRowMapper();
Emp emp=template.queryForObject(sql, params,rowMapper);
return emp;
}
}
Emp.java:
public class Emp implements Serializable{
private Integer id;
private String name;
private Double salary;
private Integer age;
省略get,set方法
EmpRowMapper.java:
/**将emp记录封装成Emp对象*/
public class EmpRowMapper implements RowMapper<Emp>{
@Override
public Emp mapRow(ResultSet rs, int index) throws SQLException {
// TODO Auto-generated method stub
Emp emp=new Emp();
emp.setId(rs.getInt("id"));
emp.setName(rs.getString("name"));
emp.setSalary(rs.getDouble("salary"));
emp.setAge(rs.getInt("age"));
return emp;
}
}
Test类:
public class TestEmpDao {
public static void main(String[] args) {
ApplicationContext ac=new ClassPathXmlApplicationContext("applicationContext.xml");
EmpDao empDao=ac.getBean("empDao",EmpDao.class);
Emp emp=new Emp();
emp.setName("spring1");
emp.setAge(201);
emp.setSalary(100010.0);
List<Emp> list=empDao.findAll();
System.out.println(list);
}
}