Jdbc Template常用的几种查询

xiaoxiao2025-04-25  17

近期项目中用到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()); } }

执行结果:

 

转载请注明原文地址: https://www.6miu.com/read-5029138.html

最新回复(0)