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

目录
  一、什么是 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注入问题还是很可怕的,用户隐私泄漏……君子爱财取之有道,希望学习编程的我们能用所学知识,来造福社会。

  • 5
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

web图解

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值