Mybaits(环境搭建和基本使用)

news/2024/7/9 3:37:01

目录
  一、什么是 Mybaits
  二、配置环境
    2.1 导入 MyBatis Framework
    2.2 连接 MyBatis
  三、增删改查功能
    3.1 创建实体类
    3.2 select
    3.3 delete 和 update
    3.4 insert
  四、SQL 注入
    4.1 什么是 SQL 注入
    4.2 SQL 注入代码
    4.3 #{} 和 ${} 的区别

一、什么是 Mybaits

  • Mybatis 是一个半 ORM(对象关系映射)持久层框架,它支持自定义 SQL、存储过程以及高级映射;
  • 底层是对 JDBC 进行了封装,让数据库操作更加简单(开发人员只需编写核心SQL语句即可);
  • 面对性能要求高,需求变化快的项目,MyBatis 即是开发人员的不二选择。

二、配置环境

2.1 在创建项目的时候,选择 MyBatis Framework 和 自己数据库的驱动,注意,我用的是 MySQL 数据库,这里就选择了 MySQL Driver。

然后,删除里面没用的目录及文件。

2.2 在 resources 目录下创建一个 application.yml 文件 和 一个 mapper 文件夹,粘贴下面代码即可。url、 username 、password 和 配置 JDBC 创建对象时的方法一样,因为 Mybatis 底层还是对其进行封装实现的。
spring:
  datasource:
    url: jdbc:mysql://127.0.0.1:3306/TestMybatis?characterEncoding=utf8&useSSL=false
    username: root
    password: 自己数据库的密码
    driver-class-name: com.mysql.cj.jdbc.Driver
mybatis:
  mapper-locations: classpath:mapper/**Mapper.xml

此时,运行项目的启动类来测试 Mybatis 是否连接,如果提示这行,表示配置成功。

三、增删改查功能

创建一个名为 TestMybatis 的数据库,导入测试数据表:mybatis.sql

3.1 创建实体类

属性名必须和创建的表里的字段名一致。Mybatis 提供映射标签,支持对象与数据库的 ORM 字段关系映射。

@Data
public class User {
    private int id;
    private String username;
    private String password;
}

3.2 select

(1) 编写接口
在 demo 目录下创建一个 mapper 文件夹,进行接口的实现。

@Mapper
public interface UserMapper {
    //查询所有用户
    public List<User> userAll();
}

(2)编写 SQL 语句
在 resources/mapper 目录下, 创建一个 UserMapper.xml 文件进行核心代码实现,通过 xml 文件或注解的方式将要执行的各种 statement 配置起来。

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.example.demo.mapper.UserMapper">

    <select id="userAll" resultType="com.example.demo.model.User">
        select * from user;
    </select>

</mapper>

(3)测试代码

  • 在刚才创建好的接口代码里,右键 Generate;
  • 选择 Text,生成测试代码。

JUnit 是Java的一个开源的单元测试框架,用于编写和运行可重复的测试。JUnit 5是JUnit的下一代,目标是为JVM上的开发人员端测试创建一个最新的基础。这包括关注Java 8及以上版本,以及支持许多不同风格的测试。

@SpringBootTest
class UserMapperTest {

    @Autowired
    private UserMapper userMapper;

    @Test
    void userAll() {
       List<User> result = userMapper.userAll();
        for (User user:result) {
            System.out.println(user);
        }
    }
}

测试结果如下:

3.3 delete 和 update

(1)接口

因为 Mybatis 提供了 XML 标签,SQL 语句写在XML里面,即可以降低代码的耦合性,也可以提高复用率。

public int deleteUser(@Param("id") Integer id);

public int updateTitle(@Param("id") Integer id,@Param("content") String content);

(2)核心代码

<delete id="deleteUser">
        delete from article where id = #{id};
</delete>
    
<update id="updateTitle">
        update article set content = #{content} where id = #{id};
</update>

3.4 insert

(1)接口

public int insertArticle(@Param("article") Article article);

(2)核心代码

<insert id="insertArticle" useGeneratedKeys="true" keyProperty="id">
        insert into article values (null,#{article.title},#{article.content},now());
</insert>

四、SQL 注入

4.1 什么是 SQL 注入

SQL 注入就是利用数据库漏洞,利用一些特殊的字段来拼接 SQL 语句,可跳过 Web 应用程序的安全验证,对数据库进行的攻击的一种违法手段。

4.2 SQL 注入代码

' or 1='1

select * from user where username = ‘张三’ and password = ’ ’ or 1='1 ’
上面这条语句可以在不知道用户密码的情况下,进行用户身份的查询,有的 SQL 注入甚至可以达到修改、删除数据等行为。

4.3 #{} 和 ${} 的区别

  • #{} 是预编译时处理。
  • ${}是字符串替换。
  • 使用 #{} 能避免 部分 SQL 注入问题。

预编译处理就是在执行 SQL 语句时把 #{} 替换为 ? 号先进行占位,然后调用 PreparedStatement 的 set 方法根据字段的类型来赋值;字符串替换直接把 ${} 里面的字段当成字符串来处理。

SQL 注入解决方案:

  • 在执行 SQL 语句之前进行参数判断,如果符合类型就执行,否则直接拒之门外;
  • 尽可能使用 #{} 预查询的方式;
  • 开发完毕之后,测试人员进行安全测试。
    在这里插入图片描述

总结:SQL注入问题还是很可怕的,用户隐私泄漏……君子爱财取之有道,希望学习编程的我们能用所学知识,来造福社会。


http://lihuaxi.xjx100.cn/news/494913.html

相关文章

WPF控件模板、数据模板、容器样式选择器

WPF控件模板 利用Tag来绑定控件模板内容 <!--模板定义--> <Style x:Key"ButtonStyle1" TargetType"{x:Type Button}"><Setter Property"Template"><Setter.Value><ControlTemplate TargetType"{x:Type Button…

材料的几个性能指标

材料性能指标:弹性、断裂韧性、韧性、延展性title: 材料的几个性能指标 toc: true tags:- Abaques categories:- Abaques- 基础知识 abbrlink: 2bf41a83 date: 2022-06-17 00:38:21弹性—— 恢复原状的能力 材料的弹性,是指材料应力应变曲线中弹性阶段下方的面积。对于弹性阶…

第十三周内容总结

一、Q查询进阶操作 Q查询我们在上周初步学习的时候我们了解到他主要是用于实现查询过程中的一些逻辑运算符的使用,因为ORM中括号内的参数默认是and连接方式进行查询的。 而这里我们介绍的进阶操作,其实就是类似面向对象中的反射方法,实现的功能就是通过获取用户输入的字符串…

统计同构子字符串的数目

题目 给你一个字符串 s ,返回 s 中 同构子字符串 的数目。由于答案可能很大,只需返回对 109 + 7 取余 后的结果。 同构字符串 的定义为:如果一个字符串中的所有字符都相同,那么该字符串就是同构字符串。 子字符串 是字符串中的一个连续字符序列。示例 1: 输入:s = "…

【案例实践】基于Citespace和vosviewer文献计量学可视化SCI论文高效写作方法

【点击观看视频】基于Citespace和vosviewer文献计量学可视化SCI论文高效写作方法 文献计量学是指用数学和统计学的方法&#xff0c;定量地分析一切知识载体的交叉科学。它是集数学、统计学、文献学为一体&#xff0c;注重量化的综合性知识体系。特别是&#xff0c;信息可视化技…

Ubuntu系统中文乱码的解决办法

Ubuntu系统中文乱码的解决办法 文章目录Ubuntu系统中文乱码的解决办法1. 安装中文语言2. 安装语言设置的命令locale3. 安装中文的相关字体4. 修改语言的环境变量4.1 环境变量一4.2 设置二5. 正式配置语言后记最近在docker上pull下面的Ubuntu镜像运行后发现中文出现了乱码情况&a…

Windows和Mac系统实现本地部署WebPageTest工具

在项目开发或者测试的过程中&#xff0c;由于没有上线&#xff0c;我们在公网上无法访问我们的网站&#xff0c;但同时我们又需要查看浏览器性能&#xff0c;这样我们就需要在本地部署WebPageTest工具以协助进行性能测试 具体实现步骤&#xff1a; Windows系统&#xff1a; …

20.tornado项目结束(简单拓展一些技术栈)

本tornado项目从最开始的实现hello world到最后完整做成了一个不是很美观的但是&#xff01;各个功能完善的一个仿Instagram的网站项目。 相信大家如果认认真真跟着做下来&#xff0c;会学到很多&#xff01; 关于本项目也没什么需要多说的了&#xff0c;tornado已经早几年就几…