applicationContext.xml
<!-- 配置c3p0数据源的bean -->
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
<property name="driverClass" value="com.mysql.jdbc.Driver"></property>
<property name="jdbcUrl" value="jdbc:mysql://localhost:3306/demo?useUnicode=true&characterEncoding=UTF-8"></property>
<property name="user" value="root"></property>
<property name="password" value="ele994"></property>
<!-- initialPoolSize创建数据库连接池之后初始化的数据库的连接数,默认值3 -->
<property name="initialPoolSize" value="3"></property>
<!-- 连接池种可以存在的最大连接数,默认15 -->
<property name="maxPoolSize" value="10"></property>
<!-- 当连接池中的连接用完的时候,c3p0一次性创建的新的连接数 -->
<property name="acquireIncrement" value="2"></property>
</bean>
<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
<!-- 这个属性是dataSource类型的数据,需要依赖注入 -->
<!-- ref是引用哪个 对象 -->
<property name="dataSource" ref="dataSource"></property>
</bean>
实体类User
package com.test.day46;
public class User {
private Integer id;
private String name;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public String toString() {
return "User [id=" + id + ", name=" + name + "]";
}
}
实体类对象的集合-泛型User
package com.test.day46;
import java.sql.ResultSet;
import java.sql.SQLException;
import org.springframework.jdbc.core.RowMapper;
/**
* 做实体类与查询结果的映射
* 最后返回实体类对象的集合
* 实现RowMapper接口
* RowMapper有一个泛型,这个泛型就是要做映射的那个实体类
* @author Walker
*
*/
public class UserResult implements RowMapper<User>{
/**
* 遍历结果集的每一行
* 把每一行的查询结果放到一个实体类对象中
* 参数1:每一行的结果集
* 参数2:一个索引值,从0开始,每遍历一行+1
*/
@Override
public User mapRow(ResultSet arg0, int arg1) throws SQLException {
System.out.println("遍历的是:" + (arg1 + 1) + "行的数据");
User user = new User();
// 根据字段名把遍历的一行的某一个字段的值取出来,放到对应的实体类对象的属性中
user.setId(arg0.getInt("id"));
user.setName(arg0.getString("name"));
System.out.println();
return user;
}
}
实体类对象的集合-泛型Map
package com.test.day46;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.HashMap;
import java.util.Map;
import org.springframework.jdbc.core.RowMapper;
public class MapResult implements RowMapper<Map<String, Object>>{
@Override
public Map<String, Object> mapRow(ResultSet arg0, int arg1)
throws SQLException {
Map<String, Object> map = new HashMap<>();
map.put("id", arg0.getInt("id"));
map.put("name", arg0.getString("name"));
return map;
}
}
测试
package com.test.day46;
import java.util.List;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.jdbc.core.JdbcTemplate;
public class ResultTest {
public static void main(String[] args) {
ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");
JdbcTemplate jdbcTemplate = (JdbcTemplate)ctx.getBean("jdbcTemplate");
/**
* jdbcTemplate.query两个参数的时候
* 参数1:sql语句
* 参数2:实体类与结果集的映射类,这个映射类要实现RowMapper接口
*/
// List<User> users = jdbcTemplate.query("select * from user", new UserResult());
/**
* jdbcTemplate.query两个参数的时候
* 参数1:sql语句
* 参数2:实体类与结果集的映射类,这个映射类要实现RowMapper接口
* 参数3:对于占位符,值的写入,是Object数组
*/
List<User> users = jdbcTemplate.query("select * from user where id in (?, ?)", new UserResult(), new Object[]{1, 2});
System.out.println(users.toString());
}
}