Jdbc Template常用的几种查询

近期项目中用到Jdbc Template,常用到的几种查询,跟大家分享下。

首先,Jdbc Template需要的jar包:

以maven工程为例,需添加如下依赖:

        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.46</version>
        </dependency>

        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-jdbc</artifactId>
            <version>4.3.10.RELEASE</version>
        </dependency>

        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-tx</artifactId>
            <version>4.3.10.RELEASE</version>
        </dependency>

 spring.xml配置文件(只展示关键部分):

<!-- 数据源1 -->
    <bean id="dataSource1" class="com.alibaba.druid.pool.DruidDataSource" init-method="init"
          destroy-method="close" primary="true">
        <property name="driverClassName" value="com.mysql.jdbc.Driver"/>
        <property name="url"
                  value="jdbc:mysql://localhost:3306/db1?useUnicode=true&amp;characterEncoding=UTF-8"/>
        <property name="username" value="root"/>
        <property name="password" value="123456"/>
        <property name="initialSize" value="1"/>
        <property name="minIdle" value="1"/>
        <property name="maxActive" value="20"/>
    </bean>

    <!-- 定义jdbcTemplate1 -->
    <bean id="jdbcTemplate1" class="org.springframework.jdbc.core.JdbcTemplate">
        <property name="dataSource" ref="dataSource1"/>
    </bean>

    <!-- 数据源2 -->
    <bean id="dataSource2" class="com.alibaba.druid.pool.DruidDataSource" init-method="init"
          destroy-method="close">
        <property name="driverClassName" value="com.mysql.jdbc.Driver"/>
        <property name="url"
                  value="jdbc:mysql://localhost:3306/db2?useUnicode=true&amp;characterEncoding=UTF-8"/>
        <property name="username" value="root"/>
        <property name="password" value="123456"/>
        <property name="initialSize" value="1"/>
        <property name="minIdle" value="1"/>
        <property name="maxActive" value="20"/>
    </bean>

    <!-- 定义jdbcTemplate2 -->
    <bean id="jdbcTemplate2" class="org.springframework.jdbc.core.JdbcTemplate">
        <property name="dataSource" ref="dataSource2"/>
    </bean>

本文给出了连接多个数据源的示例,注意:如果用到多个数据源,一定要指定其中一个为主的(primary="true"), 否则启动的时候会报错。

实现代码示例:

实例化template:

@Resource(name = "jdbcTemplate1")

JdbcTemplate jdbcTemplate;

通过@Resource注解指定数据源,也可以用@Autowired结合@Qualifier或@Inject结合@Named。

1、查询单行单列:

    //根据id查询学生姓名
    public void findStudent() {
        String sql = "select a.name from t_student a where a.id = ?";
        String name = jdbcTemplate.queryForObject(sql, String.class, "698147f622994001b29885aec6932ab1");
        System.out.println("name:" + name);
    }

执行结果:

 

2、查询返回Map(单行)

    //根据id查询学生信息
    public void findStudent() {
        String sql = "select a.* from t_student a where a.id = ?";
        Map studentMap = jdbcTemplate.queryForMap(sql, "698147f622994001b29885aec6932ab1");
        System.out.print("id:" + studentMap.get("id"));
        System.out.print(" name:" + studentMap.get("name"));
        System.out.print(" address:" + studentMap.get("address"));
        System.out.print(" tel:" + studentMap.get("tel"));
        System.out.print(" school:" + studentMap.get("school"));
        System.out.print(" birthday:" + studentMap.get("birthday"));
        System.out.println(" score:" + studentMap.get("score"));
    }

执行结果:

3、查询多行数据,返回至自定义实体。

有多种方法,本文介绍其中一种比较简单的。spring提供了一个RowMapper实现:BeanPropertyRowMapper,它可自动将一行数据映射到指定类的实例中,它首先将这个类实例化,然后通过名称匹配的方式,映射到属性中去(匹配不上的会返回null)。先看一下自定义实体student的结构:

public class Student {
    private String id;
    private String name;
    private String address;
    private String tel;
    private String school;
    private String birthday;
    private Integer score;

    //此处省略了get、set和toString方法。
}

实现代码:

    //查询多条学生信息
    public void findStudent() {
        String sql1 = "select a.id, a.name, a.tel, a.school, a.score, a.birthday, a.address from t_student a where a.school = ?";
        List<Student> students = jdbcTemplate.query(sql1, new BeanPropertyRowMapper<Student>(Student.class), "实验中学");
        for (Student student : students) {
            System.out.println(student.toString());
        }
    }

执行结果:

猜你喜欢

转载自blog.csdn.net/liuyunyihao/article/details/83505114