1. SQL语言说明 SQL语言是结构化查询语言;是关系数据库的标准语言。 SQL功能包括: 数据定义DDL语言,标准sql 定义基本表、视图、索引、序列sequence、job等。值包括create、drop、alter三条语句。 数据查询DQL语言,标准sql 查询数据表数据(视图数据),仅仅包括select一种语句。 数据操纵DML语言,标准sql 操纵数据表数据(视图数据),包括insert、delete、update三种语句。 数据控制DCL语言,标准sql 数据控制语言保证了数据库的完整性操作,包括grant、revoke、commit、rollback等语句,即授权、事务提交、回滚等常见操作。
1. 我们在执行SQL时,主要就是增删改查 SQL的主要操作就是“增删改查”,操作对象包括如下: --标准sql 对数据库的增删改查【DDL数据定义语言,标准sql】 对数据表的增删改查【DDL数据定义语言,标准sql】 对索引的增删改查【DDL数据定义语言,标准sql】 对视图的增删改查【DDL数据定义语言,标准sql】 对表数据的增删改查【DML增删改_数据操纵语言,DQL查_数据查询语言,标准sql】 对视图数据的增删改查【DML增删改_数据操纵语言,DQL查_数据查询语言,标准sql】 以下是oracle中扩展的对其他对象的增删改查: 对表空间tablespace的增删改查【DDL数据定义语言,oracle扩展sql】 对序列sequence的增删改查【DDL数据定义语言,oracle扩展sql】 对游标的增删改查【DDL数据定义语言,oracle扩展sql】 对存储过程的增删改查【DDL数据定义语言,oracle扩展sql】 对函数的增删改查【DDL数据定义语言,oracle扩展sql】 对程序包的增删改查【DDL数据定义语言,oracle扩展sql】 对触发器的增删改查【DDL数据定义语言,oracle扩展sql】 对oracle用户的增删改查【DDL数据定义语言,oracle扩展sql】 对表空间的增删改查【DDL数据定义语言,oracle扩展sql】 对dblink的增删改查【DDL数据定义语言,oracle扩展sql】 对job的增删改查【DDL数据定义语言,oracle扩展sql】 对约束constraints的增删改查【DDL数据定义语言,oracle扩展sql】 对目录Directory的增删改查【DDL数据定义语言,oracle扩展sql】
1. 以mybatis作为案例,详细解释mybatis如何管理数据库事务 在使用 JDBC 手动管理事务的情况下,同一个事务中始终使用同一个数据库连接。原因是事务的操作(例如 commit 或 rollback)是基于连接级别的,事务的边界由特定的连接来维护。
1. 什么是数据库事务? 在数据库中,事务是一个操作序列,要么全部执行成功,要么全部失败回滚。事务的典型特性可以用 ACID 表示:
1. 什么是JdbcTemplate? 前面学习了Commons DbUtils,是用来简化jdbc传统的操作步骤的。 实际上spring针对原生jdbc也封装了一个模板对象,就是JdbcTemplate。 java中操作db最原始的方式就是纯jdbc了,每次操作db都需要加载数据库驱动、获取连接、获取PreparedStatement、执行sql、关闭PreparedStatement、关闭连接等,操作还是比较繁琐的,spring中提供了一个模块,对jdbc操作进行了封装,使其更简单。 这个模块的核心对象就是JdbcTemplate,JdbcTemplate是spring对jdbc的封装,目的是使jdbc更加易于使用。
1. 什么是DBUtils? Commons DbUtils是Apache组织提供的一个对JDBC进行简单封装的开源工具类库,使用它能够简化JDBC应用程序的开发,同时也不会影响程序的性能。
1. DataSource接口和数据库连接池的关系 DataSource接口是java专门用来描述数据源而提供的一个接口规范。 同时DataSource可以方便的实现连接池。 注意,数据源和连接池实际上是两回事。 1. 抛开连接池不说,数据源描述的就是数据库信息,只不过jdbc2.0提供了DataSource接口来规范数据源。 2. 连接池就是对数据库连接对象进行池化。说白了,连接池可以不使用DataSource规范,而直接通过DriverManager去创建连接然后将这些连接对象进行池化。
1. 什么是数据源? 在了解什么是数据源之前,先回顾之前的一个案例: 在使用前,为了避免数据库的各种信息硬编码,先手动实现一个通用的读取数据库配置的工具类: package javase.demo26.db.util; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; import java.util.Properties; public class CommonJdbcLoadUtil { private static String DBDRIVER; private static String DBURL; private static String DBUSER; private static String DBPASS; private static final Properties PROPERTIES = new Properties(); static { try { // idea中如果进行了模块化处理后,则所有的文件的路径实际上都不是相对原来的项目根路径了,而是相对于最顶层的项目路径了,因为原来myeclipse中的项目可能在idea中已经变成了模块了,所以要加上自己的模块的路径。 PROPERTIES.load(new FileInputStream("myjavaSE/resource/jdbc.properties")); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } DBDRIVER = PROPERTIES.getProperty("jdbc.driver", "oracle.jdbc.driver.OracleDriver"); DBURL = PROPERTIES.getProperty("jdbc.url", "jdbc:oracle:thin:@localhost:1521:orcl"); DBUSER = PROPERTIES.getProperty("jdbc.username", "oracle"); DBPASS = PROPERTIES.getProperty("jdbc.password", "oracle1234"); } public static String getDbdriver() { return DBDRIVER; } public static String getDburl() { return DBURL; } public static String getDbuser() { return DBUSER; } public static String getDbpass() { return DBPASS; } } resource目录下配置jdbc.properties文件用于指定数据库的信息: jdbc.driver=oracle.jdbc.driver.OracleDriver jdbc.url=jdbc:oracle:thin:@localhost:1521:orcl jdbc.username=oracle jdbc.password=oracle1234 从上面的案例可以看到,CommonJdbcLoadUtil这个工具类是用来专门读取配置文件中配置的数据库的各种信息的。 实际上,在我们自己编写这个通用类之前,我们一般会将数据库的驱动程序、名称、密码等信息硬编码在代码中,硬编码导致数据库的配置信息很不优雅,看起来很乱。 因此,搞一个专门的类和对应的配置文件,来专门保存和读取数据库的各种信息。 获取了数据库的各种信息之后,才能进行驱动加载、创建连接、实例化statement等一系列动作来连接数据库,从而进行SQL的各种操作。 我们把这种专门用来描述特定数据库的各种信息的配置文件和解析类称之为数据源。 数据源,就是描述数据的来源,它存储了建立数据库连接所需要的所有信息。直观点来说,就是通过硬编码或者配置文件等描述对应数据库的各种信息。 数据源一般用于描述建立数据库连接所需要的各种信息: 数据库名称 数据驱动 用户名 密码 ... 通过数据源对数据库信息进行抽象描述,从而创建数据库连接,一般一个数据源对应一个数据库。
1. JDBC批处理操作 批量处理允许您将相关的SQL语句分组到批处理中,并通过对数据库的一次调用提交它们。 当您一次向数据库发送多个SQL语句时,可以减少连接数据库的开销,从而提高性能。
1. JDBC规范 JDBC实际上和JNDI,JMS一样,这些玩意儿,很多文档都会翻译成SUN的规范来解释。 此处重点解释JDBC。 JDBC是规范,即SUN公司通过接口定义的方式向应用开发者和实现者暴露一组统一的接口规范。说白了就是一系列interface和class。由此可见,java中要是没有interface还怎么制定规范啊。 JDBC是抽象层的东西,SUN自己不实现它。换言之,JDBC是意识形态的东西,SUN的目的就是让开发者和实现者认同并遵守这些规范。由此可见,一旦规范形成后,果然就不怕意识形态的斗争啊。 既然JDBC是抽象层的东西,就需要有人来实现它们,将它们具体化。apache是实现SUN规范的好助手,就像使用Oracle或者mySql数据库需要加载数据驱动包一样,驱动包就是JDBC的实现。由此可见,SUN喜欢制定规范,apache喜欢实现规范,spring喜欢包装实现。 数据库的厂商很多,每个厂商都按照SUN的规范去实现自己的数据库驱动包,所以导致不同的数据库厂商会有很多的数据库驱动包实现,它们各自适配不同的数据库。比如JMS是SUN指定的规范,实现JMS规范的厂商很多,rocketMQ,activeMQ,kafka等,和JDBC原理一样,厂商需要自己实现。 从意识形态到实现者,可以看出规范的重要性。规范,既约定统一的标准暴露给开发者和实现者,又不牵制具体的实现方案。只要厂商在标准内实现,任你发挥都可以,都包容。不难看出,要想别人遵循你的规范,你必须强大,SUN如果不强大不足以制定规范,谁让你们用JAVA呢?这个华为争取5G规范标准的道理一样,可见规范的牛逼性。
个人独立开发项目,基于springboot 3.x starter机制提供插拔式的插件功能
基于芋道最新源码二次开发