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());
   }

}

Spring中的JdbcTemplate使用的更多相关文章

  1. Spring中的JDBCTemplate

    src\dayday\JDBCTestTest package dayday;import com.sun.org.apache.xalan.internal.xsltc.compiler.Templ ...

  2. (六)Spring 中的 JdbcTemplate

    目录 概念 配置数据库 创建 JdbcTemplate 对象 增删改查代码 概念 JdbcTemplate : 是 Spring 中对持久层(JDBC 技术)一个封装 : 使用起来和 Dbutuis ...

  3. Spring中的JdbcTemplate的使用

    一.jdbcTemplate的作用 它就是用于和数据库交互的,实现对表的crud.与dbutils相似 二.JdbcTemplate的使用 <dependency> <groupId ...

  4. Spring 中的 JDBCTemplate

    新建一个java工程 写好spring配置文件,直接上代码 <?xml version="1.0" encoding="UTF-8"?> <b ...

  5. Spring中的设计模式学习

    Spring提供了一种Template的设计哲学,包含了很多优秀的软件工程思想. 1. 简单工厂 又叫做静态工厂方法(StaticFactory Method)模式,但不属于23种GOF设计模式之一. ...

  6. Spring中的设计模式

    [Spring中的设计模式] http://www.uml.org.cn/j2ee/201301074.asp [详解设计模式在Spring中的应用]    [http://www.geek521.c ...

  7. spring 中的设计模式

    https://mp.weixin.qq.com/s?__biz=MzU0MDEwMjgwNA==&mid=2247485205&idx=1&sn=63455d2313776d ...

  8. Spring中使用的设计模式

    目录 Spring使用的设计模式 1.单例模式 2.原型模式 3.模板模式 4.观察者模式 5.工厂模式 简单工厂模式 工厂方法模式 6.适配器模式 7.装饰者模式 8.代理模式 9.策略模式   S ...

  9. 详解设计模式在Spring中的应用

    设计模式作为工作学习中的枕边书,却时常处于勤说不用的尴尬境地,也不是我们时常忘记,只是一直没有记忆. 今天,在IT学习者网站就设计模式的内在价值做一番探讨,并以spring为例进行讲解,只有领略了其设 ...

随机推荐

  1. faster_rcnn c++版本的 caffe 封装(1)

    转载请注明出处,楼燚(yì)航的blog,http://www.cnblogs.com/louyihang-loves-baiyan/ 由于需要把FasterRCNN做的工程化,因此这里需要对Caff ...

  2. js实现九九乘法表

    <script type="text/javascript"> var sum=0; var wite; for (var i = 1; i < 10; i++) ...

  3. Linux常用命令(二)

    2.2.其他权限管理命令 命令名称:chown 功能:更改文件目录或文件的所有者语法:chown[用户][文件或目录]命令名称:chgrp 功能:改变文件或目录的所属组语法:chgrp[用户][文件或 ...

  4. Java面试宝典摘抄

    1,ClassLoader知识 加载流程:当运行一个程序时,JVM启动,运行bootstrap classloader,该classloader加载Java核心API(此时ExtClassLoader ...

  5. C#.NET 大型通用信息化系统集成快速开发平台 4.1 版本 - 密码强化、网络安全强化

    公司的系统庞大后,用户数量也庞大,容易引起各种网络安全相关问题,需要把每个用户的网络安全意识都提高,由于历史原因有些用户的密码过于简单,很容易被猜到,引起很多没必要的麻烦. 系统登录成功后,检查密码复 ...

  6. J2EE,J2SE,J2ME,JDK,SDK,JRE,JVM区别

    转自:http://www.metsky.com/archives/547.html 一.J2EE.J2SE.J2ME区别 J2EE——全称Java 2 Enterprise Edition,是Jav ...

  7. Ext小总结

    titleCollapse:true,//高级搜索点击隐藏显示 添加按钮 >弹出页面 1.添加按钮 //核销  在控制层页面添加页面路径>添加操作按钮>window.allOrder ...

  8. 跨域的另一种解决方案——CORS(Cross-Origin Resource Sharing)跨域资源共享

    在我们日常的项目开发时使用AJAX,传统的Ajax请求只能获取在同一个域名下面的资源,但是HTML5打破了这个限制,允许Ajax发起跨域的请求.浏览器是可以发起跨域请求的,比如你可以外链一个外域的图片 ...

  9. knockoutJS学习笔记01:从拼接字符串到编写模板引擎

    开篇 关于knockout的文章,园里已经有很多大神写过了,而且都写得很好.其实knockout学习起来还是很容易的,看看官网的demo和园里的文章,练习练习就可以上手了(仅限使用,不包含研究源码). ...

  10. socketAPI:一个最简单的服务器和对应的客户端C语言的实现

    基于linux,该实例实现了服务端传了一个hello world给客户端.socket()创建socketbind()绑定socket到IP地址和端口listen()服务器监听客户端的连接connec ...