MyBatis查询数据库

本文介绍了MyBatis作为持久层框架的使用,包括数据库和表的创建、配置连接字符串和MyBatis、增删改查操作。详细阐述了如何通过XML配置文件和实体类映射来执行SQL,以及动态SQL的使用,如标签的应用。
摘要由CSDN通过智能技术生成

1.MyBatis 是什么?

MyBatis是一款优秀的持久层框架,它支持自定义SQL、存储过程以及高级映射。MyBatis去除了几乎所有的JDBC代码以及设置参数和获取结果集的工作。MyBatis可以通过简单的XML_或注解来配置和映射原始类型、接口和Java POJO (Plain Old Java Objects,普通老式Java对象)为数据库中的记录。

简单来说MyBatis是更简单完成程序和数据库交互的工具,也就是更简单的操作和读取数据库工具。
Mybatis官网:https://mybatis.org/mybatis-3/zh/index.html

在这里插入图片描述
MyBatis也是一个ORM框架,ORM (Object Relational Mapping) ,即对象关系映射。在面向对象编程语言中,将关系型数据库中的数据与对象建立起映射关系,进而自动的完成数据与对象的互相转换:

  1. 将输入数据(即传入对象)+SQL映射成原生SQL
  2. 将结果集映射为返回对象,即输出对象

ORM把数据库映射为对象︰

  • 数据库表(table) -->类(class)
  • 记录(record,行数据)–>对象 (object)
  • 字段(field) -->对象的属性(attribute)

一般的ORM框架,会将数据库模型的每张表都映射为一个Java类。
也就是说使用MyBatis可以像操作对象一样来操作数据库中的表,可以实现对象和数据库表之的转换,接下来我们来看MyBatis 的使用吧。

1.1 创建数据库和表

接下来我们要实现的功能是∶使用MyBatis 的方式来读取用户表中的所有用户,我们使用个人博客的数据库和数据包.具体SQL如下。

-- 创建数据库
drop database if exists mycnblog;
create database mycnblog DEFAULT CHARACTER SET utf8;
-- 使⽤数据数据
use mycnblog;
-- 创建表[⽤户表]
drop table if exists  userinfo;
create table userinfo(
    id int primary key auto_increment,
    username varchar(100) not null,
    password varchar(32) not null,
    photo varchar(500) default '',
    createtime datetime default now(),
    updatetime datetime default now(),
    `stateìnt default 1
);
-- 创建⽂章表
drop table if exists  articleinfo;
create table articleinfo(
    id int primary key auto_increment,
    title varchar(100) not null,
    content text not null,
    createtime datetime default now(),
    updatetime datetime default now(),
    uid int not null,
    rcount int not null default 1,
    `stateìnt default 1
);
-- 创建视频表
drop table if exists videoinfo;
create table videoinfo(
    vid int primary key,
    `title` varchar(250),
    ùrl` varchar(1000),
    createtime datetime default now(),
    updatetime datetime default now(),
    uid int
);
-- 添加⼀个⽤户信息
INSERT INTO `mycnblog`.ùserinfo` (ìd`, ùsername`, `password`, `photo`, 
`createtime`, ùpdatetime`, `state`) VALUES 
(1, 'admin', 'admin', '', '2021-12-06 17:10:48', '2021-12-06 17:10:48', 
1);
-- ⽂章添加测试数据
insert into articleinfo(title,content,uid)
    values('Java','Java正⽂',1);
    
-- 添加视频
insert into videoinfo(vid,title,url,uid) values(1,'java 
title','http://www.baidu.com',1);

1.2 配置连接字符串和MyBatis

此步骤需要进行两项设置,数据库连接字符串设置和MyBatis的XML文件配置。

配置连接字符串
如果是 application.yml 添加如下内容:

# 数据库连接配置
spring:
  datasource:
    url: jdbc:mysql://localhost:3306/mycnblog?
characterEncoding=utf8&useSSL=false
    username: root
    password: 940194
    driver-class-name: com.mysql.cj.jdbc.Driver

注意事项:

如果使用 MySQL 是 5.x 之前的使用的是“com.mysql.jdbc.Driver”,如果是⼤于 5.x 使用的是“com.mysql.cj.jdbc.Driver”。

配置 MyBatis 中的 XML 路径
MyBatis 的 XML 中保存是查询数据库的具体操作 SQL,配置如下:

# 配置 mybatis xml 的⽂件路径,在 resources/mapper 创建所有表的 xml ⽂件
mybatis:
  mapper-locations: classpath:mapper/**Mapper.xml

在这里插入图片描述

1.3 添加业务代码

下面按照后端开发的工程思路,也就是下面的流程来实现MyBatis查询所有用户的功能:
在这里插入图片描述

1.3.1 添加实体类

先添加用户的实体类:

import lombok.Data;
import java.util.Date;

@Data
public class User {
   
    private Integer id;
    private String username;
    private String password;
    private String photo;
    private Date createTime;
    private Date updateTime;
}

1.3.2 添加mapper接口

数据持久层的接口定义:

import org.apache.ibatis.annotations.Mapper;
import java.util.List;

@Mapper
public interface UserMapper {
   
    public List<User> getAll();
}

1.3.3 添加 UserMapper.xml

数据持久成的实现,mybatis 的固定 xml 格式:

<?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">
   
</mapper>

UserMapper.xml 查询所有用户的具体实现 SQL:

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

以下是对以上标签的说明:

  • 标签︰需要指定namespace属性,表示命名空间,值为mapper接口的全限定名,包括全包名.类名。
  • 查询标签:是用来执行数据库的查询操作的:
    • id:是和Interface (接口)中定义的方法名称一样的,表示对接口的具体实现方法。
    • resultType:是返回的数据类型,也就是开头我们定义的实体类。

1.3.4 添加服务层

服务层实现代码如下:

import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.List;

@Service
public class UserService {
   
    @Resource
    private UserMapper userMapper;
    public List<User> getAll() {
   
        return userMapper.getAll();
    }
}

1.4.5 添加控制层

控制器层的实现代码如下:

import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource;
import java.util.List;

@RestController
@RequestMapping("/u")
public class UserController {
   
    @Resource
    private UserService userService;
    @RequestMapping("/getall")
    public List<User> getAll(){
   
        return userService.getAll();
    }
}

以上代码写完,整个 MyBatis 的查询功能就实现完了,接下来使用 postman 来测试⼀下。

1.4.6 使用 postman 测试

在这里插入图片描述

2. 增、删、改操作

接下来,我们来实现一下用户的增加、删除和修改的操作,对应使用MyBatis 的标签如下:

  • insert标签:插入语句
  • update标签:修改语句
  • delete标签︰删除语句

注:开启Mybatis 执行日志

#开启Mybaits sql打印
mybaits.configuration.log-impl=org.apache.ibatis.logging.stdout.std0utImpl

2.1 增加用户操作

controller 实现代码︰

@RequestMapping(value = "/add",method = RequestMethod.POST)
public Integer add(@RequestBody User user){
   
    return userService.getAdd(user);
}

mapper interface:

Integer add(User user);

mapper.xml

<insert id="add">
  insert into userinfo(username,password,photo,state)
  values(#{username},#{password},#{photo},1)
</insert>

Postman 添加访问:

在这里插入图片描述

默认情况下返回的是受

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值