前言
Java程序与数据建立连接,首先要从jdbc说起,然后直接上阿里认为宇宙最好的数据库连接池druid,然后再说上层程序对象与数据源映射关联关系的orm-mybatis。
JDBC
JDBC(Java DataBase Connectivity)是Java和数据库(关系型数据库)之间的一个桥梁。
- 是一个规范而不是一个实现,能够执行SQL语句。
- 它由一组用Java语言编写的类和接口组成,各种不同类型的数据库都有相应的实现。
- 它不属于某一个数据库的接口,而是可以用于定义程序与数据库连接规范,通过一整套接口,由各个不同的数据库厂商去完成所对应的实现类,由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
步骤(由上而下):
- 引入druid依赖
- 引入com.microsoft.sqlserver.sqldjbc4依赖(由此依赖可以看出JDBC与druid的关系,druid是基于jdbc规范建立的上层应用)
- 写代码
- 配置druid的datasource
- 建立Connection
- 创建Statement或者PreparedStatement接口执行SQL
- 处理结果
- 释放资源
execute和executeUpdate的区别
相同点:二者都能够执行增加、删除、修改等操作。
不同点:
execute可以执行查询语句,然后通过getResult把结果取出来。executeUpdate不能执行查询语句。
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时,会确定实体类和数据的映射关系
具体的映射方法有两种:
默认:采用驼峰映射规则,例如MyUserTable 对应的数据库表为 my_user_table ; TEMyUserTable 对应表名为t_e_my_user_table;
注解@TableName:在类名上方添加@TableName(”my_user_table”)。