spring_jdbc

Spring与DAO:

Spring与JDBC模板:为了避免直接使用JDBC而带来的复杂且冗长的代码,Spring提供了一个强有力的模板类:JdbcTemplate 来简化JDBC操作。并且,数据源DataSource对象与模板JdbcTemplate对象均可通过Bean的形式定义在配置文件中,充分发挥了依赖注入的特性。

依赖jar:使用c3p0数据库连接池,Spring的JDBC.jar,Spring的事务jar,数据库驱动

一般的Service层访问Dao层:

StudentServiceImpl实现-------->IStudentService接口

StudentServiceImpl 持有 Dao的引用 ,由容器注入,Impl的实现依赖于Dao(调用Dao接口的方法)

Dao接口定义了访问DB的方法

定义Dao的实现类,将来注入StudentServiceImpl的类

使用JdbTemplate,Dao实现类 继承 JdbcDaoSupport,JdbcTemplate为该类的成员变量

增删改统一使用update方法:
@Override
public void insertStudent(Student student) {
String sql = “insert into student(name,age) values(?,?)”;
// TODO Auto-generated method stub
this.getJdbcTemplate().update(sql, student.getName(),student.getAge()); //可变参重载方法
}

三种数据源的注册:






  <!-- dbcp数据源 -->
  <!-- Spring内置数据源 -->
 <!-- <bean id="springSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
  <property name="driverClassName" value="com.mysql.jdbc.Driver"/>
  <property name="url" value="jdbc:mysql://localhost:3306/test"/>
  <property name="username" value="root"/>
  <property name="password" value="1234"/>
</bean>    -->

使用properties文件:






需要注册properties文件:
方式1)bean:




使用locations注册多个

方式2):需要添加context约束
<context:property-placeholder location=“classpath:jdbc.properties”/>

给DaoImpl对象注册模板,再给模板注册DataSource的步骤可以简化为:直接给DaoImpl对象(JdbcDaoSupport)注册DataSource,因为JdbcDaoSupport的setDataSource方法会以DataSource对象为参数创建模板



关系:
service调用Dao,向serviceImpl注入DaoImpl
DaoImpl继承自JdbcDaoSupport
向DaoImpl注入模板对象
向模板对象注入DataSource对象

模板实现增删改都使用update方法:
@Override
public void insertStudent(Student student) {
String sql = “insert into student(name,age) values(?,?)”;
// TODO Auto-generated method stub
this.getJdbcTemplate().update(sql, student.getName(),student.getAge());
}
@Override
public void deleteStudent(Student student) {
// TODO Auto-generated method stub
String sql = “delete from student where id=?”;
this.getJdbcTemplate().update(sql,student.getId());
}

  @Override
  public void updateStudent(Student student) {
        // TODO Auto-generated method stub
        String sql = "update student set name=?,age=? where id=?";
        this.getJdbcTemplate().update(sql, student.getName(),student.getAge(),student.getId());
  }

查询使用query方法
@Override
public List selectAllStudentsNames() {
// TODO Auto-generated method stub
String sql = “select name from student”;
return this.getJdbcTemplate().queryForList(sql , String.class);
}

  @Override
  public String selectStudentNameById(int id) {
        String sql = "select name from student where id=?";
        // TODO Auto-generated method stub
        return this.getJdbcTemplate().queryForObject(sql,String.class,id);          //可变参重载方法
  }

对于对象集合的查询queryForList不会将查询结果封装为对象,需要自己封装:
this.getTemplate().query(sql,rowMapper);

      return this.getJdbcTemplate().query(sql,new RowMapper<Student>() {
              @Override
              public Student mapRow(ResultSet rs, int rowNum) throws SQLException {
                    // TODO Auto-generated method stub
                    return null;
              }
              
        });

在RowMapper接口实现类中将结果集封装。

注意:
//这个rs不是select查询的所有结果集,而是这个结果集遍历出来的一行
@Override
public Student mapRow(ResultSet rs, int rowNum) throws SQLException {
// TODO Auto-generated method stub

        return null;
  }

JdbcTemPlate对象是多例的,的生命周期很短,就在一个方法内有效:
系统会为每一个使用模板对象的线程,创建一个JdbcTemplate实例,并且在该线程结束时,自动释放实例。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值