Spring 对JDBC的支持

67 篇文章 0 订阅
56 篇文章 0 订阅

Spring 对JDBC的支持

引入jdbc模块:

  • spring-jdbc-4.3.28.RELEASE.jar
  • spring-aop
  • spring-tx
  • aspectjweaver-1.8.9.jar
  • 在这里插入图片描述

核心类是 : JdbcTemplate

(一)将其注册到Spring容器中。

  1. 将 JdbcTemplate 注册到Spring容器中
  2. 还需要注入它所依赖的 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);
    }
}

打印
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值