Jdbc Template常用的幾種查詢
阿新 • • 發佈:2018-12-18
近期專案中用到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&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&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());
}
}
執行結果: