003java连接数据库(三)之Spring JDBC

##Spring JDBC

*Spring 框架对JDBC进行简单的封装。提供了一个JDBCTemplate对象简化JDBC的开发。

*步骤:

1.导入jar包
2.创建jdbcTemplate对象。依赖于数据源DataSource
    *jdbcTemplate template = new JdbcTemplate(ds);
3.调用jdbcTemplate的方法来完成CRUD操作。
    *update():执行DML语句。增,删,改语句。
    *queryForMap():查询结果将结果集封装为map集合
    *queryForList():查询结果将结果集封装为list集合
    *query():查询结果,将结果封装为JavaBean对象
        query的参数:RowMapper
            一般我们使用BeanPropertyRowMapper实现类。可以完成数据到JavaBean的自动封装。
            new BeanPropertyRowMapper<类型>(类型.class)
            
    *queryForObject:查询结果,将结果封装为对象
        一般用于聚合函数的查询

练习:

需求:

1.修改 1 号数据的 salary 为 10000
2.添加一条记录
3.删除刚才添加的记录
4.查询所有的记录,将其封装为Map集合
5.查询所有的记录,将其封装为List
6.查询所有的记录,将其封装为Emp对象的List集合
7.查询总记录数

 

Emp

package cn.itcast.domain;

import java.util.Date;

/*
* 封装Emp表数据的javaBean
* */
public class Emp {
    private Integer id;
    private String ename;
    private Integer job_id;
    private Integer mgr;
    private Date joindate;
    private Double salary;
    private Double bonus;
    private Integer dept_id;

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getEname() {
        return ename;
    }

    public void setEname(String ename) {
        this.ename = ename;
    }

    public Integer getJob_id() {
        return job_id;
    }

    public void setJob_id(Integer job_id) {
        this.job_id = job_id;
    }

    public Integer getMgr() {
        return mgr;
    }

    public void setMgr(Integer mgr) {
        this.mgr = mgr;
    }

    public Date getJoindate() {
        return joindate;
    }

    public void setJoindate(Date joindate) {
        this.joindate = joindate;
    }

    public Double getSalary() {
        return salary;
    }

    public void setSalary(Double salary) {
        this.salary = salary;
    }

    public Double getBonus() {
        return bonus;
    }

    public void setBonus(Double bonus) {
        this.bonus = bonus;
    }

    public Integer getDept_id() {
        return dept_id;
    }

    public void setDept_id(Integer dept_id) {
        this.dept_id = dept_id;
    }

    @Override
    public String toString() {
        return "Emp{" +
                "id=" + id +
                ", ename='" + ename + '\'' +
                ", job_id=" + job_id +
                ", mgr=" + mgr +
                ", joindate=" + joindate +
                ", salary=" + salary +
                ", bonus=" + bonus +
                ", dept_id=" + dept_id +
                '}';
    }
}

 

package cn.itcast.jdbctemplate;

import cn.itcast.util.JDBCUtils2;
import org.springframework.jdbc.core.JdbcTemplate;

/**
 * JdbcTemplate入门
 */
public class jdbcTemplateDemo1 {
    public static void main(String[] args) {
        //1.导入jar包
        //2.创建jdbcTemplate对象
        JdbcTemplate template = new JdbcTemplate(JDBCUtils2.getDataSource());
        //3.调用方法
        String sql = "update account set balance = 5000  where id = ?";
        int count = template.update(sql,3);
        System.out.println(count);
    }
}

 

package cn.itcast.jdbctemplate;

import cn.itcast.domain.Emp;
import cn.itcast.util.JDBCUtils2;
import org.junit.Test;
import org.springframework.jdbc.core.BeanPropertyRowMapper;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.RowMapper;

import java.lang.reflect.Field;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.List;
import java.util.Map;

public class jdbcTemplateDemo2 {

    //1.获取jdbcTemplate对象
    private JdbcTemplate template = new JdbcTemplate(JDBCUtils2.getDataSource());

    //Junit单元测试,可以让方法独立执行
    /**
     * 1.修改 1 号数据的 salary 为 10000
     */
    @Test
    public void test1(){
        //2.定义sql语句
        String sql = "update emp set salary = 100000 where id = 1001";
        //3.执行sql
        int count = template.update(sql);
        System.out.println(count);
    }

    /**
     * 2.添加一条记录
     */
    @Test
    public void test2(){
        String sql = "insert into emp(id,ename,dept_id) values(?,?,?)";
        int count = template.update(sql,1015,"郭靖",10);
        System.out.println(count);
    }

    /**
     * 3.删除刚才添加的记录
     */
    @Test
    public void test3(){
        //2.定义sql语句
        String sql = "delete from emp where id = ?";
        //3.执行sql
        int count = template.update(sql,1015);
        System.out.println(count);
    }

    /**
     * 4.查询id为1001的记录,将其封装为Map集合
     * PS:这个方法查询的结果集长度只能是1,将列名作为key,将值作为value,将这条记录封装为一个map集合
     */
    @Test
    public void test4(){
        String sql = "select *  from emp where id = ?";
        Map<String, Object> map = template.queryForMap(sql,1001);

        System.out.println(map);

    }

    /**
     * 5.查询所有的记录,将其封装为List
     * PS:将每一条记录装载为一个map集合,再将map集合装载到list集合
     */
    @Test
    public void test5(){
        String sql = "select * from emp";
        List<Map<String,Object>> list = template.queryForList(sql);

        for(Map<String,Object> StringObjectMap : list){
            System.out.println(StringObjectMap);
        }
    }

    /**
     * 6.查询所有的记录,将其封装为Emp对象的List集合
     */
    @Test
    public void test6(){
        String sql = "select * from emp";
        List<Emp> list = template.query(sql, new BeanPropertyRowMapper<Emp>(Emp.class));
        for(Emp emp : list){
            System.out.println(emp);
        }
    }

    /**
     * 7.查询总记录数
     */
    @Test
    public void test7(){
        String sql = "select count(id) from emp";
        Long total = template.queryForObject(sql,Long.class);
        System.out.println(total);
    }


}

 

 

JDBCUtil2

package cn.itcast.util;

import com.alibaba.druid.pool.DruidDataSource;
import com.alibaba.druid.pool.DruidDataSourceFactory;

import javax.sql.DataSource;
import java.io.IOException;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Properties;

/**
 * Druid连接池的工具类
 *
 *
 */

public class JDBCUtils2 {


    //1.定义成员变量 DataSource
    private static DataSource ds;

    static {

        try {
            //1.加载配置文件
            Properties pro = new Properties();
            pro.load(JDBCUtils2.class.getClassLoader().getResourceAsStream("druid.properties"));
            //2.获取DataSource
            ds = DruidDataSourceFactory.createDataSource(pro);

        } catch (IOException e) {
            e.printStackTrace();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    /**
     * 获取连接
     *
     */
    public static Connection getConnection() throws SQLException {
        return ds.getConnection();
    }

    /**
     * 释放资源
     *
     */
    public static void close(ResultSet rs, Statement stmt, Connection conn){
        if(rs != null){
            try {
                rs.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
        if(stmt != null){
            try {
                stmt.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
        if(conn != null){
            try {
                conn.close();//归还连接
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }

    public static void close(Statement stmt, Connection conn){
        close(null,stmt,conn);
    }


    /**
     * 获取连接池的方法
     */
    public static DataSource getDataSource(){
        return ds;
    }






}

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值