Spring中的JdbcTemplate使用


1.引出SpringJDBC的概念

     在學習JDBC編程時我們會感覺到JDBC的操作是多么繁瑣,那么當我們學習的Hibernate框架時,我們感覺到數據庫的操作也變非常簡單,提高了開發效率。但是當使用Hibernate不能滿足性能或者靈活性要求必須使用Sql操作時,那么我們只能是純JDBC來開發,為了解決這一問題,那么Spring也給出了相應的解決方案,我們可以使用Spring JDBC 框架方便簡單的完成JDBC操作,只需要聲明Sql語句,調用適合的Spring JDBC框架中的APL,來處理結果集。

2.Spring JDBC的組成

 SpringJDBC框架的4個組成部分:

 

3. 使用Spring jdbcTemplate實現數據庫操作步驟

    3.1引入jar包:

 

   3.2搭建架構(dao,entity,service)

   entity:

    

package cn.entity;


/**
 * 學生實體類
 * 
 * @author hyj
 * 
 */
public class Student {
    // 學生id
    private Integer id;
    // 學生姓名
    private String name;
    // 學生年齡
    private Integer age;
    public Student() {
        super();
        // TODO Auto-generated constructor stub
    }
    public Student(Integer id, String name, Integer age) {
        super();
        this.id = id;
        this.name = name;
        this.age = age;
    }
    
    
    public Student(Integer id, String name) {
        super();
        this.id = id;
        this.name = name;
    }
    public Student(String name, Integer age) {
        super();
        this.name = name;
        this.age = age;
    }
    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 getAge() {
        return age;
    }
    public void setAge(Integer age) {
        this.age = age;
    }
    

}

 dao:

 

package cn.dao;

import java.util.List;

import cn.entity.Student;

public interface StudentDao {
   /**
    * 查詢全部
    * @return
    */
    public List<Student> findAll();
   
    /**
     * 添加    
     * @param student
     */
    public void add(Student student);
    
    
    /**
     * 刪除
     * @param id
     */
    public  void delete(Integer id);
    
    
    /**
     * 更新
     * @param student
     */
    public void update(Student student);
    
    /**
     * 查詢總記錄數
     * @return
     */
    public Integer count();
    
    
    /**
     * 調用存儲過程實現根據學生id查詢學生姓名
     * @param id
     * @return
     */
    public String byIdSelectName(Integer id);
    
    /**
     * 查詢所有信息:利用query(String sql,RowMapper rowMapper)
     * @return
     */
    public List<Student> select();
    
    
    /**
     * 根據id查詢Student對象
     * @return
     */
    public Student byIdStudent(Integer id);
    
    
    
}

daoImpl:

   

package cn.dao.impl;

import java.math.BigDecimal;
import java.math.BigInteger;
import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.Map;

import org.springframework.dao.DataAccessException;
import org.springframework.jdbc.core.BeanPropertyRowMapper;
import org.springframework.jdbc.core.CallableStatementCallback;
import org.springframework.jdbc.core.CallableStatementCreator;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.RowMapper;

import cn.dao.StudentDao;
import cn.entity.Student;
import cn.util.MyRowMapper;

public class StudentDaoImpl implements StudentDao {
    private JdbcTemplate jdbcTemplate;

    /**
     * 查詢所有的信息
     */
    @Override
    public List<Student> findAll() {
        List<Student> studentsList = new ArrayList<Student>();
        // 查詢的sql語句
        String sql = "select * from student";
        // 調用方法獲取集合數據
        List stuList = jdbcTemplate.queryForList(sql);
        // 遍歷集合,每一個student代表一個Student實體
        Iterator iterator = stuList.iterator();
        while (iterator.hasNext()) {
            Map map = (Map) iterator.next();
            Student stu = new Student();
            stu.setName((String) map.get("name"));
            stu.setId(((BigDecimal) map.get("id")).intValue());
            stu.setAge(((BigDecimal) map.get("age")).intValue());
            studentsList.add(stu);

        }
        return studentsList;
    }

    /**
     * 添加的方法
     */
    @Override
    public void add(Student student) {
        // 1.提供一個可以添加的sql語句
        String sql = "insert into student values(?,?,?)";
        // 2.提供參數
        Object[] args = new Object[] { student.getId(), student.getName(),
                student.getAge() };
        // 3.調用jdbcTemplate的update方法進行添加操作
        jdbcTemplate.update(sql, args);
    }

    /**
     * 刪除
     */
    @Override
    public void delete(Integer id) {
        String sql = "delete from student where id=?";
        // 該方法返回的值是int類型代表受影響行數
        jdbcTemplate.update(sql, id);
    }

    /**
     * 更新的方法
     */
    @Override
    public void update(Student student) {
        String sql = "update student set name=? where id=?";
        Object[] args = new Object[] { student.getName(), student.getId() };
        jdbcTemplate.update(sql, args);

    }

    /**
     * 
     * 查詢總記錄數
     */
    @Override
    public Integer count() {
        String sql = "select count(1) from student";
        Object count = jdbcTemplate.queryForObject(sql, Object.class);
        return ((BigDecimal) count).intValue();
    }

    /**
     * 調用存儲過程實現根據學生id查詢學生姓名
     * 
     * @param id
     * @return
     */
    @SuppressWarnings("unchecked")
    @Override
    public String byIdSelectName(Integer id) {
        String sql = "select name from student where id=?";
        Object[] args = new Object[] { id };
        String name = jdbcTemplate.queryForObject(sql, args,
                java.lang.String.class);
        return name;
    }

    /**
     * 查詢所有信息:利用query(String sql,RowMapper rowMapper)
     * 
     * @return
     */
    @Override
    public List<Student> select() {
        String sql = "select * from student";
        List<Student> list = jdbcTemplate.query(sql, new MyRowMapper());
        return list;
    }

    /**
     * 根據id查詢單個對象
     */
    @Override
    public Student byIdStudent(Integer id) {
        String sql = "select * from student where id=?";
        Student student = jdbcTemplate.queryForObject(sql,
                new BeanPropertyRowMapper<Student>(Student.class), id);
        return student;
    }

    public JdbcTemplate getJdbcTemplate() {
        return jdbcTemplate;
    }

    public void setJdbcTemplate(JdbcTemplate jdbcTemplate) {
        this.jdbcTemplate = jdbcTemplate;
    }

}

service :

package cn.service;

import java.util.List;

import cn.entity.Student;

public interface StudentService {
    /**
        * 查詢全部
        * @return
        */
        public List<Student> findAll();
       
        /**
         * 添加    
         * @param student
         */
        public void add(Student student);
        
        
        /**
         * 刪除
         * @param id
         */
        public  void delete(Integer id);
        
        
        /**
         * 更新
         * @param student
         */
        public void update(Student student);
        
        /**
         * 查詢總記錄數
         * @return
         */
        public Integer count();
        
        /**
         * 調用存儲過程實現根據學生id查詢學生姓名
         * @param id
         * @return
         */
        public String byIdSelectName( final Integer id);
        
        
        /**
         * 查詢所有信息:利用query(String sql,RowMapper rowMapper)
         * @return
         */
        public List<Student> select();
        
        /**
         * 根據id查詢Student對象
         * @return
         */
        public Student byIdStudent(Integer id);
}

service:

   

package cn.service;

import java.util.List;

import cn.entity.Student;

public interface StudentService {
    /**
        * 查詢全部
        * @return
        */
        public List<Student> findAll();
       
        /**
         * 添加    
         * @param student
         */
        public void add(Student student);
        
        
        /**
         * 刪除
         * @param id
         */
        public  void delete(Integer id);
        
        
        /**
         * 更新
         * @param student
         */
        public void update(Student student);
        
        /**
         * 查詢總記錄數
         * @return
         */
        public Integer count();
        
        /**
         * 
         * @param id
         * @return
         */
        public String byIdSelectName(Integer id);
        
        
        /**
         * 查詢所有信息:利用query(String sql,RowMapper rowMapper)
         * @return
         */
        public List<Student> select();
        
        /**
         * 根據id查詢Student對象
         * @return
         */
        public Student byIdStudent(Integer id);
}

 

   serviceImpl

   

package cn.service.impl;

import java.util.List;

import cn.dao.StudentDao;
import cn.entity.Student;
import cn.service.StudentService;

public class StudentServiceImpl implements StudentService {

    private StudentDao stuDao;
    
    @Override
    public List<Student> findAll() {
        // TODO Auto-generated method stub
        return stuDao.findAll();
    }

    @Override
    public void add(Student student) {
        stuDao.add(student);

    }

    @Override
    public void delete(Integer id) {
        stuDao.delete(id);

    }

    @Override
    public void update(Student update) {
        stuDao.update(update);

    }

    public StudentDao getStuDao() {
        return stuDao;
    }

    public void setStuDao(StudentDao stuDao) {
        this.stuDao = stuDao;
    }

    @Override
    public Integer count() {
        return stuDao.count();
    }

    @Override
    public String byIdSelectName(  Integer id) {
        return stuDao.byIdSelectName(id);
    }

    @Override
    public List<Student> select() {
        return stuDao.select();
    }

    @Override
    public Student byIdStudent(Integer id) {
        // TODO Auto-generated method stub
        return stuDao.byIdStudent(id);
    }
    

}

util:

  

package cn.util;

import java.sql.ResultSet;
import java.sql.SQLException;

import org.springframework.jdbc.core.RowMapper;

import cn.entity.Student;

public class MyRowMapper implements RowMapper<Student>{

    @Override
    public Student mapRow(ResultSet rs, int rowNum) throws SQLException {
        Student student=new Student();
        student.setAge(rs.getInt("age"));
        student.setId(rs.getInt("id"));
        student.setName(rs.getString("name"));
        
        return student;
    }

}

3.3配置文件:applicationContext.xml

  

<?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">

    <!-- 1.配置普通數據源 -->
    <!-- <bean id="dataSource"
        class="org.springframework.jdbc.datasource.DriverManagerDataSource">
        指定jdbc驅動
        <property name="driverClassName" value="com.mysql.jdbc.Driver"></property>
        連接數據庫的url地址
        <property name="url" value="jdbc:mysql://localhost:3306/Success"></property>
        連接數據的用戶名和密碼
        <property name="username" value="root"></property>
        <property name="password" value="123"></property>
    </bean> -->
    <!-- 2.c3p0 數據源-->
    <bean id="dataSource"
        class="com.mchange.v2.c3p0.ComboPooledDataSource">
        <!-- 指定jdbc驅動 -->
        <property name="driverClass" value="com.mysql.jdbc.Driver"></property>
        <!-- 連接數據庫的url地址 -->
        <property name="jdbcUrl" value="jdbc:mysql://localhost:3306/Success"></property>
        <!-- 連接數據的用戶名和密碼 -->
        <property name="user" value="root"></property>
        <property name="password" value="123"></property>
    </bean>

    <!-- 2配置jdbcTemplate -->
    <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
        <property name="dataSource" ref="dataSource"></property>

    </bean>

    <!-- 定義dao的實現 -->
    <bean id="stuDaoimpl" class="cn.dao.impl.StudentDaoImpl">
        <!-- 給jdbcTemplate植入引用 -->
        <property name="jdbcTemplate" ref="jdbcTemplate"></property>
    </bean>
    <!-- 定義Service實現 -->
    <bean id="stuserviceimpl" class="cn.service.impl.StudentServiceImpl">
        <!-- 給stuDao植入引用 -->
        <property name="stuDao" ref="stuDaoimpl"></property>
    </bean>

</beans>
        

3.4測試類

   

package cn.test;

import java.util.List;

import org.junit.Before;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import cn.entity.Student;
import cn.service.StudentService;

public class TestHappy {
    private StudentService stuService;
    @Before
    public void before(){
        ApplicationContext context=new ClassPathXmlApplicationContext("applicationContext.xml");
        stuService =(StudentService)context.getBean("stuserviceimpl");
    }
    
    
    /**
     * 測試添加
     */
   @Test
   public void add(){
       stuService.add(new Student(4,"張三4",21));
       System.out.println("add success.............");
   }
   
   /**
    * 更新方法測試
    */
   @Test
   public void update(){
       stuService.update(new Student(002,"張三2"));
       System.out.println("update success.........");
       
   }
   
   

   /**
    * 刪除方法測試
    */
   @Test
   public void delete(){
       stuService.delete(001);
       System.out.println("delete success.........");
       
   }
   
   
   /**
    *查詢方法測試
    */
   @Test
   public void findAll(){
       List<Student> stuList= stuService.findAll();
       for (Student student : stuList) {
        System.out.println("學生編號:"+student.getId()+"\t學生姓名:"+student.getName()+"\t學生年齡:"+student.getAge());
      }
       
   }
   
   /**
    * 查詢學生總記錄數
    */
   @Test
   public void count(){
       Integer result= stuService.count();
       System.out.println("學生總數:"+result);
       
   }
   
   /**
     * 調用存儲過程實現根據學生id查詢學生姓名
     * @param id
     * @return
     */
   @Test
    public void byIdSelectName(){
        
        String  name=stuService.byIdSelectName(2);
        System.out.println("學生姓名:"+name);
    }
   
   /**
     * 查詢所有信息:利用query(String sql,RowMapper rowMapper)
     * @return
     */
   @Test
   public void select(){
       List<Student> list=stuService.select();
       for (Student item : list) {
        System.out.println("學生姓名:"+item.getName());
    }
       
   }
   /**
     * 根據id查詢查詢單個對象
     * @return
     */
  @Test
   public void byIdStudent(){
      Student student=stuService.byIdStudent(2);
      System.out.println(student.getName());
      System.out.println(student.getAge());
   }
   
   
   
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM