zoukankan      html  css  js  c++  java
  • Spring4基础 学习笔记(5) Spring与Dao

    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());               //可变参重载方法
          }
     
     
    三种数据源的注册:
          <!-- c3p0数据源 -->
         <bean id="c3p0Source" class="com.mchange.v2.c3p0.ComboPooledDataSource">
          <property name="driverClass" value="com.mysql.jdbc.Driver"/>
          <property name="jdbcUrl" value="jdbc:mysql://localhost:3306/test"/>
          <property name="user" value="root"/>
          <property name="password" value="1234"/>
        </bean>
     
     
     
          <!-- dbcp数据源 -->
    <!--      <bean id="dbcpSource" class="org.apache.commons.dbcp.BasicDataSource.class">
          <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>  -->
     
     
          <!-- 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文件:
          <!-- c3p0数据源 -->
         <bean id="c3p0Source" class="com.mchange.v2.c3p0.ComboPooledDataSource">
          <property name="driverClass" value="${jdbc.driver}"/>
          <property name="jdbcUrl" value="${jdbc.url}"/>
          <property name="user" value="${jdbc.username}"/>
          <property name="password" value="${jdbc.password}"/>
        </bean>
     
     需要注册properties文件:
    方式1)bean:
          <!-- 注册jdbcproperties -->
          <bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer" >
                <property name="location" value="classpath:jdbc.properties"/>
          </bean>
    使用locations注册多个
     
    方式2):需要添加context约束
    <context:property-placeholder location="classpath:jdbc.properties"/>
     
     
    给DaoImpl对象注册模板,再给模板注册DataSource的步骤可以简化为:直接给DaoImpl对象(JdbcDaoSupport)注册DataSource,因为JdbcDaoSupport的setDataSource方法会以DataSource对象为参数创建模板
          <!-- Dao和DataSource -->
        <bean id="StudentDao" class="StudentDaoImpl">
          <property name="dataSource" ref="c3p0Source"/>
        </bean>
     
    关系:
    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<String> 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实例,并且在该线程结束时,自动释放实例。
  • 相关阅读:
    控件与布局
    高性能mysql笔记 第一章 mysql架构
    简单排序——冒泡,选择,插入
    spring boot的默认配置
    nginx配置 负载均衡
    nginx+tomcat反向代理
    fiddler(4)安装--L
    fiddler(3)http协议-响应报文--L
    fiddler(2)http协议-请求报文--L
    Fiddler(1)简介--L
  • 原文地址:https://www.cnblogs.com/coderlynn/p/8947944.html
Copyright © 2011-2022 走看看