Spring框架中JdbcTemplate类的查表功能演示(基于Druid连接池)

    将数据库行记录转为已知类的实现对象的思路,作为一个java后端程序员的基本修养,必须掌握,现举其中一例:

步骤:

1.首先需要配置 Druid(阿里巴巴) 连接池环境,写好工具类JDBCUtilsDruid,不再赘述;

2.配置Spring框架环境,不再赘述;

3.演示代码:

    代码中用的数据库为mysql,表数据见下图:

    为方便理解,Druid连接池工具类JDBCUtilsDruid也贴出来,如下:

package com.wen.utils;

import com.alibaba.druid.pool.DruidDataSourceFactory;

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

public class JDBCUtilsDruid {
    private static DataSource ds=null;

    static{
        InputStream is = JDBCUtilsDruid.class.getClassLoader().getResourceAsStream("druid.properties");
        Properties properties=new Properties();

        try {
            properties.load(is);
            ds= DruidDataSourceFactory.createDataSource(properties);
        } catch (Exception e) {
            e.printStackTrace();
        }finally {
            try {
                is.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }

    public static DataSource getDateSource(){
        return ds;
    }

    public static Connection getConnection() throws SQLException {
        return ds.getConnection();
    }

    public static void close(ResultSet resultSet, Statement statement, Connection connection){
        closeSource(resultSet);
        closeSource(statement);
        closeSource(connection);
    }

    public static void close(Statement statement,Connection connection){
        close(null,statement,connection);
    }

    private static void closeSource(ResultSet resultSet){
        try {
            if (resultSet!=null)
                resultSet.close();
        } catch (SQLException e) {
            e.printStackTrace();
        }finally {
            resultSet=null;
        }
    }
    private static void closeSource(Statement statement){
        try {
            if (statement!=null)
                statement.close();
        } catch (SQLException e) {
            e.printStackTrace();
        }finally {
            statement=null;
        }
    }
    private static void closeSource(Connection connection){
        try {
            if(connection!=null)
                connection.close();
        } catch (SQLException e) {
            e.printStackTrace();
        }finally {
            connection=null;
        }
    }
}

    与行记录对应的Mylove类源代码如下:

package com.wen.day05;

import java.util.Objects;

public class Mylove {
    private int id;
    private String name;

    public Mylove() {
    }

    public Mylove(int id, String name) {
        this.id = id;
        this.name = name;
    }

    public int getId() {
        return id;
    }

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

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    @Override
    public String toString() {
        return "Mylove{" +
                "id=" + id +
                ", name='" + name + '\'' +
                '}';
    }

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        Mylove mylove = (Mylove) o;
        return id == mylove.id &&
                Objects.equals(name, mylove.name);
    }

    @Override
    public int hashCode() {
        return Objects.hash(id, name);
    }
}

    主要方法演示代码如下:

package com.wen.day05;

import com.wen.utils.JDBCUtilsDruid;
import org.junit.Test;
import org.springframework.jdbc.core.BeanPropertyRowMapper;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.RowMapper;

import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.List;
import java.util.Map;

public class Test08_JdbcTemplate_Retrive {
    @Test
    public void tests(){
        //返回指定类型对象
        test1();
        //返回单条记录的Map集合
        test2();
        //返回表的List<Map<K,V>>集合
        test3();
        //返回一个单条记录对应的指定类型对象(使用RowMapper)
        test4();
        //返回一个单条记录对应的指定类型对象(使用BeanPropertyRowmapper)
        test5();
        //返回一个多条记录对应的指定对象的List集合
        test6();
        //使用query语句,且使用BeanRowmapper 并返回List<对象>集合
        test7();
    }
    //查询返回单个值
    private void test1() {
        String sql="SELECT name FROM mylove WHERE id=? ";
        JdbcTemplate jdbcTemplate=new JdbcTemplate(JDBCUtilsDruid.getDateSource());
        String s = jdbcTemplate.queryForObject(sql, String.class, 1);
        System.out.println(s);
        System.out.println("=========");
    }
    //查询一条记录返回属性的Map集合
    private void test2() {
        String sql="SELECT * FROM mylove WHERE id=?";
        JdbcTemplate jdbcTemplate=new JdbcTemplate(JDBCUtilsDruid.getDateSource());
        Map<String, Object> stringObjectMap = jdbcTemplate.queryForMap(sql, 3);
        System.out.println(stringObjectMap);
        System.out.println("=========");
    }
    //查询一张虚拟表返回一个List<Map<>>集合
    private void test3() {
        String sql="SELECT * FROM mylove WHERE id IN (?,?,?)";
        JdbcTemplate jdbcTemplate=new JdbcTemplate(JDBCUtilsDruid.getDateSource());
        List<Map<String, Object>> maps = jdbcTemplate.queryForList(sql, 1, 2, 3);
        System.out.println(maps);
        System.out.println("=========");
    }
    //查询一条记录,并返回一个对象(RowMapper)
    private void test4() {
        String sql="SELECT * FROM mylove WHERE id=?";
        JdbcTemplate jdbcTemplate=new JdbcTemplate(JDBCUtilsDruid.getDateSource());
        Mylove mylove = jdbcTemplate.queryForObject(sql, new RowMapper<Mylove>() {
            @Override
            public Mylove mapRow(ResultSet resultSet, int i) throws SQLException {
                Mylove mylove = new Mylove();
                mylove.setId(resultSet.getInt("id"));
                mylove.setName(resultSet.getString("name"));
                return mylove;
            }
        }, 1);
        System.out.println("使用Rowmapper");
        System.out.println(mylove);
        System.out.println("==========");
    }

    //查询一条记录,并返回一个对象(BeanRowmapper)
    private void test5() {
        String sql="SELECT * FROM mylove WHERE id=?";
        JdbcTemplate jdbcTemplate=new JdbcTemplate(JDBCUtilsDruid.getDateSource());
        Mylove mylove = jdbcTemplate.queryForObject(sql,new BeanPropertyRowMapper<Mylove>(Mylove.class),2);
        System.out.println("使用BeanRowmapper");
        System.out.println(mylove);
        System.out.println("==========");
    }
    //使用query语句,且使用Rowmapper 并返回List<对象>集合
    private void test6() {
        String sql="SELECT * FROM mylove WHERE id IN (?,?,?)";
        JdbcTemplate jdbcTemplate=new JdbcTemplate(JDBCUtilsDruid.getDateSource());
        List<Mylove> mylove = jdbcTemplate.query(sql, new RowMapper<Mylove>() {
            @Override
            public Mylove mapRow(ResultSet resultSet, int i) throws SQLException {
                Mylove mylove = new Mylove();
                mylove.setId(resultSet.getInt("id"));
                mylove.setName(resultSet.getString("name"));
                return mylove;
            }
        }, 1, 2, 3);
        System.out.println("使用Rowmapper");
        System.out.println(mylove);
        System.out.println("==========");
    }
    //使用query语句,且使用BeanRowmapper 并返回List<对象>集合
    private void test7() {
        String sql="SELECT * FROM mylove WHERE id IN (?,?,?)";
        JdbcTemplate jdbcTemplate=new JdbcTemplate(JDBCUtilsDruid.getDateSource());
        List<Mylove> mylove = jdbcTemplate.query(sql, new BeanPropertyRowMapper<Mylove>(Mylove.class), 4, 2, 3);
        System.out.println("使用BeanRowmapper");
        System.out.println(mylove);
        System.out.println("==========");
    }
}

    执行结果如下:供各位比对:

扫描二维码关注公众号,回复: 4245308 查看本文章
"C:\Program Files\Java\jdk1.8.0_171\bin\java.exe" -ea -Didea.test.cyclic.buffer.size=1048576 -javaagent:D:\jetBrains\apps\IDEA-C\ch-0\182.3684.101\lib\idea_rt.jar=54143:D:\jetBrains\apps\IDEA-C\ch-0\182.3684.101\bin -Dfile.encoding=UTF-8 -classpath "D:\jetBrains\apps\IDEA-C\ch-0\182.3684.101\lib\idea_rt.jar;D:\jetBrains\apps\IDEA-C\ch-0\182.3684.101\plugins\junit\lib\junit-rt.jar;D:\jetBrains\apps\IDEA-C\ch-0\182.3684.101\plugins\junit\lib\junit5-rt.jar;C:\Program Files\Java\jdk1.8.0_171\jre\lib\charsets.jar;C:\Program Files\Java\jdk1.8.0_171\jre\lib\deploy.jar;C:\Program Files\Java\jdk1.8.0_171\jre\lib\ext\access-bridge-64.jar;C:\Program Files\Java\jdk1.8.0_171\jre\lib\ext\cldrdata.jar;C:\Program Files\Java\jdk1.8.0_171\jre\lib\ext\dnsns.jar;C:\Program Files\Java\jdk1.8.0_171\jre\lib\ext\jaccess.jar;C:\Program Files\Java\jdk1.8.0_171\jre\lib\ext\jfxrt.jar;C:\Program Files\Java\jdk1.8.0_171\jre\lib\ext\localedata.jar;C:\Program Files\Java\jdk1.8.0_171\jre\lib\ext\nashorn.jar;C:\Program Files\Java\jdk1.8.0_171\jre\lib\ext\sunec.jar;C:\Program Files\Java\jdk1.8.0_171\jre\lib\ext\sunjce_provider.jar;C:\Program Files\Java\jdk1.8.0_171\jre\lib\ext\sunmscapi.jar;C:\Program Files\Java\jdk1.8.0_171\jre\lib\ext\sunpkcs11.jar;C:\Program Files\Java\jdk1.8.0_171\jre\lib\ext\zipfs.jar;C:\Program Files\Java\jdk1.8.0_171\jre\lib\javaws.jar;C:\Program Files\Java\jdk1.8.0_171\jre\lib\jce.jar;C:\Program Files\Java\jdk1.8.0_171\jre\lib\jfr.jar;C:\Program Files\Java\jdk1.8.0_171\jre\lib\jfxswt.jar;C:\Program Files\Java\jdk1.8.0_171\jre\lib\jsse.jar;C:\Program Files\Java\jdk1.8.0_171\jre\lib\management-agent.jar;C:\Program Files\Java\jdk1.8.0_171\jre\lib\plugin.jar;C:\Program Files\Java\jdk1.8.0_171\jre\lib\resources.jar;C:\Program Files\Java\jdk1.8.0_171\jre\lib\rt.jar;C:\Users\Administrator\Desktop\myprojects\out\production\mysql;C:\Users\Administrator\.m2\repository\junit\junit\4.12\junit-4.12.jar;C:\Users\Administrator\.m2\repository\org\hamcrest\hamcrest-core\1.3\hamcrest-core-1.3.jar;C:\Users\Administrator\Desktop\myprojects\mysql\lib\mysql-connector-java-5.1.37-bin.jar;C:\Users\Administrator\Desktop\myprojects\mysql\lib\c3p0-0.9.1.2.jar;C:\Users\Administrator\Desktop\myprojects\mysql\lib\druid-1.0.9.jar;C:\Users\Administrator\Desktop\myprojects\mysql\lib\JDBCTemplate\commons.logging-1.1.1.jar;C:\Users\Administrator\Desktop\myprojects\mysql\lib\JDBCTemplate\spring-beans-5.0.2.RELEASE.jar;C:\Users\Administrator\Desktop\myprojects\mysql\lib\JDBCTemplate\spring-core-5.0.2.RELEASE.jar;C:\Users\Administrator\Desktop\myprojects\mysql\lib\JDBCTemplate\spring-jdbc-5.0.2.RELEASE.jar;C:\Users\Administrator\Desktop\myprojects\mysql\lib\JDBCTemplate\spring-tx-5.0.2.RELEASE.jar" com.intellij.rt.execution.junit.JUnitStarter -ideVersion5 -junit4 com.wen.day05.Test08_JdbcTemplate_Retrive,tests
九月 13, 2018 11:20:09 上午 com.alibaba.druid.support.logging.JakartaCommonsLoggingImpl info
信息: {dataSource-1} inited
黄晴
=========
{id=3, name=晴晴}
=========
[{id=1, name=黄晴}, {id=2, name=黄黄}, {id=3, name=晴晴}]
=========
使用Rowmapper
Mylove{id=1, name='黄晴'}
==========
使用BeanRowmapper
Mylove{id=2, name='黄黄'}
==========
使用Rowmapper
[Mylove{id=1, name='黄晴'}, Mylove{id=2, name='黄黄'}, Mylove{id=3, name='晴晴'}]
==========
使用BeanRowmapper
[Mylove{id=2, name='黄黄'}, Mylove{id=3, name='晴晴'}, Mylove{id=4, name='晴儿'}]
==========

Process finished with exit code 0

总结:

主要演示了JdbcTemplate中较为f繁杂的查询方法:

test1();//返回指定类型对象

test2();//返回单条记录的Map集合

test3();//返回表的List<Map<K,V>>集合

test4();//返回一个单条记录对应的指定类型对象(使用RowMapper)

test5();//返回一个单条记录对应的指定类型对象(使用BeanPropertyRowmapper)

test6();//返回一个多条记录对应的指定对象的List集合

test7();//使用query语句,且使用BeanRowmapper 并返回List<对象>集合

-----------------------以上,供各位参考,也方便自己使用复制粘贴da大法---------------------------

猜你喜欢

转载自blog.csdn.net/weixin_42711325/article/details/82685396