springjdbc的使用


SpringJdbc
    1)概念:spring框架对jdbc的封装
         注:  疯转的目的是为了简化代码,提高代码的质量。比如:使用Springjdbc访问数据库,就不在需要考虑如何获取连接,关闭连接等等


    2)SpringJdbc的步骤
        第一步:导包spring-webmvc和spring-jdbc和ojdbc和dbcp
        第二步:添加spring-mvc的applicationContext.xml配置文件
        第三步:在配置文件(applicationContext.xml)中配置一个JdbcTemplate的一个bean
            在这里要先读取数据库的配置文件,再配置连接池的bean,最后在配置JdbcTemplate
     <!-- 读取配置文件 -->
    <util:properties id="db" location="classpath:db.properties"/>
    <!-- 设置连接池 -->
    <bean id="bs" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
        <property name="driverClassName" value="#{db.driver}"/>
        <property name="url" value="#{db.url}"/>
        <property name="username" value="#{db.user}"/>
        <property name="password" value="#{db.pwd}"/>
        <property name="initialSize" value="#{db.initsize}"/>
        <property name="maxActive" value="#{db.maxsize}"/>
    </bean>
   <!--  配置JdbcTemplate -->
   <bean id="jt" class="org.springframework.jdbc.core.JdbcTemplate">
       <property name="dataSource" ref="bs"/>       //这边的ref是上面连接池的id,把连接池注入进来
   </bean>
        第四步:调用JdbcTemplate提供的方法来访问数据库
            注:将JdbcTemplate注入到DAo中
            写entity  entity和以前的一样就是建一个类,这个类的属性和表的字段一样
            在写dao要和上面分层那边的一样,写接口,再写实现类,和分层的写法一样
            在这边写dao的方法的时候不用在像以前那样,建立连接,创建语句对象,处理结果了,
            直接用JdbcTemplate封装的方法即可
            例如:
    @Repository("empDAO")      //这个是组件扫描,相当于建了一个bean
        public class EmployDAO {
    /*jdbctemplate提供了很多实用的方法来访问数据库
    我们不在需要考虑如何获取连接与关闭连接,另外
    还会降底层的jdbc异常统一转换成一些运行时异常然后抛出*/
    
    @Autowired          //将JdbcTemplate这个类注入进来
    @Qualifier("jt")   //这边括号里的是在配置文件的bean的id
    private JdbcTemplate jt;
    public void save(Employee e){
        String sql="insert into t_emp values(t_emp_seq.nextval,?,?,?)";
        Object[] objs={e.getName(),e.getSalary(),e.getAge()};   //这边大括号里面的顺序要和?在表中的字段的顺序一样
                                    //这就像以前那种要PreparedStatem的给每个?的赋值
        jt.update(sql,objs);   //插入,更新,删除,都是调用这个方法
    }
}

    查找所有的员工。调用模板jt里面的query方法,这方法有两个参数,第一个是sql语句,第二个是一个类的对象,这个类要实现RowMapper<Employee>这接口
    重写这个接口下面的方法。这个方法的的方法体就是从结果集中获取值,再封装成entity下面那个类的对象并返回
    例如:

    public List<Employee> findall(){
        String sql="select * from t_emp";
        return jt.query(sql,new EmpRowMapper());
    }
    //告诉JdbcTemplate如何将一条记录转换成一个实体对象。
    class EmpRowMapper implements RowMapper<Employee>{
        //index表示正在被处理的记录的下标(下标是从0开始的)
        public Employee mapRow(ResultSet rs, int index) throws SQLException {
            Employee e=new Employee();
            e.setId(rs.getInt("id"));
            e.setName(rs.getString("name"));
            e.setSalary(rs.getDouble("salary"));
            e.setAge(rs.getInt("age"));
            return e;
        }
        
    }

猜你喜欢

转载自blog.csdn.net/donghua19900508/article/details/78063387