日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

Spring-jdbc:JdbcTemplate使用简介

發布時間:2023/12/18 javascript 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Spring-jdbc:JdbcTemplate使用简介 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

前些天發現了一個巨牛的人工智能學習網站,通俗易懂,風趣幽默,忍不住分享一下給大家。點擊跳轉到教程。

為了使 JDBC 更加易于使用,Spring 在 JDBCAPI 上定義了一個抽象層, 以此建立一個JDBC存取框架.

作為 SpringJDBC 框架的核心, JDBC 模板的設計目的是為不同類型的JDBC操作提供模板方法. 每個模板方法都能控制整個過程,并允許覆蓋過程中的特定任務.通過這種方式,可以在盡可能保留靈活性的情況下,將數據庫存取的工作量降到最低.

JdbcTemplate主要提供以下五類方法:
execute方法:可以用于執行任何SQL語句,一般用于執行DDL語句;
update方法及batchUpdate方法:update方法用于執行新增、修改、刪除等語句;batchUpdate方法用于執行批處理相關語句;
query方法及queryForXXX方法:用于執行查詢相關語句;
call方法:用于執行存儲過程、函數相關語句。

使用示例:

在數據庫中先準備兩張表:

在java工程中創建兩個對應類:

?

[java]?view plain?copy
  • public?class?Department?{??
  • ????int?id;??
  • ????String?deptName;??
  • ????@Override??
  • ????public?String?toString()?{??
  • ????????return?"Department?[id="?+?id?+?",?deptName="?+?deptName?+?"]";??
  • ????}??
  • ??????
  • }??
  • [java]?view plain?copy
  • public?class?Employee?{??
  • ????int?id;??
  • ????String?lastName;??
  • ????String?email;??
  • ????Department?department;??
  • ????@Override??
  • ????public?String?toString()?{??
  • ????????return?"Employee?[id="?+?id?+?",?lastName="?+?lastName?+?",?email="??
  • ????????????????+?email?+?",?department="?+?department?+?"]";??
  • ????}??
  • ????public?int?getId()?{??
  • ????????return?id;??
  • ????}??
  • ????public?void?setId(int?id)?{??
  • ????????this.id?=?id;??
  • ????}??
  • ????public?String?getLastName()?{??
  • ????????return?lastName;??
  • ????}??
  • ????public?void?setLastName(String?lastName)?{??
  • ????????this.lastName?=?lastName;??
  • ????}??
  • ????public?String?getEmail()?{??
  • ????????return?email;??
  • ????}??
  • ????public?void?setEmail(String?email)?{??
  • ????????this.email?=?email;??
  • ????}??
  • ????public?Department?getDepartment()?{??
  • ????????return?department;??
  • ????}??
  • ????public?void?setDepartment(Department?department)?{??
  • ????????this.department?=?department;??
  • ????}??
  • ??????
  • ??????
  • }??
  • ?


    引入Spring框架相關的jar包以及c3p0和mysql連接jar包。為了對方法進行測試,這里還需要引入JUnit4.這里以導入外部屬性文件的方式來配置數據源:

    ?

    ?

    jdbc.properties文件內容如下:

    ?

    [plain]?view plain?copy
  • user=root??
  • password=123??
  • driverClass=com.mysql.jdbc.Driver??
  • jdbcUrl=jdbc:mysql:///spring??
  • ??
  • initPoolSize=5??
  • maxPoolSize=10??

  • 在xml文件中,導入這個屬性文件以及配置c3p0數據源:

    ?

    ?

    [html]?view plain?copy
  • <!--?導入資源文件?-->??
  • <context:property-placeholder?location="classpath:jdbc.properties"/>??
  • ??
  • <!--?配置?c3p0?數據源?-->??
  • <bean?id="dataSource"??
  • ????class="com.mchange.v2.c3p0.ComboPooledDataSource">??
  • ????<property?name="user"?value="${user}"></property>?????
  • ????<property?name="password"?value="${password}"></property>?????
  • ????<property?name="jdbcUrl"?value="${jdbcUrl}"></property>???
  • ????<property?name="driverClass"?value="${driverClass}"></property>???
  • ??????
  • ????<property?name="initialPoolSize"?value="${initPoolSize}"></property>??????
  • ????<property?name="maxPoolSize"?value="${maxPoolSize}"></property>???
  • </bean>??

  • 配置好dataSource后就可以用這個數據源來配置JdbcTemplate了,在xml文件中添加:

    ?

    ?

    [html]?view plain?copy
  • <!--?配置?spring?的?JdbcTemplate?-->??
  • <bean?id="jdbcTemplate"??
  • ????class="org.springframework.jdbc.core.JdbcTemplate">??
  • ????<property?name="dataSource"?ref="dataSource"></property>??
  • </bean>??
  • 接下來創建一個測試類對JdbcTemplate的方法進行測試:

    ?

    ?

    [java]?view plain?copy
  • import?java.util.ArrayList;??
  • import?java.util.List;??
  • ??
  • import?org.junit.Test;??
  • import?org.springframework.context.ApplicationContext;??
  • import?org.springframework.context.support.ClassPathXmlApplicationContext;??
  • import?org.springframework.jdbc.core.BeanPropertyRowMapper;??
  • import?org.springframework.jdbc.core.JdbcTemplate;??
  • import?org.springframework.jdbc.core.RowMapper;??
  • ??
  • public?class?JDBCTest?{??
  • ??????
  • ????private?ApplicationContext?ctx=?null;??
  • ????private?JdbcTemplate?jdbcTemplate?=?null;??
  • //??private?EmployeeDao?employee;??
  • ??
  • ????{??
  • ????????ctx?=?new?ClassPathXmlApplicationContext("ApplicationContext.xml");??
  • ????????jdbcTemplate?=?(JdbcTemplate)?ctx.getBean("jdbcTemplate");??
  • ????}??
  • ??
  • ????/**?
  • ?????*?執行?INSERT,UPDATE,DELETE?
  • ?????*/??
  • ????@Test??
  • ????public?void?testUpdate()?{??
  • ????????String?sql?=?"UPDATE?employees?SET?last_name?=???WHERE?id?=??";??
  • ????????jdbcTemplate.update(sql,?"Jack",?5);??
  • ????}??
  • ????/**?
  • ?????*?測試批量更新操作?
  • ?????*?最后一個參數是?Object[]?的?List?類型:因為修改一條記錄需要一個?Object?數組,修改多條記錄就需要一個?List?來存放多個數組。?
  • ?????*/??
  • ????@Test??
  • ????public?void?testBatchUpdate()?{??
  • ????????String?sql?=?"INSERT?INTO?employees(last_name,?email,?dept_id)?VALUES(?,?,?)";??
  • ??????????
  • ????????List<Object[]>?batchArgs?=?new?ArrayList<>();??
  • ??????????
  • ????????batchArgs.add(new?Object[]{"AA",?"aa@atguigu.com",?1});??
  • ????????batchArgs.add(new?Object[]{"BB",?"bb@atguigu.com",?2});??
  • ????????batchArgs.add(new?Object[]{"CC",?"cc@atguigu.com",?3});??
  • ????????batchArgs.add(new?Object[]{"DD",?"dd@atguigu.com",?3});??
  • ????????batchArgs.add(new?Object[]{"EE",?"ee@atguigu.com",?2});??
  • ??????????
  • ????????jdbcTemplate.batchUpdate(sql,?batchArgs);??
  • ????}??
  • ??????
  • ????/**?
  • ?????*?從數據庫中獲取一條記錄,實際得到對應的一個對象?
  • ?????*?注意:不是調用?queryForObject(String?sql,?Class<Employee>?requiredType,?Object...?args)?方法!?
  • ?????*?而需要調用?queryForObject(String?sql,?RowMapper<Employee>?rowMapper,?Object...?args)?
  • ?????*?1、其中的?RowMapper?指定如何去映射結果集的行,常用的實現類為?BeanPropertyRowMapper?
  • ?????*?2、使用?SQL中的列的別名完成列名和類的屬性名的映射,例如?last_name?lastName?
  • ?????*?3、不支持級聯屬性。?JdbcTemplate?只能作為一個?JDBC?的小工具,?而不是?ORM?框架?
  • ?????*/??
  • ????@Test??
  • ????public?void?testQueryForObject()?{??
  • ????????String?sql?=?"SELECT?id,?last_name?lastName,email,dept_id?as?\"department.id\"?FROM?employees?WHERE?ID?=??";??
  • ????????RowMapper<Employee>?rowMapper?=?new?BeanPropertyRowMapper<>(Employee.class);??
  • ????????//在將數據裝入對象時需要調用set方法。??
  • ????????Employee?employee?=?jdbcTemplate.queryForObject(sql,?rowMapper,?1);??
  • ??????????
  • ????????System.out.println(employee);??
  • ????}??
  • ??????
  • ????/**?
  • ?????*?一次查詢多個對象?
  • ?????*?注意:調用的不是?queryForList?方法?
  • ?????*/??
  • ????@Test??
  • ????public?void?testQueryForList()?{??
  • ????????String?sql?=?"SELECT?id,?last_name?lastName,?email?FROM?employees?WHERE?id?>??";??
  • ????????RowMapper<Employee>?rowMapper?=?new?BeanPropertyRowMapper<>(Employee.class);??
  • ????????List<Employee>?employees?=?jdbcTemplate.query(sql,?rowMapper,5);??
  • ??????????
  • ????????System.out.println(employees);??
  • ????}??
  • ????/**?
  • ?????*?獲取單個列的值或做統計查詢?
  • ?????*?使用?queryForObject(String?sql,?Class<Long>?requiredType)??
  • ?????*/??
  • ????@Test??
  • ????public?void?testQueryForObject2()?{??
  • ????????String?sql?=?"SELECT?count(id)?FROM?employees";??
  • ????????long?count?=?jdbcTemplate.queryForObject(sql,?Long.class);??
  • ??????????
  • ????????System.out.println(count);??
  • ????}?????
  • }??

  • 在實際的使用中,一般會創建一個dao類來封裝對某個對象的所有增刪改查操作.

    ?

    比如,創建一個EmployeeDao類如下:

    ?

    [java]?view plain?copy
  • import?org.springframework.beans.factory.annotation.Autowired;??
  • import?org.springframework.jdbc.core.BeanPropertyRowMapper;??
  • import?org.springframework.jdbc.core.JdbcTemplate;??
  • import?org.springframework.jdbc.core.RowMapper;??
  • import?org.springframework.stereotype.Repository;??
  • ??
  • @Repository??
  • public?class?EmployeeDao?{??
  • ????@Autowired??
  • ????private?JdbcTemplate?jdbcTemplate;??
  • ??????
  • ????public?Employee?get(Integer?id)?{??
  • ????????String?sql?=?"SELECT?id,?last_name?lastName,?email?FROM?employees?WHERE?id?=??";??
  • ????????RowMapper<Employee>?rowMapper?=?new?BeanPropertyRowMapper<>(Employee.class);??
  • ????????Employee?employee?=?jdbcTemplate.queryForObject(sql,?rowMapper,?id);??
  • ??????????
  • ????????return?employee;??
  • ????}??
  • }??

  • 在這個Dao類中實現了通過id來獲取記錄并封裝成對象返回的方法。如果有需要還可以實現其他操作如插入、刪除、更新等。

    ?

    由于這里使用了注解來配置bean以及bean的自動裝配,所以還需要在xml文件中添加(要先導入context命名空間):

    ?

    [html]?view plain?copy
  • <context:component-scan?base-package="com.atguigu.spring.jdbc"></context:component-scan>??
  • 測試一下EmployeeDao:

    ?

    ?

    [java]?view plain?copy
  • @Test??
  • public?void?testEmployeeDao()?{??
  • ????EmployeeDao?employeeDao?=?(EmployeeDao)?ctx.getBean("employeeDao");??
  • ????Employee?employee?=?employeeDao.get(1);??
  • ????System.out.println(employee);??
  • }??

  • 打印輸出如下:

    ?

    總結:JdbcTemplate是Spring框架自帶的對JDBC操作的封裝,目的是提供統一的模板方法使對數據庫的操作更加方便、友好,效率也不錯。但是功能還是不夠強大(比如不支持級聯屬性),在實際應用中還需要和hibernate、mybaties等框架混合使用。

    ?

    總結

    以上是生活随笔為你收集整理的Spring-jdbc:JdbcTemplate使用简介的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。