Spring 对JDBC的支持
引入jdbc模块:
- spring-jdbc-4.3.28.RELEASE.jar
- spring-aop
- spring-tx
- aspectjweaver-1.8.9.jar
核心类是 : JdbcTemplate
(一)将其注册到Spring容器中。
- 将 JdbcTemplate 注册到Spring容器中
- 还需要注入它所依赖的 DataSource 对象。
手段1: 构造方法 、 手段2:setter方法
(二)测试准备:
将来在代码中需要访问数据库,可以直接选择注入 jdbcTemplate
。
代码演示:
db-info.properties配置文件
jdbc.driverClassName=com.mysql.jdbc.Driver
jdbc.username=root
jdbc.password=root
jdbc.url=jdbc:mysql:///shop
spring-jdbc.xml 配置文件
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
<!--开启外部配置-->
<bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="location" value="classpath:db-info.properties"/>
</bean>
<!--注入DruidDataSource依賴-->
<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource">
<property name="driverClassName" value="${jdbc.driverClassName}"/>
<property name="username" value="${jdbc.username}"/>
<property name="password" value="${jdbc.password}"/>
<property name="url" value="${jdbc.url}"/>
</bean>
<!--将jdbcTemplate注册到spring容器中 手动配置 class地址是在jdbc jar包里的dbcTemplate的地址-->
<bean name="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
<!--构造方法配入-->
<constructor-arg name="dataSource" ref="dataSource"/>
</bean>
测试:
@RunWith(SpringRunner.class)
@ContextConfiguration("classpath:com/example/spring/spring-jdbc.xml")
public class Demo1 {
@Autowired
private JdbcTemplate jdbcTemplate;
@Test
public void testInert(){
//测试新增操作
jdbcTemplate.update( "insert into admin (id,name,password) value(?,?,?)",7,"zs","123");
}
@Test
public void testUpdate(){
//测试修改操作
jdbcTemplate.update("update admin set name=?, password=? where id=?", "ls","456",6);
}
@Test
public void testDelete(){
//测试删除操作
jdbcTemplate.update("delete from admin where id=?",4);
}
@Test
public void testSelect(){
//测试查询方法
//query方法适用于 查询结果是多行数据
List<Admin> query = jdbcTemplate.query( "select id,name,password,amount from admin",
new BeanPropertyRowMapper<Admin>(Admin.class));
System.out.println(query);
//查询结果是一个对象用 queryForObject方法 对象是 BeanPropertyRowMapper
Admin admin = jdbcTemplate.queryForObject( "select id,name,password,amount from admin where id=?",
new BeanPropertyRowMapper<Admin>( Admin.class ), 2 );
System.out.println(admin);
//查询一行一列数据即总记录数用 queryForObject 对象是类型.class
Long aLong = jdbcTemplate.queryForObject( "select count(1) from admin", long.class );
System.out.println(aLong);
Integer integer = jdbcTemplate.queryForObject( "select count(1) from admin", int.class );
System.out.println(integer);
//将多行结果映射到一个map集合中用 queryForList
List<Map<String, Object>> maps = jdbcTemplate.queryForList( "select id,name,password,amount from admin" );
System.out.println(maps);
//将一行结果映射到一个map中用 queryForList
List<Map<String, Object>> maps1 = jdbcTemplate.queryForList( "select id,name,password,amount from admin where id=1" );
System.out.println(maps1);
//将多行结果映射到一个 map 集合中。 当结果不存在时返回空集合。 而非 null。
// List<Map<String, Object>> maps = jdbcTemplate.queryForList("select id ,name from t1 where id=100");
// System.out.println(maps);
// Incorrect result size: expected 1, actual 0 当结果不是1条时,会报错
// Map<String, Object> objectMap1 = jdbcTemplate.queryForMap("select id,name from t1 where id= 100");
// System.out.println(objectMap1);
}
}
打印