當前位置:
首頁 >
前端技术
> javascript
>内容正文
javascript
Spring4基础 学习笔记(5) ---- Spring与Dao
生活随笔
收集整理的這篇文章主要介紹了
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實例,并且在該線程結束時,自動釋放實例。
轉載于:https://www.cnblogs.com/coderlynn/p/8947944.html
總結
以上是生活随笔為你收集整理的Spring4基础 学习笔记(5) ---- Spring与Dao的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: UNIX环境编程学习笔记(21)——进程
- 下一篇: Spring笔记③--spring的命名