拓十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

MySQL与JDBC

MySQL与JDBC 后端业务离不开数据持久化MySQL负责存储数据那么JDBC则是Java程序访问数据库的标准规范。学会MySQLJDBC才算真正把Java程序和数据库连接起来也是为后面学习MyBatis、MyBatis-Plus框架打好基础。在Java后端的学习路线中学完Java基础、IO、反射之后下一步就要接触数据库。我们在程序中产生的数据都存放在内存里可是程序一重启数据就会全部丢失。那么想要把数据永久保存下来就需要数据库来完成。MySQL存储数据JDBC使Java能够操作数据库。现在流行的MyBatis、MyBatis-Plus本质上只是对JDBC做了封装底层依旧是JDBC。想要理解ORM框架就一定要先把原生MySQLJDBC学明白。一、MySQLMySQL是一款开源的关系型数据库以表的形式存储数据。库下面有多张表表由行和列组成列代表字段行代表一条真实数据。1.基础SQL操作SQL是操作关系型数据库的语言主要就是增删改查CRUD。Create新增insertinto表名(字段1,字段2)values(值1,值2);Read查询select字段from表名where条件groupby分组orderby排序limit分页;Update修改update表名set字段值where条件;Delete删除deletefrom表名where条件;执行update、delete一定要加where条件否则会修改或者删除整张表全部数据2.表约束建表时用来保证数据合法性主键primarykey唯一标识每一条记录非空且唯一一般使用自增auto_increment非空notnull字段不能为null唯一unique字段值不能重复默认值default不给值的时候填充默认内容3.MySQL深入1索引可以提升查询速度索引就相当于书的目录。主键自带索引过多索引会降低增删改性能。2事务一组SQL语句要么全部执行成功要么全部失败回滚。具备ACID四大特性原子性、一致性、隔离性、持久性。3事务隔离级别解决脏读、不可重复读、幻读问题MySQL默认隔离级别是REPEATABLEREAD可重复读。4多表查询内连接、左连接、右连接实际业务大多不会做物理外键靠业务逻辑维护表关系。4.MySQL常见业务场景用户信息存储、订单数据、商品数据、业务各类数据持久化几乎所有后端系统都依赖MySQL存储业务数据。二、JDBC有了MySQL数据库我们可以在Navicat、命令行写SQL。但是程序运行的时候不可能人工手动执行SQL。这时候JDBC就是Java语言访问数据库的一套官方接口规范。JDBC只是接口真正干活的是数据库厂商提供的驱动mysql-connector-java。相当于一套标准MySQL厂商写实现类我们面向接口编程。1.JDBC核心API1DriverManager驱动管理类获取数据库连接Connection2Connection数据库连接对象Java程序和数据库之间的会话非常珍贵的资源3Statement/PreparedStatement执行SQL语句的对象Statement执行SQL存在SQL注入漏洞不推荐使用PreparedStatement预编译对象预编译SQL使用占位符解决SQL注入性能更好开发优先选择1ResultSet结果集封装select查询返回的数据通过游标读取每一行记录2资源关闭Connection、PreparedStatement、ResultSet都属于数据库资源必须关闭释放。JDK7可以使用try-with-resources自动关闭。2.JDBC标准执行流程1加载MySQL驱动2通过DriverManager获取Connection数据库连接url、用户名、密码3编写带?占位符的SQL语句4获取PreparedStatement预编译对象给?占位符赋值5执行SQL如果是查询调用executeQuery()返回ResultSet增删改调用executeUpdate()返回受影响行数6处理结果集ResultSet7关闭所有资源try-with-resources自动释放3.数据库连接池原生JDBC每次操作数据库都创建新连接用完就关闭。频繁创建销毁连接的开销非常大性能很差。数据库连接池就是提前创建一批连接放在池子里程序直接从池中拿连接使用完毕归还池子不进行销毁操作。常用Druid阿里企业最常用、HikariCPSpringBoot默认。实际开发中不会直接使用DriverManager获取连接全部使用连接池拿到Connection。4.JDBC易错点1忘记关闭资源数据库连接没有释放连接耗尽程序无法访问数据库。优先使用try-with-resources。2使用Statement拼接字符串产生SQL注入漏洞一定要使用PreparedStatement?占位符。3url地址写错、时区没有配置MySQL8需要指定时区serverTimezoneAsia/Shanghai。4ResultSet遍历顺序错误只能向下移动游标不能回退。三、MySQLJDBC和框架的关系JDBC写原生代码存在大量重复模板代码获取连接、赋值占位符、遍历ResultSet、关闭资源。所以MyBatis对JDBC做封装帮我们屏蔽重复代码只需要写SQL和实体映射但是底层仍然调用JDBC。
返回列表