Spring JdbcTemplate簡介,百度筆試題目及答案
二、Spring??JdbcTemplate相對於hibernate優勢所在
本人在開發的過程中接觸比較多的是hibernate、mybatis。兩種持久層框架都感覺不盡如人意。hibernate就不說了為什麼很多人不願意用hibernate了?
mybatis是持久層的輕量級封裝,在mybatis中如果需要進行某一個操作,首先需要定義mapper,然後再定義mapper.xml。在mapper.xml中需要完成model對映,需要寫上介面相關的sql,這個過程作者認為重複性的工作比較多。如果能在java類中直接寫sql,同時還能進行簡單的物件操作,那麼程式將即擁有hibernate的部分優點,又能擁有mybatis的部分優點,豈不是很香,Spring??JdbcTemplate應運而生。
三、Spring??JdbcTemplate簡介
Spring對資料庫的操作在jdbc上面做了深層次的封裝,使用spring的注入功能,可以把DataSource註冊到JdbcTemplate中。
JdbcTemplate位於中。其全限定命名為org.springframework.jdbc.core.JdbcTemplate。要使用JdbcTemplate還需要一個這個包含了事務和異常控制。
四、JdbcTemplate提供的方法
1、execute方法
可以用於執行任何SQL語句,一般用於執行DDL語句。
2、update方法和batchUpdate方法
update方法用於執行新增、修改、刪除等語句;batchUpdate方法用於執行批量處理相關語句。
3、query方法及queryForXXX方法
用於執行查詢相關語句。
4、call方法
用於執行儲存過程、函式相關語句。
五、案例分析
1、在src下新建一個屬性配置檔案
jdbc.user=root
jdbc.password=123456
jdbc.driverClass=com.mysql.jdbc.Driver
jdbc.jdbcUrl=jdbc\:mysql\:///test
我們通常將資料庫的配置資訊單獨放到一個檔案中,這樣也為了方便後期維護。
2、配置Spring配置檔案applicationContext.xml
<context:property-placeholder location="classpath:db.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="driverClass" value="${jdbc.driverClass}"></property> <property name="jdbcUrl" value="${jdbc.jdbcUrl}"></property> </bean> <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate"> <property name="dataSource" ref="dataSource"></property> </bean>
第一行程式碼:用來讀取db.properties檔案中的資料。
第二行程式碼:用來配置一個數據源,這裡資料實現類來此C3P0中的一個屬性類,其中屬性的值就是來自於db.properties。
第九行程式碼:配置一個JdbcTemplate例項,並注入一個dataSource資料來源。
3、update()方法
(1)通過update插入資料
//啟動IoC容器
ApplicationContext ctx=new ClassPathXmlApplicationContext("applicationContext.xml");
//獲取IoC容器中JdbcTemplate例項
JdbcTemplate jdbcTemplate=(JdbcTemplate) ctx.getBean("jdbcTemplate");
String sql="insert into user (name,deptid) values (?,?)";
int count= jdbcTemplate.update(sql, new Object[]{"caoyc",3});
System.out.println(count);
這裡update方法,第二參可以為可變引數。在資料庫中可以看到,資料以被正確插入
(2)通過update修改資料
String sql="update user set name=?,deptid=? where id=?";
jdbcTemplate.update(sql,new Object[]{"zhh",5,51});
(3)通過update刪除資料
String sql="delete from user where id=?";
jdbcTemplate.update(sql,51);
4、batchUpdate()批量插入、更新和刪除方法
批量插入
String sql="insert into user (name,deptid) values (?,?)";
List<Object[]> batchArgs=new ArrayList<Object[]>();
batchArgs.add(new Object[]{"caoyc",6});
batchArgs.add(new Object[]{"zhh",8});
batchArgs.add(new Object[]{"cjx",8});
jdbcTemplate.batchUpdate(sql, batchArgs);
batchUpdate方法第二引數是一個元素為Object[]陣列型別的List集合。
5、從資料庫中讀取資料到實體物件
(1)先定義一個User實體類
package com.proc;
public class User {
private Integer id;
private String name;
private Integer deptid;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getDeptid() {
return deptid;
}
public void setDeptid(Integer deptid) {
this.deptid = deptid;
}
public String toString() {
return "User [id=" + id + ", name=" + name + ", deptid=" + deptid + "]";
}
}
(2)讀取單個物件
String sql="select id,name,deptid from user where id=?";
RowMapper<User> rowMapper=new BeanPropertyRowMapper<User>(User.class);
User user= jdbcTemplate.queryForObject(sql, rowMapper,52);
System.out.println(user);
輸出結果
User [id=52, name=caoyc, deptid=6]
注意:
-
使用BeanPropertyMapper要求sql資料查詢出來的列和實體屬性需要一一對應。如果資料中列名和屬性名不一致,在sql語句中需要用as重新取一個別名。
-
使用JdbcTemplate物件不能獲取關聯物件
最後
關於面試刷題也是有方法可言的,建議最好是按照專題來進行,然後由基礎到高階,由淺入深來,效果會更好。當然,這些內容我也全部整理在一份pdf文件內,分成了以下幾大專題:
- Java基礎部分
- 演算法與程式設計
- 資料庫部分
- 流行的框架與新技術(Spring+SpringCloud+SpringCloudAlibaba)
這份面試文件當然不止這些內容,實際上像JVM、設計模式、ZK、MQ、資料結構等其他部分的面試內容均有涉及,因為文章篇幅,就不全部在這裡闡述了。
作為一名程式設計師,階段性的學習是必不可少的,而且需要保持一定的持續性,這次在這個階段內,我對一些重點的知識點進行了系統的複習,一方面鞏固了自己的基礎,另一方面也提升了自己的知識廣度和深度。
最後提醒一下哦,如果你想要學習,卻無奈於沒有乾貨學習資料,只需你多多支援一下即可