JDBC与Druid简单介绍及Druid与MyBatis连接数据库

前言

Java程序与数据建立连接,首先要从jdbc说起,然后直接上阿里认为宇宙最好的数据库连接池druid,然后再说上层程序对象与数据源映射关联关系的orm-mybatis。

JDBC

JDBC(Java DataBase Connectivity)是Java和数据库(关系型数据库)之间的一个桥梁。

  1. 是一个规范而不是一个实现,能够执行SQL语句。
  2. 它由一组用Java语言编写的类和接口组成,各种不同类型的数据库都有相应的实现。
  3. 它不属于某一个数据库的接口,而是可以用于定义程序与数据库连接规范,通过一整套接口,由各个不同的数据库厂商去完成所对应的实现类,由sun公司提出!

转载参考:https://www.cnblogs.com/knowledgesea/p/11202918.html

执行sql过程为:类加载–>获取连接–>书写SQL–>执行语句—>处理结果集

为什么会有连接池的存在?

因为建立数据库连接是一个非常耗时、耗资源的行为,所以通过连接池预先同数据库建立一些连接,放在内存中,应用程序需要建立数据库连接时直接到连接池中申请一个就行,用完后再放回去,极大的提高了数据库连接的性能问题,节省了资源和时间。

什么是数据源

JDBC2.0 提供了javax.sql.DataSource接口,它负责建立与数据库的连接,当在应用程序中访问数据库时,不必编写连接数据库的代码,直接引用DataSource获取数据库的连接对象即可。用于获取操作数据Connection对象。

数据源与数据库连接池组件

数据源建立多个数据库连接,这些数据库连接会保存在数据库连接池中,当需要访问数据库时,只需要从数据库连接池中,获取空闲的数据库连接,当程序访问数据库结束时,数据库连接会放回数据库连接池中。

常用的数据库连接池技术:C3P0、DBCP、Proxool和DruidX(都是在jdbc的规范之上建立完成的)

Druid

官方网站文档:https://github.com/alibaba/druid/wiki/Druid%E8%BF%9E%E6%8E%A5%E6%B1%A0%E4%BB%8B%E7%BB%8D

Druid连接池是阿里巴巴开源的数据库连接池项目。Druid连接池为监控而生,内置强大的监控功能,监控特性不影响性能。功能强大,能防SQL注入,内置Loging能诊断Hack应用行为。

Druid不仅仅是一个数据库连接池,它还包含一个ProxyDriver,一系列内置的JDBC组件库,一个SQL Parser。 支持所有JDBC兼容的数据库,包括Oracle、MySQL、Derby、Postgresql、SQL Server、H2等等。

Druid针对oracle和mysql做了特别优化,比如Oracle的PS Cache内存占用优化,MySql的ping检测优化。Druid提供了MySql、Oracle、Postgresql、SQL-92的SQL的完整支持,这是一个手写的高性能SQL Parser,支持Visitor模式,使得分析SQL的抽象语法树很方便。简单SQL语句用时10微秒以内,复杂SQL用时30微秒。

通过Druid提供的SQL Parser可以在JDBC层拦截SQL做相应处理,比如说分库分表、审计等。Druid防御SQL注入攻击的WallFilter就是通过Druid的SQL Parser分析语义实现的 。

具体请看看官方文档。

推荐文章:简直了!通过源码告诉你阿里的数据库连接池Druid为啥如此牛逼:https://baijiahao.baidu.com/s?id=1672302434609141405&wfr=spider&for=pc

步骤(由上而下):

  1. 引入druid依赖
  2. 引入com.microsoft.sqlserver.sqldjbc4依赖(由此依赖可以看出JDBC与druid的关系,druid是基于jdbc规范建立的上层应用)
  3. 写代码
  4. 配置druid的datasource
  5. 建立Connection
  6. 创建Statement或者PreparedStatement接口执行SQL
  7. 处理结果
  8. 释放资源

execute和executeUpdate的区别

相同点:二者都能够执行增加、删除、修改等操作。

不同点:

  1. execute可以执行查询语句,然后通过getResult把结果取出来。executeUpdate不能执行查询语句。

  2. execute返回Boolean类型,true表示执行的是查询语句,false表示执行的insert、delete、update等。executeUpdate的返回值是int,表示有多少条数据受到了影响。

使用Druid与MyBatis构建程序与数据库关联关系及数据与程序实体映射

MyBatis 是支持普通 SQL 查询,存储过程和高级映射的优秀持久层框架。MyBatis 消除 了几乎所有的 JDBC 代码和参数的手工设置以及结果集的检索。MyBatis 使用简单的 XML 或注解用于配置和原始映射,将接口和 Java 的 POJOs (Plain Ordinary Java Object,普通的 Java 对象) 映射成数据库中的记录。

每个MyBatis应用程序主要都是使用SqlSessionFactory实例的,一个SqlSessionFactory实例可以通过SqlSessionFactoryBuilder获得。SqlSessionFactoryBuilder可以从一个xml配置文件或者一个预定义的配置类的实例获得。

用xml文件构建SqlSessionFactory实例是非常简单的事情。推荐在这个配置中使用类路径资源(classpath resource),但你可以使用任何Reader实例,包括用文件路径或 file:// 开头的url创建的实例。MyBatis有一个实用类——Resources,它有很多方法,可以方便地从类路径及其它位置加载资源。

MyBatis 最强大的特性之一就是它的动态语句功能。如果您以前有使用JDBC或者类似框架的经历,您就会明白把SQL语句条件连接在一起是多么的痛苦,要确保不能忘记空格或者不要在columns列后面省略一个逗号等。动态语句能够完全解决掉这些痛苦。尽管与动态SQL一起工作不是在开一个party,但是MyBatis确实能通过在任何映射SQL语句中。

具体步骤参考:https://blog.csdn.net/shenzhenNBA/article/details/80643492?utm_source=blogxgwz8

用 mybatisPlus 实现实体类与数据库表映射关系

使用mybatisPlus时,会确定实体类和数据的映射关系

具体的映射方法有两种:

  1. 默认:采用驼峰映射规则,例如MyUserTable 对应的数据库表为 my_user_table ; TEMyUserTable 对应表名为t_e_my_user_table;

  2. 注解@TableName:在类名上方添加@TableName(”my_user_table”)。


   转载规则


《JDBC与Druid简单介绍及Druid与MyBatis连接数据库》 锦泉 采用 知识共享署名 4.0 国际许可协议 进行许可。
  目录