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

Mybatis快速入门

文章目录

      • 1. 简介
      • 2. 快速入门
        • 2.1 前置准备
        • 2.2 要点解析
      • 3. 辅助配置
        • 3.1 配置 SQL 提示
        • 3.2 配置 Mybatis 日志输出
      • 4. 增删改查操作 (注解)
        • 4.1 删除 (@Delete)
        • 4.2 增加 (@Insert)
        • 4.3 修改 (@Update)
        • 4.4 查询 (@Select)
      • 5. XML 映射配置
        • 5.1 概念
        • 5.2 使用方法
      • 6. 为什么使用 Mybatis

1. 简介

  • MyBatis 是一款优秀的 持久层 框架,用于简化 JDBC 的开发
  • MyBatis 是 Apeche 的一个开源项目 iBatis,2010 年迁移到了 google code,改名为 MyBatis,2013 年迁移到 Github
  • 官网:点击进入

2. 快速入门

2.1 前置准备
  • (1 )准备工作

    • 创建 SpringBoot 工程、引入 Mybatis 相关依赖 (SQL/MyBatis Framework 和相关数据库)
    • 在这里插入图片描述
  • ( 2 ) 准备对应的用户表对象

    • 在引导类所在包下创建一个 pojo
    • 创建 User 实体类,放在 pojo 包下,对标 SQL 表
    • 实体类:实体类的属性名与表中的字段名一一对应。实体类放在 pojo 包下。
@Data  
@NoArgsConstructor  
@AllArgsConstructor  
public class User {  
    private Integer id; //ID  
    private String username; //用户名  
    private String password; //密码  
    private String name; //姓名  
    private Integer age; //年龄
    }
  • ( 3 ) 重点:编写 Mybatis :编写 Mybatis 的持久层接口,定义 SQL (注解/XML)
    • 在引导类所在包下创建一个 mapper 包,在该包下创建接口 UserMapper
    • 命名规范:XxxMapper,也成为 Mapper 接口
@Mapper
public interface UserMapper {
	@Select("select * from user")
	public List<User> findAll();
}
  • (4 ) 重点:配置 Mybatis (在 application. Properties 中数据库连接信息)
    • 以 MySQL 为例 (端口号 3306)
#数据库访问的url地址
spring.datasource.url=jdbc:mysql://localhost:3306/‘数据库名’  
#数据库驱动类类名  
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver  
#访问数据库-用户名  
spring.datasource.username=root  
#访问数据库-密码  
spring.datasource.password=root@1234
  • ( 5 ):单元测试
    • src 底下的 test 目录下,已经创建好了测试类,改造即可
@SpringBootTest
class SpringbootMybatisQuickstartApplicationTests {
    @Autowired
    private UserMapper userMapper;
    @Test
    public void testFindAll(){
        List<User> userList = userMapper.findAll();
        for (User user : userList) {
            System.out.println(user);
        }
    }
}
2.2 要点解析

编写 Mybatis 中

  • @Mapper 注解:表示是mybatis中的Mapper接口
    • 程序运行时,框架会自动生成接口的实现类对象(代理对象),并给交Spring的IOC容器管理
  • @Select 注解:代表的就是select查询,用于书写select查询语句

单元测试中

  • @SpringBootTest:表示的是已经与 SpringBoot 整合
  • 测试类运行时,会自动加载 IOC 容器,所以我们直接通过@Autowired 注解注入,即可进行测试

3. 辅助配置

  • 在 Mybatis 中,有两个普遍的辅助配置,一个是配置 SQL 提示 (提示 SQL 语句),一个是配置 Mybatis 日志输出 (运行时查看 SQL 语句执行日志)
3.1 配置 SQL 提示

注意:新版本 idea 已经自动配置,如果为新版,请自行跳过

  1. 打开右边的 Database,选择创建一个数据源
    在这里插入图片描述

  2. 连接对应数据库
    在这里插入图片描述

  3. 选择让 idea 给出提示
    在这里插入图片描述

3.2 配置 Mybatis 日志输出

application.properties 加入配置, 即可在控制台查看日志

mybatis.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl

在这里插入图片描述

4. 增删改查操作 (注解)

  • 在 mybatis 中,有两种使用方法,一种是通过注解,一种是通过 XML 配置,注解一般是完成一些简单的增删改查功能
  • 注解主要通过在 Mapper 接口方法通过参数占位符 #{ } 占位来实现 SQL 预编译,在单元测试中编写具体逻辑来实现
  • 以下将增删改查的例子作为示例
4.1 删除 (@Delete)
  • 需求:根据 ID 删除用户信息
  • Mapper 接口
@Delete("delete from user where id =#{id}")
public void deleteById(Integer id);
  • 单元测试类
@Test
public void testDeleteById(){
	userMapper.deleteById(36);
}
4.2 增加 (@Insert)
  • 需求:添加一个用户
  • Mapper 接口
@Insert("insert into user(username,password,name,age) values(#{username},#{password},#{name},#{age})")
public void insert(User user);
  • 单元测试类
@Test
public void testInsert(){
    User user = new User();
    user.setUsername("admin");
    user.setPassword("123456");
    user.setName("管理员");
    user.setAge(30);
    userMapper.insert(user);
}
4.3 修改 (@Update)
  • 需求:根据 ID 更新用户信息
  • Mapper 接口
@Update("update user set username = #{username},password = #{password},name = #{name},age = #{age} where id = #{id}")
public void update(User user);
  • 单元测试类
@Test
public void testUpdate(){
    User user = new User();
    user.setId(6);
    user.setUsername("admin666");
    user.setPassword("123456");
    user.setName("管理员");
    user.setAge(30);
    userMapper.update(user);
}
4.4 查询 (@Select)
  • 需求:根据用户名和密码查询用户
  • Mapper 接口
@Select("select * from user where username = #{username} and password = #{password}")
public User findByUsernameAndPassword(@Param("username") String username, @Param("password") String password);
  • 单元测试类
@Test
public void testFindByUsernameAndPassword(){
    User user = userMapper.findByUsernameAndPassword("admin666", "123456");
    System.out.println(user);
}

细节:在 Mapper 接口中,我们通过 @Param 注解来指定参数的名称,是因为在字节码文件中,变量名不能保存,#{ } 查询不到信息。

  • 在官方骨架创建的 springboot 项目中,@Param 注解可以省略

5. XML 映射配置

5.1 概念

Mybatis 的开发的两种方式,第一种是注解,第二种就是 XML
XML 主要用于完成复杂的 SQL 功能

XML 配置文件规范

  1. XML映射文件的名称与Mapper接口名称一致,并且将XML映射文件和Mapper接口放置在相同包下(同包同名)
  2. XML映射文件的namespace属性为Mapper接口全限定名一致
  3. XML映射文件中sql语句的id与Mapper接口中的方法名一致,并保持返回类型一致。
5.2 使用方法
  1. 创建 XML 映射文件 (遵守规范 1 ,都在 com. backend. mapper 包下,都叫 Usermapper,只是为 xml 文件)
    在这里插入图片描述
  2. 编写并配置 XML 映射文件 (官方网站)
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
  PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
  "https://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="">
 
</mapper>
  1. 配置 XML 映射文件 (以编写 select 方法为例)
  • namescpace 里面是 UserMapper 的全限定名
  • <select> 标签:用于编写 select 查询语句
    - id 里面是 UserMapper 里的方法名
    - resuletType 里面是 User 的全限定名
<?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.backend.mapper.UserMapper">  
  
<!--    resultTyle : 查询返回的单条数据所封装的类型-->  
    <select id="findAll" resultType="com.backend.pojo.User">  
        select id,username,name,age from user  
    </select>  
</mapper>
  1. 此时 Mapper 演示
//这里没有注解
List<User> findAll();
  • 全限定名的获取方法:选中方法名,右键,选择 Copy->Copy Reference 即可复制
    在这里插入图片描述

6. 为什么使用 Mybatis

先看一下 JDBC 程序的缺点:

  • Url、username、password 等相关参数全部硬编码在 java 代码中。
  • 查询结果的解析、封装比较繁琐。
  • 每一次操作数据库之前,先获取连接,操作完毕之后,关闭连接。频繁的获取连接、释放连接造成资源浪费。

再看以下 Mybatis 是如何解决这些问题

  • 数据库连接四要素 (驱动、链接、用户名、密码),都配置在 springboot 默认的配置文件 application. Properties 中
  • 查询结果的解析及封装,由 mybatis 自动完成映射封装,我们无需关注
  • 在 mybatis 中使用了数据库连接池技术,从而避免了频繁的创建连接、销毁连接而带来的资源浪费。

这篇文章到此结束,感谢观看

相关文章:

  • 使用ZSH美化Windows系统Git Bash
  • NHANES指标推荐:NHHR
  • C语言数据结构:树的实现、前序、中序、后序遍历
  • 运用instanceof判断Animal a是否为Dog类和是否为cat类
  • PQ1-6弯曲疲劳试验机
  • Python创意:AI图像生成
  • [特殊字符] 第十四讲 | 空间异质性检验与地统计局部指标(LISA)应用
  • 《AI大模型应知应会100篇》第13篇:大模型评测标准:如何判断一个模型的优劣
  • KWDB创作者计划—KWDB场景化创新实践:多模态数据融合与边缘智能的突破性应用
  • opensuse安装需要手动添加仓库的软件包
  • TripoSG:高保真单张图像到3D生成模型——15亿参数的革新性突破
  • 学点概率论,打破认识误区
  • python可变对象与不可变对象
  • 探索 HTML5 新特性:提升网页开发的现代体验
  • 【模拟电路】开关二极管
  • 关于群晖安装tailscale后无法直链的问题
  • Skynet入门(二)
  • ABC-CNN-GRU-Attention、CNN-GRU-Attention、ABC-CNN-GRU和CNN-GRU四类对比模型多变量时序预测
  • 用纯Qt实现GB28181协议/实时视频/云台控制/预置位/录像回放和下载/事件订阅/语音对讲
  • 【LeetCode Solutions】LeetCode 160 ~ 165 题解
  • 网上商城web/优化师是一份怎样的工作
  • 青岛网站建设服务/全渠道营销管理平台
  • 做网站用的字体/网站推广
  • wordpress 炫酷博客/seo搜索引擎优化价格
  • 公共体育课程网站建设/怎么自己做网站推广
  • 网站设计可以在手机上做吗/图片外链生成工具在线