• 【Java/JdbcTemplate】JdbcTemplate的三种典型查询应用场景:查数量,查单字段列表,查对象列表


    虽说现在访问DB是MyBatis的天下,但JDBC凭借其广泛性及Spring提供的org.springframework.jdbc.core.JdbcTemplat凭借其小巧灵活性依然不可或缺,下文笔者总结了JdbcTemplate的三种典型查询应用场景:查数量queryForObject,查单字段列表queryForList,查对象列表jdbcTplt.query(sql, new RowMapper...),留此以备查阅。

    代码:

    package com.hy.lab.jdbctplt;
    
    import org.springframework.jdbc.core.JdbcTemplate;
    import org.springframework.jdbc.core.RowMapper;
    
    import java.sql.ResultSet;
    import java.sql.SQLException;
    import java.util.List;
    
    class Emp{
        long id;
        String name;
        int age;
    
        public Emp(long id,String name,int age){
            this.id=id;
            this.name=name;
            this.age=age;
        }
    
        public String toString(){
            return "Emp id:"+id+" name="+name+" age="+age;
        }
    }
    public class Test {
        // 例一:查数量
        private static void queryForInt(){
            String sql="select count(*) from emp0519";
            int count=DsUtil.getJdbcTplt().queryForObject(sql,Integer.class);
            System.out.println(count);
        }
    
        // 例二:查单字段列表
        private static void queryForStringList(){
            String sql="select name from emp0519";
            JdbcTemplate jtplt=HikariDsUtil.getJdbcTplt();
            List<String> ls=jtplt.queryForList(sql,String.class);
            for(String name:ls){
                System.out.println(name);
            }
        }
    
        // 例三:查对象列表
        private static void queryForObjList(){
            String sql="select id,name,age from emp0519";
            JdbcTemplate jdbcTplt=HikariDsUtil.getJdbcTplt();
            List<Emp> emps = jdbcTplt.query(sql, new RowMapper<Emp>() {
                @Override
                public Emp mapRow(ResultSet rs, int rowNum) throws SQLException {
    
                    long id=rs.getInt("id");
                    String name=rs.getString("name");
                    int age=rs.getInt("age");
    
                    return new Emp(id,name,age);
                }});
    
            for(Emp emp:emps){
                System.out.println(emp);
            }
        }
    
        public static void main(String[] args){
            queryForInt();
            queryForStringList();
            queryForObjList();
        }
    }

    以上关键语句已用红色标出:

    下面是辅助性的类:

    HikariDsUtil类:

    package com.hy.lab.jdbctplt;
    
    import com.zaxxer.hikari.HikariDataSource;
    import org.apache.ibatis.datasource.pooled.PooledDataSource;
    import org.springframework.jdbc.core.JdbcTemplate;
    
    public class HikariDsUtil {
        private static final String DRIVER="oracle.jdbc.OracleDriver";
        private static final String URL="jdbc:oracle:thin:@127.0.0.1:1521:orcl";
        private static final String USER="luna";
        private static final String PSWD="1234";
    
        // MyBatis框架的DataSource类:org.apache.ibatis.datasource.pooled.PooledDataSource
        private static HikariDataSource ds;
    
        static {
            ds=new HikariDataSource();
            ds.setDriverClassName(DRIVER);
            ds.setJdbcUrl(URL);
            ds.setUsername(USER);
            ds.setPassword(PSWD);
            ds.setMinimumIdle(10);
            ds.setMaximumPoolSize(10);
        }
    
        public static JdbcTemplate getJdbcTplt(){
            return new JdbcTemplate(ds);
        }
    }

    DsUtil类:

    package com.hy.lab.jdbctplt;
    
    import org.apache.ibatis.datasource.pooled.PooledDataSource;
    import org.springframework.boot.autoconfigure.jdbc.JdbcTemplateAutoConfiguration;
    import org.springframework.jdbc.core.JdbcTemplate;
    
    public class DsUtil {
        private static final String DRIVER="oracle.jdbc.OracleDriver";
        private static final String URL="jdbc:oracle:thin:@127.0.0.1:1521:orcl";
        private static final String USER="luna";
        private static final String PSWD="1234";
    
        // MyBatis框架的DataSource类:org.apache.ibatis.datasource.pooled.PooledDataSource
        private static PooledDataSource ds;
    
        static {
            ds=new PooledDataSource(DRIVER,URL,USER,PSWD);
        }
    
        public static JdbcTemplate getJdbcTplt(){
            return new JdbcTemplate(ds);
        }
    }

    整理之后的输出:

    4
    
    杨志
    林冲
    索超
    秦明
    
    Emp id:1 name=杨志 age=25
    Emp id:2 name=林冲 age=35
    Emp id:3 name=索超 age=45
    Emp id:4 name=秦明 age=55

    表定义:

    create table emp0519(
        id number(10),
        name nvarchar2(20),
        age number(3)
    )

    表数据:

    insert into emp0519(id,name,age) values(1,'杨志',25);
    insert into emp0519(id,name,age) values(2,'林冲',35);
    insert into emp0519(id,name,age) values(3,'索超',45);
    insert into emp0519(id,name,age) values(4,'秦明',55);

    END

  • 相关阅读:
    Clob实践
    Read Clob字段 Function最终版
    asp.net mvc proflie 使用 区别 疑惑
    csdn中关于程序员的一封信
    【解惑】女生适合干计算机什么方面的工作
    网络女友跟现实女友的区别
    [转]俞敏洪老师郑州大学演讲
    【解惑】这么多技术我该怎么学
    google使用技巧
    杨澜给二十几岁女孩子的忠告
  • 原文地址:https://www.cnblogs.com/heyang78/p/16293744.html
Copyright © 2020-2023  润新知