1. 程式人生 > >Jdbc Template常用的幾種查詢

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());
        }
    }

執行結果: