zoukankan      html  css  js  c++  java
  • Spring JdbcTemplate

    Spring JDBC是spring所提供的持久层技术,它的主要目的是降低JDBC API的使用难度,以一种更直接、更简洁的方式使用 JDBC API。

    spring中的JDBC模块负责数据库资源管理,可以省去连接和关闭数据库的代码,简化了对数据库的操作,使得开发人员无需在数据库操作上花更多精力,可以从繁琐的数据库操作中解脱出来,从而将更多的精力投入到编写业务逻辑中。

    定义 JdbcTemplate时,需要将dataSource注入到JdbcTemplate中,而其他需要使用JdbcTemplate的Bean,也需要将JdbcTemplate注入到该Bean中。(通常注入到数据访问层Dao类中,在Dao类中进行与数据库的相关操作)

    dataSource的配置是JDBC连接数据库时所需要的四个属性(driverClassName,url,username,password)

     1 <?xml version="1.0" encoding="UTF-8"?>
     2 <beans xmlns="http://www.springframework.org/schema/beans"
     3     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     4     xmlns:context="http://www.springframework.org/schema/context"
     5     xsi:schemaLocation="http://www.springframework.org/schema/beans
     6         https://www.springframework.org/schema/beans/spring-beans.xsd
     7         http://www.springframework.org/schema/context
     8         https://www.springframework.org/schema/context/spring-context.xsd">
     9   
    10 <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
    11     <property name="driverClassName" value="${jdbc.driverClassName}"/>
    12     <property name="url" value="${jdbc.url}"/>
    13     <property name="username" value="${jdbc.username}"/>
    14     <property name="password" value="${jdbc.password}"/>
    15 </bean> 
    16   
    17   <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
    18       <property name="dataSource" ref="dataSource"></property>
    19   </bean>
    20   
    23   <context:property-placeholder location="classpath:db.properties"/>
    24    <context:component-scan base-package="com.ssm" />
    25 </beans>
    jdbc.username=root
    jdbc.password=
    jdbc.driverClassName=com.mysql.jdbc.Driver
    jdbc.url=jdbc:mysql://localhost:3306/test
    initPoolSize=5
    maxPoolSize=10


    JdbcTemplate主要提供4种方法:

    1. call()方法: 用于执行存储过程、存储函数
    2. execute()方法: 可以执行任何SQL语句, 一般用于DDL语句
    3. update()和batchUpdate()方法: 分别对应单个更新、批量更新的语句执行
    4. query()和queryForXXX()方法: 用于单查、列表查询

    单个更新(JdbcTemplate的大部分方法都是, 参数列表的最右边经常是一个可变参

        @Test
        public void insert() {
            String sql = "insert into pass_user (name,age,gender,birthday,create_time,update_time) values (?,?,?,?,?,?)";
            jdbcTemplate.update(sql, "张三丰", 18, "male", Instant.now().toEpochMilli(), Instant.now().toEpochMilli(), Instant.now().toEpochMilli());
        }

    批量更新

     @Test
        public void batchInsert() {
            String sql = "insert into pass_user (name,age,gender,birthday,create_time,update_time) values (?,?,?,?,?,?)";
            List<Object[]> args = new ArrayList<>();
            for (int i = 0; i < 5; i++) {
                args.add(new Object[]{"张三丰", 18, "male", Instant.now().toEpochMilli(), Instant.now().toEpochMilli(), Instant.now().toEpochMilli()});
            }
            jdbcTemplate.batchUpdate(sql, args);
        }

    获取单个记录的所有列值

    通过RowMapper映射, 我们可以通过 queryForObject() 方法获取单个记录的所有列值, 映射方法有两种。

    第一种方式是实体类不用实现RowMapper接口, 但是实体类的属性名必须和表中的列名符合驼峰命名匹配,能一一对应起来, 如果两者不一致,则需要在sql语句中给对应的列取一个别名。

    RowMapper<User> rowMapper = new BeanPropertyRowMapper<>(User.class);
    

    第二种方式需要实体类实现RowMapper接口,覆写 mapRow() 方法

  • 相关阅读:
    第四次作业——个人作业——软件案例分析
    作业五——团队项目——需求规格说明书
    团队项目——团队展示
    作业三——结对编程
    作业二——结对项目之需求分析与原型模型设计
    leetcode 212 单词搜索II
    leetcode 130. 被围绕的区域
    leetcode 695 Max Area of Island 岛的最大面积
    【《算法》学习笔记】一:
    leetcode 191 位1的个数
  • 原文地址:https://www.cnblogs.com/kjitboy/p/12170241.html
Copyright © 2011-2022 走看看