使用Spring框架下的JdbcTemplate 完成對資料庫的增刪改查操作
還記得以前做的畢業設計是用的C3P0包,而當時並沒有使用到三大框架。現在畢業工作了,但是感覺要學的比工作深一層,一是提高自己的能力,二是以防萬一要換工作了,起碼掌握的東西能支撐自己以後的工作。不過這時候感覺自己就像java萌新(不,其實就是。)
現在第一篇技術相關的文章就寫我第一次用Spring框架操作資料庫吧,可能Spring的版本舊了,但是剛學應該之後的不會有太大影響,不過要注意當前版本最好是跟jdk1.7使用,jdk1.8的話,我之前用Spring註解開發的時候會報錯,看客注意下哦。
涉及:Mysql5.7,Eclipse javaEE,Spring3.2,JDK1.7
首先,我們需要先匯入Spring包中必要的jar包,以及我們的mysql驅動包,C3P0包和Spring的jdbc ,tx事務包
接下來,我們就現在資料庫建立一張表,簡單點的,欄位就這些,並建立一個POJO類User並錄入一條記錄
public class User { Integer id; String username; String password; Integer age; String desc; public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } public void setAge(Integer age) { this.age = age; } public String getDesc() { return desc; } public void setDesc(String desc) { this.desc = desc; } public Integer getAge() { return age; } @Override public String toString() { return "User [id=" + id + ", username=" + username + ", password=" + password + ", age=" + age + ", des=" + desc + "]"; } }
為什麼使用Integer而不使用int,記得應該是之前學Hibernate時的問題,不過剛剛把之前Hibernate的程式碼改為int好像也沒有什麼問題,暫時問題先放下。
建立Dao類,實現增刪改查,這裡增刪改查實際上都是呼叫jdbcTemplate的update方法
package com.hpp.f_prop; import org.springframework.jdbc.core.support.JdbcDaoSupport; public class UserDao extends JdbcDaoSupport{ public void update(User user) { this.getJdbcTemplate().update("update java_user set username=?,password=? where id=?", user.getUsername(),user.getPassword(), user.getId()); } public User queryUser(String username) { //第二個引數需要自己定義一個實現了RowMapper的類來放置,第三個引數則是?對應的引數 return this.getJdbcTemplate().queryForObject("select * from java_user where username=?", new MyRowMapper(), username); } public int insert(User user) { //返回影響的行數 return this.getJdbcTemplate().update("insert into java_user (username,password,age,desc) value(?,?,?,?)", user.getUsername(), user.getPassword(), user.getAge(), user.getDesc()); } public int delete(int id) { //返回影響的行數 return this.getJdbcTemplate().update("delete from java_user where id=?", id); } }
下面是自定義的RowMapper,用於接收query回來的物件
import java.sql.ResultSet;
import java.sql.SQLException;
import org.springframework.jdbc.core.RowMapper;
public class MyRowMapper implements RowMapper<User>{
@Override
public User mapRow(ResultSet rs, int rowNum) throws SQLException {
User user = new User();
user.setId(rs.getInt("id"));
user.setUsername(rs.getString("username"));
user.setAge(rs.getInt("age"));
user.setDesc(rs.getString("desc"));
return user;
}
}
之後我們要根據java連線資料庫的3步走:載入驅動,建立連線地址,連線的賬號和密碼,這個時候就要配置Spring框架的配置檔案了
新增我們的userDao的bean
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd">
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
<property name="driverClass" value="com.mysql.jdbc.Driver"></property>
<property name="jdbcUrl" value="jdbc:mysql://127.0.0.1:3306/mydb"></property>
<property name="user" value="root"></property>
<property name="password" value="8469"></property>
</bean>
<bean id="userDao" class="com.hpp.f_prop.UserDao">
<property name="dataSource" ref="dataSource"></property>
</bean>
</beans>
現在就可以開始在main函式下進行測試了
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class TestJdbcTemplate {
public static void main(String[] args) {
ApplicationContext applicationContext = new ClassPathXmlApplicationContext("com/hpp/f_prop/applicationContext.xml");
UserDao ud = (UserDao) applicationContext.getBean("userDao");
User user = new User();
//更新使用者
// user.setId(1);
// user.setUsername("bb");
// user.setPassword("root");
//ud.update(user);
//刪除使用者
ud.delete(1);
//插入使用者
user.setUsername("Mr_h");
user.setPassword("8888");
user.setAge(10);
user.setDesc("I am well.");
ud.insert(user);
//查詢使用者
System.out.println(ud.queryUser("Mr_h"));
}
}
注意:在寫Dao類的時候,不要這樣寫,否則當你使用jdbcTemplate.update()的時候,就會出現空指標異常了,不信可以試試,不想像我原始碼中的寫法,可以看文末的連結
以上,第一次發表關於java的文章,剛接觸內容較淺顯,如有錯誤以及需要改進的地方 勞煩指出。
以下列出參考文章:
http://blog.csdn.net/u014800380/article/details/64125653