当前位置: 首页 > news >正文

黑马JAVAWeb-05 JDBC入门-预编译SQL-Mybatis入门-Mybatis日志输出-数据库连接池-增删改查-XML映射配置

1.JDBC 是数据库连接的底层基础-是不同的数据的规范

  • JDBC生产环境基本不用
    在这里插入图片描述
  • 不同厂商都要符合JDBC接口的规范即可
    在这里插入图片描述
  • JDBC入门在这里插入图片描述
  • 建库建表
-- 创建数据库
create database web01;-- 使用数据库
use web01;-- 建表
create table user(id int unsigned primary key auto_increment comment 'ID,主键',username varchar(20) comment '用户名',password varchar(32) comment '密码',name varchar(10) comment '姓名',age tinyint unsigned comment '年龄'
) comment '用户表';-- 插入数据
insert into user(id, username, password, name, age) values (1, 'daqiao', '123456', '大乔', 22),
(2, 'xiaoqiao', '123456', '小乔', 18),
(3, 'diaochan', '123456', '貂蝉', 24),
(4, 'lvbu', '123456', '吕布', 28),
  • 准备依赖
  <!-- MySQL数据库Java驱动,用于Java程序连接和操作MySQL数据库 --><dependency><groupId>com.mysql</groupId><artifactId>mysql-connector-j</artifactId><version>8.0.33</version></dependency><!-- JUnit 5核心依赖,用于编写和执行Java单元测试,仅在测试阶段生效 --><dependency><groupId>org.junit.jupiter</groupId><artifactId>junit-jupiter</artifactId><version>5.9.3</version><scope>test</scope></dependency><!-- Lombok依赖,通过注解自动生成getter、setter、构造器等样板代码,简化Java开发 --><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>1.18.30</version></dependency>

-案例代码

package com.itheima;
import org.junit.Test;import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;public class JdbcTest {/*** JDBC入门程序*/@Testpublic void testSelect() throws Exception {// 1.注册驱动Class.forName("com.mysql.cj.jdbc.Driver");// 2.获取数据库连接String url = "jdbc:mysql://localhost:3306/web01";String user = "root";String ps = "1234";Connection connection = DriverManager.getConnection(url, user, ps);// 3.获取SQL语句的执行对象Statement statement = connection.createStatement();// 4.定义并执行SQL语句String sql = "select * from user";boolean execute = statement.execute(sql);if (execute) {// 获取结果集ResultSet rs = statement.getResultSet();// 遍历结果集while (rs.next()) {// 根据字段名或索引获取值int id = rs.getInt("id");String username = rs.getString("username");String password = rs.getString("password");String name = rs.getString("name");int age = rs.getInt("age");// 输出结果System.out.println("id: " + id + ", username: " + username + ", password: " + password + ", name: " + name + ", age: " + age);}// 关闭结果集rs.close();}// 5. 释放资源statement.close();connection.close();}
}

在这里插入图片描述

  • JDBC生产环境基本不用
    在这里插入图片描述
    2.预编译SQL
    在这里插入图片描述
    2.1 SQL注入

  • 应用程序如果直接将用户输入的内容拼接到 SQL 语句中,没有做任何过滤或转义,攻击者就能通过构造特殊输入,改变原 SQL 的逻辑。

  • 由于’1’='1永远为真,这个 SQL 会查询出所有用户数据,攻击者无需正确账号密码就能登录。
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    3.MyBatis

  • JDBC太难用,MyBatis对JDBC进行封装,对其操作进行简化
    在这里插入图片描述

  • 3.1Mybatis简化JDBC操作
    在这里插入图片描述

  • Mybatis对于JDBC的优化点(手动变自动)
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    3.2 Mybatis入门
    在这里插入图片描述

  • 1.导入依赖 pom.xml

  • 在pom.xml中添加 Spring Boot 与 MyBatis 集成的依赖,以及数据库驱动依赖(以 MySQL 为例)

  • 注意!!!注意!!!注意!!!
    如果Spring Boot 3.x 与 MyBatis 依赖版本不兼容,就会一直报找不到UserMapper的Bean对象

        <!-- MySQL数据库Java驱动,用于Java程序连接和操作MySQL数据库 --><dependency><groupId>com.mysql</groupId><artifactId>mysql-connector-j</artifactId><version>8.0.33</version></dependency>注意!!!注意!!!注意!!! 如果Spring Boot 3.x 与 MyBatis 依赖版本不兼容,就会一直报找不到UserMapperBean对象<!-- MyBatisSpring Boot 集成依赖 --><dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId><version>3.0.3</version></dependency>
  • 2.配置application.properties
spring.application.name=springboot-web-quickstart#配置数据库连接信息
spring.datasource.url=jdbc:mysql://localhost:3306/web01
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.username=root
spring.datasource.password=1234

在这里插入图片描述

  • 3.建立pojo文件包,在其中创建User实体类
package com.itheima.pojo;import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;@Data
@AllArgsConstructor
@NoArgsConstructor
public class User {private Integer id;private String username;private String password;private String name;private Integer age;
}
  • 4.建立mapper文件包,在其中创建UserMapper接口
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.itheima.pojo.User;
import org.apache.ibatis.annotations.Select;import java.util.List;
//应用程序在运行时,会自动的为该接口创建一个实现类对象(代理对象),并且会自动将该实现类对象存入IOC容器 - bean
@Mapper 
public interface UserMapper {/*** 查询所有用户*/@Select("select * from user")public List<User> findAll();
}

在这里插入图片描述
3.3 IDEA中 让@Select注解里的SQL语句有提示
在这里插入图片描述
在这里插入图片描述
-Mybatis的日志输出
在这里插入图片描述

  • 配置application.properties
#配置Mybatis的日志信息
mybatis.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl

在这里插入图片描述

  • JDBC 和 Mybatis 对比
    在这里插入图片描述
    4.数据库连接池
    在这里插入图片描述

  • 连接池的作用
    在这里插入图片描述

  • 怎么使用连接池
    在这里插入图片描述
    在这里插入图片描述

  • 我非要用别的连接池怎么办?
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

  • 删除操作
    在这里插入图片描述

  • 什么时候用$ - 什么时候用#
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

  • 新增操作
    在这里插入图片描述
    在这里插入图片描述

  • 修改用户
    在这里插入图片描述

  • 查询用户
    在这里插入图片描述

  • 其他方法不需要@Param而这里select使用@param的原因,多个参数时需要添加,若都用User作为参数传进来,则都可以不用@Param
    在这里插入图片描述
    在这里插入图片描述

  • 只有基于官网骨架创建的springboot项目中,才可以省略@Param
    在这里插入图片描述

  • 若是自己创建的,非官方创建的springboot项目->改一下以下参数也可以不加@Param注解
    在这里插入图片描述

  • 对比
    在这里插入图片描述
    在这里插入图片描述
    加了@Param注解后变正常
    在这里插入图片描述
    5.XML映射配置
    在这里插入图片描述
    在这里插入图片描述
    5.1 XML文件的头信息到官网获取
    在这里插入图片描述
    在这里插入图片描述

<?xml version="1.0" encoding="UTF-8" ?>
<!-- 1. XML文档声明:指定版本为1.0,编码格式为UTF-82. DOCTYPE约束:定义当前XML是MyBatisMapper配置文件,遵循MyBatis 3.0的DTD规范3. 约束地址用于验证XML标签的合法性(https://mybatis.org/dtd/mybatis-3-mapper.dtd)
-->
<!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""https://mybatis.org/dtd/mybatis-3-mapper.dtd"><!-- mapper标签:MyBatis映射文件的根标签namespace属性:必须指定对应的Mapper接口全类名(包名+类名)作用:将当前XML文件与Mapper接口绑定,MyBatis通过该属性找到对应的接口方法
-->
<mapper namespace="com.itheima.mapper.UserMapper"><!-- select标签:用于定义查询语句(对应Mapper接口中的查询方法)id属性:必须与Mapper接口中的方法名完全一致(此处对应UserMapperfindAll()方法)resultType属性:指定查询结果的返回类型(全类名),MyBatis会自动将结果集封装为该类型的对象这里表示查询结果会被封装成com.itheima.pojo.User类的对象集合--><select id="findAll" resultType="com.itheima.pojo.User"><!-- SQL语句:查询user表中的所有数据 -->select id,username,age from user</select></mapper>

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
5.2 XML映射文件-辅助配置

  • 前面要求XML文件名称宇Mapper接口一直且放置在相同包下(同包同名)
  • 我非要不放在同包同名怎么办?自己指定XML映射文件的位置
    在这里插入图片描述
http://www.dtcms.com/a/574263.html

相关文章:

  • 济南高端网站asp.net怎样做网站登录
  • 北京平台网站建设哪家好有口碑的镇江网站优化
  • 抖音来客如何实现自动回复
  • 网站设计入门闸北品牌网站建设
  • PhotoShop网页版(在线ps)在快速修复老照片,在线修旧如新
  • 网站怎么做评估wordpress获取当前子分类
  • 《P2585 [ZJOI2006] 三色二叉树》
  • 无需人类标注!Meta提出SPICE:让AI在文档语料库中自我对弈,推理能力持续进化
  • 手机网站制作套餐查企业不要钱的软件
  • 学做吃的网站有哪些php 网站开发流程
  • 金仓数据库提出“三低一平”的迁移理念
  • 网站建设方案书备案网店设计流程图
  • 带地板翻转的网站怎么做网站开发需求评估
  • 免费客户管理系统选型攻略:功能、体验与扩展性
  • 建立公司网站的申请资料查询网站建设
  • wordpress去除首页上海网站关键词优化服务
  • SVD分解后的各个矩阵的深层理解
  • 【ZYNQ杂记】Debug模式下可以运行的程序但固化后运行卡死
  • Spring Boot 响应拦截器(Jackson)实现时间戳自动添加
  • 网站开发与服务合同wordpress 商城系统
  • 郑州企业网站怎么优化保障性租赁住房管理平台
  • 系列文章<十>(从LED显示屏的低灰跳灰(线性度不好)问题问题问题到手机影像):从LED冬奥会、奥运会及春晚等大屏,到手机小屏,快来挖一挖里面都有什么
  • 自动化测试-pytest框架-进阶
  • 学习做网站的网站wordpress 教程 插件
  • (2)pytest+Selenium自动化测试-环境准备
  • 【项目】小型支付商城 MVC/DDD
  • uni-app开发app移动端使用ucharts自定义标签栏Tooltip
  • 《uni-app跨平台开发完全指南》- 03 - Vue.js基础入门
  • uniapp中的静态资源文件,如图片等文件,h5端设置本地与生产测试环境的区别,本地不加前缀,生产测试添加前缀,h5端的已进行测试可行,非h5的未进行测试
  • uni-app + Vue3 实现折叠文本(超出省略 + 展开收起)