您好,登錄后才能下訂單哦!
小編給大家分享一下Spring框架中JdbcTemplate怎么用,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!
在之前的Javaweb學習中,學習了手動封裝JdbcTemplate,其好處是通過(sql語句+參數)模板化了編程。而真正的JdbcTemplate類,是Spring框架為我們寫好的。它是 Spring 框架中提供的一個對象,是對原始 Jdbc API 對象的簡單封裝。除了JdbcTemplate,spring 框架還為我們提供了很多的操作模板類。
Spring框架的JdbcTemplate在spring-jdbc
的jar包中,,除了要導入這個 jar 包
外,還需要導入一個 spring-tx
的jar包(它是和事務相關的)。當然連接池的jar包也不能忘記,這里使用的是c3p0
。
使用JdbcTemplate一定要導入Spring的數據庫模塊的三個jar:
使用JdbcTemplate可以快捷的操作數據庫,本文章針對JdbcTemplate進行演示。本文所使用的數據庫表為jdbctemplate
中的employee
,表的內容如下。
數據庫配置文件
jdbctemplate數據庫在本地數據庫中已經創建。
jdbc.user=root jdbc.password=Hudie jdbc.jdbcUrl=jdbc:mysql://localhost:3306/jdbctemplate jdbc.driverClass=com.mysql.jdbc.Driver
xml配置文件
<!-- 引入外部配置文件 --> <context:property-placeholder location="classpath:dbconfig.properties" /> <!-- 配置數據源 --> <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"> <property name="user" value="${jdbc.user}"></property> <property name="password" value="${jdbc.password}"></property> <property name="jdbcUrl" value="${jdbc.jdbcUrl}"></property> <property name="driverClass" value="${jdbc.driverClass}"></property> </bean>
測試獲取連接
public class txTest { ApplicationContext ioc = new ClassPathXmlApplicationContext("ApplicationContext.xml"); @Test public void test() throws SQLException { DataSource bean = ioc.getBean(DataSource.class); Connection connection = bean.getConnection(); System.out.println(connection); connection.close(); } }
執行測試,成功獲取到連接。
如果通過編碼來進行獲得一個JdbcTemplate對象,可以使用new JdbcTemplate(dataSource);
,不過由于這個對象經常使用,將其放在IoC容器中更合適。
具體配置如下:
<!-- Spring提供了一個JdbcTmplate來操作數據庫 --> <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate"> <constructor-arg name="dataSource" ref="dataSource"></constructor-arg> </bean>
測試
public class txTest { ApplicationContext ioc = new ClassPathXmlApplicationContext("ApplicationContext.xml"); JdbcTemplate jdbcTemplate= ioc.getBean(JdbcTemplate.class); @Test public void test2() { System.out.println(jdbcTemplate); } }
成功打印出JdbcTemplate對象。
將emp_id=5的記錄salary字段改為1300.00
jdbcTemplate.updat()
:表示更新一條記錄。
@Test public void test3() { String sql = "update employee set salary = ? where emp_id=?;"; int update = jdbcTemplate.update(sql, 1300.00, 5); System.out.println("更新員工表,影響" + update + "行"); }
jdbcTemplate.batchUpdate(sql, batchArgs)
:表示批量進行插入,插入一個list集合,返回的是影響的行數。
@Test public void test4() { String sql = "insert into employee (emp_name,salary) values(?,?)"; List<Object[]> batchArgs = new ArrayList<Object[]>(); batchArgs.add(new Object[] { "張三", 998.98 }); batchArgs.add(new Object[] { "李四", 998.98 }); batchArgs.add(new Object[] { "王五", 998.98 }); batchArgs.add(new Object[] { "趙六", 998.98 }); // List的長度就是sql語句執行的次數 int[] is = jdbcTemplate.batchUpdate(sql, batchArgs); for (int i : is) { System.out.println(i); } }
int[] is = jdbcTemplate.batchUpdate(sql, batchArgs);
返回的結果是影響的行數。
創建JavaBean
package com.gql.bean; public class Employee { private Integer empId; private String empName; private Double salary; //省略setter、getter與toString方法。 }
查詢并封裝單條記錄
@Test public void test5() { String sql = "select emp_id empId,emp_name empName,salary from employee where emp_id=?"; // rowMapper:規定每一行記錄和JavaBean的屬性如何映射 Employee employee = jdbcTemplate.queryForObject(sql, new BeanPropertyRowMapper<>(Employee.class), 5); System.out.println(employee); }
@Test public void test6() { String sql = "select emp_id empId,emp_name empName,salary from employee where salary>?"; List<Employee> list = jdbcTemplate.query(sql, new BeanPropertyRowMapper<>(Employee.class), 4000); for (Employee employee : list) { System.out.println(employee); } }
成功將salary>400的記錄封裝進list集合。
使用mysql的max函數可以獲得最大的salary,調用queryForObject方法,返回Double類型。
@Test public void test7() { String sql = "select max(salary) from employee"; Double object = jdbcTemplate.queryForObject(sql, Double.class); System.out.println("最高工資是:" + object); }
Spring中使用namedParameterJdbcTemplate來進行含有具名SQL的操作。
將namedParameterJdbcTemplate加到IoC容器中。
<!-- 配置一個具名參數的Jdbctemplate --> <bean id="namedParameterJdbcTemplate" class="org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate"> <!-- 使用構造器注入一個數據源 --> <constructor-arg name="dataSource" ref="dataSource"></constructor-arg> </bean>
在測試中以Map形式傳入參數值。
public class txTest { ApplicationContext ioc = new ClassPathXmlApplicationContext("ApplicationContext.xml"); JdbcTemplate jdbcTemplate = ioc.getBean(JdbcTemplate.class); NamedParameterJdbcTemplate namedJdbcTemplate = ioc.getBean(NamedParameterJdbcTemplate.class); @Test public void test9() { String sql = "insert into employee (emp_name,salary) values(:empName,:salary)"; Map<String, Object> paramMap = new HashMap<>(); // 將所有具名參數的值都放在map中 paramMap.put("empName", "小紅"); paramMap.put("salary", 12000.00); int update = namedJdbcTemplate.update(sql, paramMap); System.out.println(update); } }
與上一條實驗類似,只是選用了不同的參數類型。
@Test public void test10() { String sql = "insert into employee (emp_name,salary) values(:empName,:salary)"; Employee employee = new Employee(); employee.setEmpName("小藍"); employee.setSalary(9999.00); int i = namedJdbcTemplate.update(sql, new BeanPropertySqlParameterSource(employee)); System.out.println(i); }
以上是“Spring框架中JdbcTemplate怎么用”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。