MyBatis 框架的搭建及使用(一)

简介: MyBatis 框架的搭建及使用

什么是 MyBatis


MyBatis 是⼀款优秀的持久层框架,它⽀持⾃定义 SQL、存储过程以及⾼级映射. MyBatis 去除了⼏乎所有的 JDBC 代码以及设置参数和获取结果集的⼯作.


简单来说 MyBatis 是更简单完成程序和数据库交互的⼯具,也就是更简单的操作和读取数据库⼯具.

(它的底层是基于 JDBC 的,就像 Spring 底层是基于 Servlet 一样,都是为了让操作更简便)


MyBatis 环境的搭建


分两步 :


  1. 添加 MyBatis 依赖
  2. 设置 MyBatis 配置


添加 MyBatis 依赖


980de93f3dcf62a6feea5ec057ae1407_b221313cc1d0498eac67294457331d55.png

注意 : 这个时候项目是运行不起来的, 因为我们添加了 MyBatis 依赖, 服务器就需要知道它具体要连接哪台数据库, 以及账户密码等, 这就需要设置配置了.


设置 MyBatis 配置


# 数据库连接配置(mycnblog 对应你要操作的数据库名)
spring.datasource.url=jdbc:mysql://localhost:3306/mycnblog?characterEncoding=utf8
spring.datasource.username=root
spring.datasource.password=123456
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
# 配置 mybatis xml 的⽂件路径
# 在 resources/mybatis 创建所有表的 xml ⽂件
mybatis.mapper-locations=classpath:mybatis/**Mapper.xml
# 配置 MyBatis 执行时打印 SQL(可选配置)
mybatis.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl
logging.level.com.example.demo=debug


根据 MyBatis 写法完成数据库操作


查询操作(无参)


先来看看数据库里有啥 :

0d7b6ffd0612fd1dd74b77a75fcb3619_919c653954ce49bdb6c24b497dad77e9.png

我们就对 userinfo 进行操作 :


定义接口


首先得定义 model 层的 Userinfo 类 :


@Data
public class Userinfo {
    private int id;
    private String username;
    private String password;
    private String photo;
    private LocalDateTime createtime;
    private LocalDateTime updatetime;
    private int state;
}


再在 dao 层定义接口 :


@Mapper  //数据持久层标志
public interface UserMapper {
  //查询声明
    //getAll 是操作数据库的方法名
    List<Userinfo> getAll();
}


使用 XML 实现接口


在 resources 下 创建 mybatis 目录(配置中定义的), 然后在该目录下定义一个 UserMapper.xml (Mapper 必须有, 配置中规定的).


b3060d9dc2a24debd473f33f41505b72_1c74de6bbb1c4051afa7c3b083d940ef.png


查询操作 :


<?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.dao.UserMapper">
    <select id="getAll" resultType="com.example.demo.model.Userinfo">
        select * from userinfo
    </select>
</mapper>


select 查询操作

id=“getAll” 实现接口中的方法

resultType=“com.example.demo.model.Userinfo” 返回的数据类型

select * from userinfo 具体的 sql 语句(注意不要加分号)


在测试类中进行测试 :


@SpringBootTest  //项目运行在 spring 容器中
class UserMapperTest {
  @Autowired
  private UserMapper userMapper;
  @Test
  void getAll() {
  List<Userinfo> list = userMapper.getAll();
  System.out.println(list);
  }
}


e98dcae80ea320a3f623e329779770bd_5ffbd912a1574b42bb11d18ab607451c.png


类中的属性名与数据库表中字段名不一致怎么办 ?


如果类中的属性名, 与数据库表中的字段名不一致, 则查询不到结果.


@Data
public class Userinfo {
  //将 id 改为iid
    private int iid;
    private String username;
    private String password;
    private String photo;
    private LocalDateTime createtime;
    private LocalDateTime updatetime;
    private int state;
}


iid 为默认的初识值 :

6d5feda374baa24a83e8ddc87086cb6a_4eedcdf2d7b548f0850febf28cf382f4.png


解决方法 :


  1. 将类中的属性名与数据库表中字段名保持一致
  2. 使用 sql 语句的 as 进行列名 (字段名) 重命名, 让列名 (字段名) 等于属性名.
<select id="getAll" resultType="com.example.demo.model.Userinfo">
        select id as iid,username,password from userinfo
    </select>

34ee7ba82d6eabe4f3e4524e346f9b1e_d4ba675fcaf84ea89a39b9352f3beba3.png


3.定义一个 resultMap, 将属性名和字段名进行手动映射.


type 里是要映射的类


<resultMap id="BaseMap" type="com.example.demo.model.Userinfo">
        <id column="id" property="iid"></id>
        <result column="username" property="username"></result>
        <result column="password" property="password"></result>
        <result column="photo" property="photo"></result>
        <result column="createtime" property="createtime"></result>
        <result column="updatetime" property="updatetime"></result>
        <result column="state" property="state"></result>
    </resultMap>
    <select id="getAll" resultMap="BaseMap">
        select * from userinfo
    </select>

7978e6f59f33685c66334af4dd54f647_79d479510f24474db02c623e39fbe97d.png


查询操作(有参)


通过用户 id 查询用户信息 :


@Mapper 
public interface UserMapper {
    //根据 id 查找用户信息
    //不能用 int 来接收对象, 因为传递的参数可能为空, int 接收会报错
    Userinfo getUserById(@Param("id") Integer uid);
}


注意 :

上面 @Param 里的参数名与下面 ${} 里的参数名一致

一般来说上面的两个参数都会统一参数名, 这里为了便于说明区别没统一

下面 id 接收时, 也可以用 #{id}


<?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.dao.UserMapper">
    <select id="getUserById" resultType="com.example.demo.model.Userinfo">
        select * from userinfo where id=${id}
    </select>
</mapper>


@SpringBootTest  
class UserMapperTest {
    @Autowired
    private UserMapper userMapper;
    @Test
    void getUserById() {
        Userinfo userinfo = userMapper.getUserById(1);
        System.out.println(userinfo.toString());
    }
}

4864415a532a8a65a764219b4bf7d5ad_bb14d01bbf1142509f18b3bc52539b7a.png


相关文章
|
4月前
|
Java 数据库连接 Maven
后端框架学习-----mybatis(使用mybatis框架遇到的问题)
这篇文章总结了在使用MyBatis框架时可能遇到的几个常见问题及其解决方法,包括配置文件注册、接口绑定、方法名匹配、返回类型匹配、Maven资源导出、时区设置和字符编码问题。
|
1月前
|
SQL Java 数据库连接
持久层框架MyBatisPlus
持久层框架MyBatisPlus
40 1
持久层框架MyBatisPlus
|
2月前
|
缓存 Cloud Native 安全
探索阿里巴巴新型ORM框架:超越MybatisPlus?
【10月更文挑战第9天】在Java开发领域,Mybatis及其增强工具MybatisPlus长期占据着ORM(对象关系映射)技术的主导地位。然而,随着技术的发展,阿里巴巴集团推出了一种新型ORM框架,旨在提供更高效、更简洁的开发体验。本文将对这一新型ORM框架进行探索,分析其特性,并与MybatisPlus进行比较。
44 0
|
4月前
|
Java 数据库连接 Spring
后端框架入门超详细 三部曲 Spring 、SpringMVC、Mybatis、SSM框架整合案例 【爆肝整理五万字】
文章是关于Spring、SpringMVC、Mybatis三个后端框架的超详细入门教程,包括基础知识讲解、代码案例及SSM框架整合的实战应用,旨在帮助读者全面理解并掌握这些框架的使用。
后端框架入门超详细 三部曲 Spring 、SpringMVC、Mybatis、SSM框架整合案例 【爆肝整理五万字】
|
4月前
|
Java 数据库连接 mybatis
mybatis框架图
文章介绍了MyBatis框架的起源、发展和其作为持久层框架的功能,提供了MyBatis的框架图以帮助理解其结构和组件。
mybatis框架图
|
4月前
|
安全 Java 数据库连接
后端框架的学习----mybatis框架(3、配置解析)
这篇文章详细介绍了MyBatis框架的核心配置文件解析,包括环境配置、属性配置、类型别名设置、映射器注册以及SqlSessionFactory和SqlSession的生命周期和作用域管理。
后端框架的学习----mybatis框架(3、配置解析)
|
4月前
|
Java 数据库连接 mybatis
后端框架的学习----mybatis框架(9、多对一处理和一对多处理)
这篇文章介绍了在MyBatis框架中如何处理多对一和一对多的关联查询,通过定义`<resultMap>`和使用`<association>`与`<collection>`元素来实现对象间的关联映射。
|
4月前
|
Java 数据库连接 测试技术
后端框架的学习----mybatis框架(8、lombok)
这篇文章介绍了如何在MyBatis框架中使用lombok库来简化Java实体类的编写,包括在IDEA中安装Lombok插件、在项目中导入lombok依赖以及在实体类上使用Lombok提供的注解。
|
4月前
|
Java 数据库连接 数据库
后端框架的学习----mybatis框架(6、日志)
这篇文章介绍了如何在MyBatis框架中使用日志功能,包括配置MyBatis的日志实现、使用log4j作为日志工具,以及如何通过配置文件控制日志级别和输出格式。
|
5月前
|
Java 数据库连接 Spring
搭建 spring boot + mybatis plus 项目框架并进行调试
搭建 spring boot + mybatis plus 项目框架并进行调试
99 4