1. 程式人生 > >Spring JDBC 數據訪問

Spring JDBC 數據訪問

jar 以及 local 所有 public hiberna out .get cli

Spring JDBC是Spring所提供的持久層技術,它的主要目標是降低使用JDBC API的門檻,以一種更直接,更簡介,更
簡單的方式使用JDBC API, 在Spring JDBC裏,僅需做那些與業務相關的DML操作,而將資源獲取,Statment創建,
資源釋放以及異常處理等繁雜而乏味的工作交給Spring JDBC.
雖然ORM的框架已經成熟豐富,但是JDBC的靈活,直接的特性,依然讓他擁有自己的用武之地,如在完全依賴查詢
模型動態產生查詢語句的綜合查詢系統中,Hibernaye,MyBatis,JPA等框架都無法使用,這裏JDBC是唯一的選擇.

1. JdbcTemplate入門

1.1 創建項目-引入jar包-導入日誌:log4j.properties

1.2 創建數據庫
數據庫名: springjdbc
創建角色表:

1 CREATE TABLE `role` (
2 `rid` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 角色id,
3 `rname` VARCHAR(20) NOT NULL COMMENT 角色名,
4 `alias` VARCHAR(20) NOT NULL COMMENT 角色別名,
5 PRIMARY KEY (`rid`)
6 )
7 INSERT INTO role (rid,rname,alias)
8 VALUES(1,
admin,系統管理員),(2,dispatcher,調度員);

1.3 測試代碼

 1 @Test
 2 public void test1() throws Exception {
 3 //TODO 測試jdbcTemplate簡單使用
 4 //1.創建c3p0鏈接池
 5 ComboPooledDataSource dataSource = new ComboPooledDataSource();
 6 dataSource.setDriverClass("com.mysql.jdbc.Driver");
 7 dataSource.setJdbcUrl("jdbc:mysql://localhost:3306/springjdbc");
8 dataSource.setUser("root"); 9 dataSource.setPassword("111"); 10 //創建jdbcTemplate對象 11 JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource); 12 //創建sql語句 13 String sql = "insert into role (rid , rname ,alias) value (? , ?,?);"; 14 jdbcTemplate.update(sql,"3","visitor","遊客"); 15 }

2. Spring管理JdbcTemplate

1. 創建Role.java

1 public class Role {
2 private Integer cid;
3 private String rname;
4 private String alias;
5 //setter getter
6 }

2. RoleDao.java

 1 public interface RoleDao {
 2 //
 3 void save(Role role);
 4 //刪除
 5 void delete(Integer id);
 6 //
 7 void update(Role role);
 8 //
 9 Role getById(Integer id);
10 //
11 int getTotalCount();
12 //
13 List<Role> getAll();
14 }

3. 創建RoleDaoImpl.java

創建數據源(連接池),JdbcTemplate,RoleDao交給Spring容器管理(IOC)
註意: 可以自己在RoleDaoImpl中添加 JdbcTemplate變量,如果不自動裝載記得添加變量的set方法,
標準的操作,我們可以讓RoleDaoImpl 繼承 JdbcDaoSupport, 因為
(org.springframework.jdbc.core.support.JdbcDaoSupport)類提供了JdbcTemplate對象以及對應的獲取和設置方
法.不用自己在實現類中添加JdbcTemplate變量!!

JdbcTemplate // Spring操作數據模板類(工具類)
JdbcTemplate.update(sql,ArgsObj....); //DML
JdbcTemplate.execute(sql) //DDL DCL
//DQL 查詢單個
jdbcTemplate.queryForObject(String var1, RowMapper<T> var2, Object... var3);
RowWapper<T> 將結果封裝的處理器; 得到Result解析成實體類對象即可!
//查詢所有
jdbcTemplate.query(String var1, RowMapper<T> var2, Object... var3);

RoleDaoImple代碼:

技術分享圖片
 1 public class RoleDaoImpl extends JdbcDaoSupport implements RoleDao {
 2 public void save(Role role) {
 3 //TODO 插入數據
 4 String sql = "INSERT INTO role (rname,alias) value (?,?) ;";
 5 getJdbcTemplate().update(sql,role.getRname(),role.getAlias());
 6 }
 7 public void delete(Integer id) {
 8 //TODO 根據id刪除
 9 String sql = "delete from role where rid = ? ;";
10 getJdbcTemplate().update(sql,id);
11 }
12 public void update(Role role) {
13 //TODO 修改role信息
14 String sql="update role set rname = ? , alias = ? where rid = ? ;" ;
15 getJdbcTemplate().update(sql,role.getRname(),role.getAlias(),role.getRid());
16 }
17 public Role getById(Integer id) {
18 String sql = "select * from role where rid = ? ;";
19 //直接查詢
20 // Role role = getJdbcTemplate().queryForObject(sql, new Object[]{id}, Role.class);
21 Role role = (Role) getJdbcTemplate().queryForObject(sql, new Object[]{id}, new
22 RowMapper<Object>() {
23 public Object mapRow(ResultSet resultSet, int index) throws SQLException {
24 //將一行數據解析成一個java對象
25 return mapRowHandler(resultSet);
26 }
27 });
28 return role;
29 }
30 public int getTotalCount() {
31 String sql = "select count(*) from role ;";
32 Integer count = getJdbcTemplate().queryForObject(sql,Integer.class);
33 return count;
34 }
35 //查詢所有
36 public List<Role> getAll() {
37 String sql = "select * from role";
38 List<Role> list = getJdbcTemplate().query(sql, new RowMapper<Role>() {
39 public Role mapRow(ResultSet resultSet, int i) throws SQLException {
40 return mapRowHandler(resultSet);
41 }
42 });
43 return list;
44 }
45 private Role mapRowHandler(ResultSet resultSet) throws SQLException{
46 Role role = new Role();
47 role.setRid(resultSet.getInt("rid"));
48 role.setRname(resultSet.getString("rname"));
49 role.setAlias(resultSet.getString("alias"));
50 return role;
51 }
52 }
View Code

4. 創建數據庫配置文件

文件名:db.properties
位置: src下/ maven項目 resources文件夾下

jdbc.jdbcUrl=jdbc:mysql://localhost:3306/****
jdbc.driverClass=com.mysql.jdbc.Driver
jdbc.user=root
jdbc.password=***

5.編寫IOC配置

文件名:applicationContext.xml
位置:src下 / maven項目 resources文件夾下

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <beans xmlns="http://www.springframework.org/schema/beans"
 3 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 4 xmlns:context="http://www.springframework.org/schema/context"
 5 xmlns:p="http://www.springframework.org/schema/p"
 6 xsi:schemaLocation="
 7 http://www.springframework.org/schema/beans
 8 http://www.springframework.org/schema/beans/spring-beans.xsd
 9 http://www.springframework.org/schema/context
10 http://www.springframework.org/schema/context/spring-context.xsd"> <!-- bean definitions
11 here -->
12 <context:component-scan base-package="com.itqf.spring"></context:component-scan>
13 <context:property-placeholder location="db.properties"></context:property-
14 placeholder>
15 <bean name="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"
16 p:jdbcUrl="${jdbc.jdbcUrl}"
17 p:driverClass="${jdbc.driverClass}"
18 p:user="root"
19 p:password="111"
20 />
21 <!-- bean jdbcTemplate -->
22 <bean name="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
23 <property name="dataSource" ref="dataSource"/>
24 </bean>
25 <bean name="roleDao" class="com.itqf.spring.dao.impl.RoleDaoImpl">
26 <property name="jdbcTemplate" ref="jdbcTemplate"/>
27 </bean>
28 </beans>

測試:

 1 @Test
 2 public void test2(){
 3 //TODO 測試使用配置文件
 4 ApplicationContext context =new
 5 ClassPathXmlApplicationContext("applicationContext.xml");
 6 RoleDao dao = context.getBean("roleDao", RoleDaoImpl.class);
 7 Role byId = dao.getById(2);
 8 System.out.println(byId);
 9 List<Role> all = dao.getAll();
10 System.out.println("all = " + all);
11 }

Spring JDBC 數據訪問