• 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() 方法

  • 相关阅读:
    Dev GridControl 小结3
    一个web应用的诞生(9)--回到用户
    一个web应用的诞生(8)--博文发布
    一个web应用的诞生(7)--结构调整
    一个web应用的诞生(6)--用户账户
    一个web应用的诞生(5)--数据表单
    一个web应用的诞生(4)--数据存储
    一个web应用的诞生(3)--美化一下
    一个web应用的诞生(2)--使用模板
    一个web应用的诞生(1)--初识flask
  • 原文地址:https://www.cnblogs.com/kjitboy/p/12170241.html
Copyright © 2020-2023  润新知