Spring学习笔记(五):Spring JDBC 框架及应用示例

JDBC 框架概述

在使用普通的 JDBC 数据库时,就会很麻烦的写不必要的代码来处理异常,打开和关闭数据库连接等。但 Spring JDBC 框架负责所有的低层细节,从开始打开连接,准备和执行 SQL 语句,处理异常,处理事务,到最后关闭连接。

所以当从数据库中获取数据时,你所做的是定义连接参数,指定要执行的 SQL 语句,每次迭代完成所需的工作。

Spring JDBC 提供几种方法和数据库中相应的不同的类与接口。我将给出使用 JdbcTemplate 类框架的经典和最受欢迎的方法。这是管理所有数据库通信和异常处理的中央框架类。

JdbcTemplate 类

JdbcTemplate 类执行 SQL 查询、更新语句和存储过程调用,执行迭代结果集和提取返回参数值。它也捕获 JDBC 异常并转换它们到 org.springframework.dao 包中定义的通用类、更多的信息、异常层次结构。

JdbcTemplate 类的实例是线程安全配置的。所以你可以配置 JdbcTemplate 的单个实例,然后将这个共享的引用安全地注入到多个 DAOs 中。

使用 JdbcTemplate 类时常见的做法是在你的 Spring 配置文件中配置数据源,然后共享数据源 bean 依赖注入到 DAO 类中,并在数据源的设值函数中创建了 JdbcTemplate。

Spring JDBC 示例

准备工作1:启动mysql,创建一张表 t_user,以便执行CRUD(增、删、改、查)操作。

create table t_user(
    id int primary key auto_increment,
    username varchar(20),
    password varchar(20),
    account decimal(10,2)
    );

准备工作2:创建一个maven工程,导入必要依赖,pom文件配置如下:


        
            JDK1.8
            
                true
            
            
                1.8
                1.8
                UTF-8
            
        
  
  
    
       org.springframework
       spring-context
       4.3.0.RELEASE
     
     
       org.aspectj
       aspectjweaver
       1.8.9
     
     
       cglib
       cglib
       3.2.4
     
     
    	org.springframework
    	spring-jdbc
    	5.0.8.RELEASE
	
	
    	mysql
    	mysql-connector-java
    	6.0.6
	
  

准备工作3:创建数据访问对象接口文件 UserDAO.java 的内容:

package com.yingshulan.spring_learning.api;

import java.util.List;

public interface UserDAO
{
    /**
     * 新增用戶
     * @param user
     * @return
     * @throws Exception
     */
    public int insertUser(User user) throws Exception;

    /**
     * 修改用戶
     * @param user
     * @param id
     * @return
     * @throws Exception
     */
    public int updateUser(User user, int id) throws Exception;

    /**
     * 刪除用戶
     * @param id
     * @return
     * @throws Exception
     */
    public int deleteUser(int id) throws Exception;

    /**
     * 根据id查询用户信息
     * @param id
     * @return
     * @throws Exception
     */
    public User selectUserById(int id) throws Exception;

    /**
     * 查询所有的用户信息
     * @return
     * @throws Exception
     */
    public List selectAllUser() throws Exception;
}

准备工作4:创建与数据库中数据表 t_user 对应的实体类 User.java ,这是数据核心,它是真正被操作的实体。

package com.yingshulan.spring_learning.api;

import java.io.Serializable;


public class User implements Serializable
{

    private static final long serialVersionUID = 1L;
    private Integer id;
    private String username;
    private String password;
    private Double account;

    public User()
    {
        super();
    }

    public User(String username, String password, Double account)
    {
        super();
        this.username = username;
        this.password = password;
        this.account = account;
    }

    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 Double getAccount()
    {
        return account;
    }

    public void setAccount(Double account)
    {
        this.account = account;
    }

    @Override
    public String toString()
    {
        return "UserBean [id=" + id + ", username=" + username + ", password=" + password
                + ", account=" + account + "]";
    }

}

准备工作5:创建 UserMapper.java 文件的内容,从数据库中查询得到的数据是以记录的形式存在的,并不是一个对象,因此,我们需要创建一个 “映射” 类,将从数据库中查询到的记录 转化为对象。

package com.yingshulan.spring_learning.api;

import java.sql.ResultSet;
import java.sql.SQLException;
import org.springframework.jdbc.core.RowMapper;


public class UserMapper implements RowMapper 
{
    public User mapRow(ResultSet rs, int rowNum) throws SQLException 
    {
        User user = new User();
        user.setId(rs.getInt("id"));
        user.setUsername(rs.getString("username"));
        user.setAccount(rs.getDouble("account"));
        user.setPassword(rs.getString("password"));
       return user;
    }
 }

准备工作6:下面是为定义接口 StudentDAO 的实现类文件 UserJDBCTemplate.java

package com.yingshulan.spring_learning.api;

import java.util.List;

import javax.sql.DataSource;

import org.springframework.jdbc.core.JdbcTemplate;

public class UserJDBCTemplate implements UserDAO
{
    private DataSource dataSource;
    private JdbcTemplate jdbcTemplateObject;

    public void setDataSource(DataSource dataSource)
    {
        this.dataSource = dataSource;
        this.jdbcTemplateObject = new JdbcTemplate(dataSource);
    }

    @Override
    public int insertUser(User user) throws Exception
    {
        String sql = "insert into t_user (username,password,account) values (?,?,?)";
        jdbcTemplateObject.update(sql, user.getUsername(), user.getPassword(), user.getAccount());
        System.out.println("Created Record: " + user);
        return 0;
    }

    @Override
    public int updateUser(User user, int id) throws Exception
    {
        String sql = "update t_user set username=?,password=?,account=? where id=?";
        jdbcTemplateObject.update(sql, user.getUsername(), user.getPassword(), user.getAccount(),
                user.getId());
        System.out.println("Updated Record: with id = " + id);
        return 0;
    }

    @Override
    public int deleteUser(int id) throws Exception
    {
        String sql = "delete from t_user where id=?";
        jdbcTemplateObject.update(sql, id);
        System.out.println("Deleted Record with id = " + id);
        return 0;
    }

    @Override
    public User selectUserById(int id) throws Exception
    {
        String sql = "select * from t_user where id=?";
        User user = jdbcTemplateObject.queryForObject(sql, new Object[] {id}, new UserMapper());
        ;
        System.out.println("Selected Record with id = " + id);
        return user;
    }

    @Override
    public List selectAllUser() throws Exception
    {
        String sql = "select * from t_user";
        List users = jdbcTemplateObject.query(sql, new UserMapper());
        return users;
    }

}

准备工作7:创建Bean的配置文件Beansjdbc.xml:




   
   
      
      
      
      
   

   
   
          
   

测试代码:

package com.yingshulan.spring_learning.api;

import java.util.List;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class JDBCTest
{

    public static void main(String[] args) throws Exception
    {
        // TODO Auto-generated method stub
        ApplicationContext context = 
                new ClassPathXmlApplicationContext("Beansjdbc.xml");
         UserJDBCTemplate userJDBCTemplate = 
         (UserJDBCTemplate)context.getBean("UserJDBCTemplate");  
         
         // 1.创建一条记录
         System.out.println("------Records Creation--------" );
         userJDBCTemplate.insertUser(new User("wangchongyang","1223dfcfdv12",18.5));
         
         //2. 查询所有记录
         System.out.println("------Listing Multiple Records--------" );
         List userList = userJDBCTemplate.selectAllUser();
         for (User user : userList)
         {
             System.out.println(user);
         }
         
         //3. 删除一条记录
         System.out.println("------Delete Record By ID--------" );
         userJDBCTemplate.deleteUser(3);   
    }
}

运行结果:

------Records Creation--------

Created Record: UserBean [id=null, username=wangchongyang, password=1223dfcfdv12, account=18.5]

------Listing Multiple Records--------
verification.
UserBean [id=1, username=zhangsan, password=abcd1234, account=1234.0]
UserBean [id=2, username=lisi, password=123456789, account=13456.0]
UserBean [id=3, username=wangwu, password=123adfg9, account=34567.0]
UserBean [id=4, username=zhuliu, password=123adfg9, account=34567.0]
UserBean [id=5, username=zhangsan, password=fbdjfvjdf, account=12.5]
UserBean [id=6, username=wangchongyang, password=1223dfcfdv12, account=18.5]

------Delete Record By ID--------
Deleted Record with id = 3

参考博客:

1. https://www.w3cschool.cn/wkspring/iuck1mma.html

你可能感兴趣的:(Spring,Learning)