下载APP
登录
关闭
讲堂
算法训练营
Python 进阶训练营
企业服务
极客商城
客户端下载
兑换中心
渠道合作
推荐作者
当前播放: 09 | 如何通过Spring JDBC访问数据库
00:00 / 00:00
标清
  • 标清
1.0x
  • 2.0x
  • 1.5x
  • 1.25x
  • 1.0x
  • 0.5x
网页全屏
全屏
00:00
付费课程,可试看

玩转Spring全家桶

共123讲 · 123课时,1300分钟
24763
免费
01 | Spring课程介绍
免费
02 | 一起认识Spring家族的主要...
免费
03 | 跟着Spring了解技术趋势
免费
04 | 编写你的第一个Spring程序
免费
05 | 如何配置单数据源
免费
06 | 如何配置多数据源
07 | 那些好用的连接池们:Hika...
08 | 那些好用的连接池们:Alib...
09 | 如何通过Spring JDBC访问...
10 | 什么是Spring的事务抽象(...
11 | 什么是Spring的事务抽象(...
免费
12 | 了解Spring的JDBC异常抽象
13 | 课程答疑(上)
14 | 课程答疑(下)
15 | 认识Spring Data JPA
16 | 定义JPA的实体对象
17 | 开始我们的线上咖啡馆实战...
18 | 通过Spring Data JPA操...
19 | Spring Data JPA的Repos...
20 | 通过MyBatis操作数据库
21 | 让MyBatis更好用的那些工...
22 | 让MyBatis更好用的那些工...
23 | SpringBucks实战项目进度...
24 | 通过Docker辅助开发
25 | 在Spring中访问MongoDB
26 | 在Spring中访问Redis
27 | Redis的哨兵与集群模式
28 | 了解Spring的缓存抽象
29 | Redis在Spring中的其他用...
30 | SpringBucks实战项目进度...
31 | Project Reactor介绍(上...
32 | Project Reactor介绍(下...
33 | 通过Reactive的方式访问Re...
34 | 通过Reactive的方式访问Mo...
35 | 通过Reactive的方式访问RD...
36 | 通过AOP打印数据访问层的...
37 | 通过AOP打印数据访问层的...
38 | SpringBucks实战项目进度...
39 | 编写第一个Spring MVC C...
40 | 理解Spring的应用上下文
41 | 理解请求的处理机制
42 | 如何定义处理方法(上)
43 | 如何定义处理方法(下)
44 | Spring MVC中的视图解析...
45 | Spring MVC中的视图解析...
46 | Spring MVC中的常用视图...
47 | Spring MVC中的常用视图...
48 | 静态资源与缓存
49 | Spring MVC中的异常处理...
50 | 了解Spring MVC的切入点
51 | SpringBucks实战项目进度...
52 | 课程答疑
53 | 通过RestTemplate访问Web...
54 | RestTemplate的高阶用法
55 | 简单定制RestTemplate
56 | 通过WebClient访问Web资源
57 | SpringBucks实战项目进度...
58 | 设计好的RESTful Web Se...
59 | 设计好的RESTful Web Se...
60 | 什么是HATEOAS
61 | 使用Spring Data REST实...
62 | 使用Spring Data REST实...
63 | 分布式环境中如何解决Sess...
64 | 使用WebFlux代替Spring M...
65 | 使用WebFlux代替Spring M...
66 | SpringBucks实战项目进度...
67 | 认识Spring Boot的组成部...
68 | 了解自动配置的实现原理
69 | 动手实现自己的自动配置
70 | 如何在低版本Spring中快速...
71 | 了解起步依赖及其实现原理
72 | 定制自己的起步依赖
73 | 深挖Spring Boot的配置加...
74 | 理解配置背后的PropertyS...
75 | 认识Spring Boot的各类Ac...
76 | 动手定制自己的Health In...
77 | 通过Micrometer获取运行数...
78 | 通过Spring Boot Admin...
79 | 如何定制Web容器的运行参...
80 | 如何配置容器支持HTTP/2...
81 | 如何配置容器支持HTTP/2...
82 | 如何编写命令行运行的程序
83 | 了解可执行Jar背后的秘密
84 | 如何将Spring Boot应用打...
85 | SpringBucks实战项目进度...
86 | 简单理解微服务
87 | 如何理解云原生(Cloud N...
88 | 12-Factor App(上)
89 | 12-Factor App(下)
90 | 认识Spring Cloud的组成...
91 | 使用Eureka作为服务注册中...
92 | 使用Spring Cloud Loadb...
93 | 使用Feign访问服务
94 | 深入理解服务发现背后的Di...
95 | 使用Zookeeper作为服务注...
96 | 使用Consul作为服务注册中...
97 | 使用Nacos作为服务注册中...
98 | 如何定制自己的Discovery...
99 | SpringBucks实战项目进度...
100 | 使用Hystrix实现服务熔...
101 | 使用Hystrix实现服务熔...
102 | 如何观察服务熔断
103 | 使用Resilience4j实现服...
104 | 使用Resilience4j实现服...
105 | 使用Resilience4j实现服...
106 | SpringBucks实战项目进度...
107 | 基于Git的配置中心(上)
108 | 基于Git的配置中心(下)
109 | 基于Zookeeper的配置中心
110 | 深入理解Spring Cloud的...
111 | 基于Consul的配置中心
112 | 基于Nacos的配置中心
113 | SpringBucks实战项目进度...
114 | 认识Spring Cloud Stre...
115 | 通过Spring Cloud Stre...
116 | 通过Spring Cloud Stre...
117 | SpringBucks实战项目进度...
118 | 通过Dapper理解链路治理
119 | 使用Spring Cloud Sleu...
120 | 如何追踪消息链路
121 | 除了链路还要治理什么
122 | SpringBucks实战项目进度...
123 | 结束语
本节摘要

PDF 课件和源代码下载地址:

https://github.com/geektime-geekbang/geektime-spring-family

猜你喜欢

unpreviewunpreview

展开

精选留言(49)

  • 2019-02-16
    老师后面代码能不能简单加些注释!!!
    27
  • 2019-06-28
    老师注意休息 眼睛都是红的呢!
    10
  • 2019-02-12
    老师,看完视频有个疑问,在进行批处理的时候,batchInsert那个方法里面,传入了一个i,但是在调用的时候没有看到传入i的值,为什么最后输出的是b-0和b-1呢?是因为getSize返回的是2,所以就输出了2个数么?

    作者回复: size设置了这个Batch的大小,实际在JdbcTemplate里,有一个循环:
    for (int i = 0; i < batchSize; i++) {
        pss.setValues(ps, i);
        ...
    }
    所以就有了你看到的效果

    10
  • 2019-05-08
    您好,我想问一下spring-jdbc是不是和JPA, mybatis这些是工具是否是可以相互替换的,其实他们实现的都是相同的功能,只是使用方式上不一样?

    作者回复: JPA是规范,Hibernate才是实现,Hibernate和MyBatis 都能用来做数据的存取操作,它们底下是JDBC支持。我想你提问里说的应该是spring-data-jdbc,它的定位和Hibernate还有MyBatis是一样的,用来方便地操作数据。

    8
  • 2019-05-17
    周大军提出的问题:如何查看 H2 内存数据库的内容?

    你应该在应用程序中运行 H2 web server,这样就可以通过 H2 Console 来访问内存数据库。在 Spring 应用程序中,你可以在应用上下文中声明了一个 web server bean:

    ```java
    import org.h2.tools.Server;
    ...

    @Configuration
    public class DataConfig {

        @Bean(initMethod = "start", destroyMethod = "stop")
        public Server h2WebServer() throws SQLException {
            return Server.createWebServer("-web", "-webAllowOthers", "-webDaemon", "-webPort", "8082");
        }
    }
    ```

    现在,在应用程序运行期间,你可以在浏览器中输入 http://localhost:8082 来访问数据库了。

    参考 [View content of H2 or HSQLDB in-memory database](https://stackoverflow.com/questions/7309359/view-content-of-h2-or-hsqldb-in-memory-database)。
    展开

    作者回复: 谢谢,我也学习了

    1
    5
  • 2019-03-03
    本小节视频主要讲了:
    1 springboot 定义bean的几个常用注解:@Component;@Responsity;@Service;@Controller;@ResController
    2 springjdbc的基本单sql增删改查方法
    3 springjdbc的批量处理sql方法
    简单记录下,还漏了啥嘛?
    展开
    4
  • 2019-02-19
    老师你好,我看到springboot的main函数类中实现了CommangLineRunner这个接口,我也网上查了一下这个接口的用法。但是这里我发现启动后不像服务一直运行着,而是像应用程序那样运行一次就结束了,难道springboot启动类实现这个接口就是这样的效果吗?谢谢

    作者回复: 你没有加Web的Starter依赖自然就不会启动Web容器,运行后就结束了

    4
  • 2019-02-13
    老师,我有点晕,数据源不就是指数据库吗?用了jdbc好像什么都可以了,还需要mysql的什么驱动吗?一直从事c++开发,java语法倒可以理解,概念好多。

    作者回复: JDBC只是连接的抽象,具体每个数据库都是要靠自己的驱动来实现这个抽象的。

    4
  • 2019-02-13
    谢谢老师,只是spring boot 里面这个spring.jpa.open-in-view=true配置默认就是true的,配置了也解决不了问题,好像只有web请求才有用,我现在是非web请求,两个应用中直接调service,增加这个配置spring.jpa.properties.hibernate.enable_lazy_load_no_trans=true好像有点效果,但是有时出现死循环查询。

    作者回复: 额,看来是我表述不当,我不是让你通过open session in view来解决问题,而是希望通过这个你能理解为什么会有这个问题。会话还是会和连接关联在一起的,也就是事后获取总是有成本的,如果你这个接口就是要返回所有的数据,那获取时就可以把所有数据拉回来。如果上游系统调用后有的要这些数据,有的不要这些,那可以明确地在接口上区分出来,无论是用参数,还是新拆一个接口,这样是不是会更合理一些呢。

    3
  • 2019-03-31
    老师,您好!我看完了Spring配置数据源几个章节之后,自己总结了一下,麻烦您帮我看一下理解对不对。
    Spring配置数据源三个要素:
    1.驱动
    jdbcDriver
    不同的数据源配置不同的驱动:如mysql配置com.mysql.jdbc.Driver
    2.数据源
    Spring内置了DriverManagerDataSource,但只是连接作用,没有提供连接池
    常用的数据源有:JNDI、Dbcp、C3p0、Hikari、Druid,不仅提供数据源,而且管理连接池
    3.数据库操作
    Spring内置了JdbcTemplate,其封装了java的jdbc操作
    展开

    作者回复: Spring Boot的自动配置会根据你的URL来推测驱动的,所以你提供JDBC URL、用户名和密码就好了。
    JNDI不是连接池,你可以再去了解下JNDI是什么,你可以通过JNDI获取到事先配置好的连接池。

    2
  • 2019-03-10
    老师您好,为什么这个项目我没有看到数据源的配置呢?

    作者回复: 因为使用了Spring Boot的自动配置,我们在课程中大量地用了自动配置来简化配置工作。关于背后的原理,我们会在Spring Boot章节里展开。

    2
  • 2019-02-19
    老师好,如果一个jdbc方法操作多个数据源,如何保证事务一致性哦,要有什么比较好的办法吗?

    作者回复: 能避免的话就尽量避免分布式事务,用最终一致的方式

    2
  • 2019-02-12
    最近遇到一个问题,不知道老师您那边是否有好的解决方案。
    使用spring boot 开发(结合阿里云的Pandora),dao层使用jpa,微服务架构,RPC调用使用的是HSF,比如A应用调用B应用中的service,如果B应用中的service查询表数据时,对应的模型使用了懒加载(即关联了另一张表),此时就会报错:org.hibernate.LazyInitializationException: could not initialize proxy [xxx.com.xxx.xxx] - no Session
    google了很多方案,没有找到好的解决方案。是否RPC框架不太适合使用jpa的懒加载策略?
    展开

    作者回复: 没用过Pandora,不过看了你的描述,感觉和RPC也没啥关系,你如果是个Web应用估计也是一样的,可以搜下Open Session in View,然后你大概就能明白怎么回事了。如果看完还没明白,我再来和你解释一下吧。

    2
  • 2019-07-10
    很多人都说spring jdbc比mybatis好,但是为什么现在还是用mybatis比较多呢,很少看见用spring jdbc的。

    作者回复: 你说的是不是Spring Data JDBC?我好像没怎么看到过你说的这个观点诶。一个是在简化编程时JDBC的操作,另一个是在做ORM。而且实际在业务系统开发时,使用ORM的方式更多一些,毕竟通常情况下自己写JDBC操作还是相对繁琐一些。

    1
  • 2019-03-31
    老师,看了全工程代码,SimpleJdbcDemoApplication工程,没有看到任何地方有初始化DataSource的,请问dataSource在哪里初始化了?

    作者回复: Spring Boot的自动配置发现CLASSPATH里有H2,你又没有配置DataSource,就自动配置了一个H2的DataSource,后面课程有详细介绍的

    1
  • 2019-02-27
    老师能讲解一下spring上下文吗,至今对“上下文”这个词没有一个具体的概念和理解

    作者回复: ApplicationContext的话题,我们放在Web的章节中会有讲解

    1
  • 2019-02-20
    廖老师,请教下目前主流的开发是用spring 的jdbctemplate呢?还是用mybatis 来处理 Dao呢?

    作者回复: 我想主流的应该在日常用orm框架更多一些吧,至少我们在工作中以mybatis为主

    1
  • 2019-02-16
    老师,请问 resources 文件夹下的 schema.sql 和 data.sql 文件是如何得到加载并执行的呢?

    作者回复: 内嵌数据库才会有这个特性,是Spring Boot的EmbeddedDatabaseBuilder里实现的。在创建DataSource时添加了schema.sql和data.sql,EmbeddedDatabaseFactoryBean的initDatabase里执行的。

    1
  • 2019-11-17
    丁老师,我感觉我需要几本springboot和spring的书,有一些基础和现在流行的我都不会,可推荐一下吗?我想学透一些,然后做项目!做springboot的数据量可能在百万到千万级的!

    作者回复: 看看《Spring实战》吧。先学透再做项目的想法本身还是有点问题的,只有做了项目才能明白你学的东西。另外,SpringBoot和你的数据量没什么关系,它只是帮助你开发的框架,帮你聚焦在你的业务逻辑。

  • 2019-10-31
    请问老师,SimpleJdbcDemoApplication 里面的
     @Bean
        @Autowired
        public SimpleJdbcInsert simpleJdbcInsert(JdbcTemplate jdbcTemplate) {
            return new SimpleJdbcInsert(jdbcTemplate)
                    .withTableName("FOO").usingGeneratedKeyColumns("ID");
        是怎么映射到FooDao的
        @Autowired
        private SimpleJdbcInsert simpleJdbcInsert;
    里面的,我把SimpleJdbcDemoApplication里面的simpleJdbcInsert改为abcd也能运行
    展开

    作者回复: 你是说方法名么?那只是作为Bean的名称使用的,名字随你喜欢就好,但一般我们会跟着Spring Bean的命名来做