Spring Boot Mybatis入门示例

Spring Boot 整合 MyBatis 快速入门超详教程 快速入门 Spring Boot 和 MyBatis! 阅读详情

Spring Boot Mybatis 入门示例


基于Spring Boot 2.3.4,Junit5

步骤说明

    整个工程的最终目录结构如下,添加文件或者新建的目录的参考:

└─src
    ├─main
    │  ├─java
    │  │  └─com
    │  │      └─mall
    │  │          └─MallWeb
    │  │              ├─controllers
    │  │              ├─mapper
    │  │              ├─model
    │  │              └─services
    │  └─resources
    │      └─mybatis
    │          └─mapper
    └─test
        └─java
            └─com
                └─mall
                    └─MallWeb
                        └─mapper

数据库初始化语句

    数据库表的初始化语句全部在下面,也可以根据自己的情况进行修改

CREATE DATABASE  IF NOT EXISTS `mall`;

USE `mall`;

CREATE TABLE IF NOT EXISTS `users` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(16) NOT NULL,
  `password` varchar(16) NOT NULL,
  `phoneNumber` varchar(15) NOT NULL,
  `money` int(11) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=latin1;

build.gradle:依赖添加

    需要添加下面依赖

  • ‘mysql:mysql-connector-java:8.0.14’
  • ‘org.mybatis.spring.boot:mybatis-spring-boot-starter:2.0.0’
  • ‘org.projectlombok:lombok:1.16.16’
dependencies {
	implementation 'org.springframework.boot:spring-boot-starter-web'

	//	MySQL数据库需要
	implementation 'mysql:mysql-connector-java:8.0.14'
	//	spring mybatis
	implementation 'org.mybatis.spring.boot:mybatis-spring-boot-starter:2.0.0'
	//	lombok,用于Entity的自动get和set方法生成,不用自己写一大推的get和set方法
	implementation 'org.projectlombok:lombok:1.16.16'

	testImplementation('org.springframework.boot:spring-boot-starter-test') {
		exclude group: 'org.junit.vintage', module: 'junit-vintage-engine'
	}
}

application.properties:配置添加

    配置文件的编写需要注意参数的配置,比如SSL那个一般要设置为false,driver-class-name也要注意一下,不要写错了,文件的大致内容如下:

# mybatis的config文件位置配置
mybatis.config-location=classpath:mybatis/mybatis-config.xml
# 各个表的xml文件位置配置
mybatis.mapper-locations=classpath:mybatis/mapper/*.xml
mybatis.type-aliases-package=com.neo.model

# 数据库连接信息配置,自行更换数据库,用户名和密码
spring.datasource.url=jdbc:mysql://localhost:3306/mall?serverTimezone=UTC&useUnicode=true&characterEncoding=utf-8\
  &useSSL=false
spring.datasource.username=root
spring.datasource.password=root
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver

#springboot + mybatis设置将SQL语句打印到控制台
logging.level.com.mall.MallWeb.mapper=debug

代码编写

入口环境配置Mapper扫描配置

    在入口函数添加Mapper扫描配置,这样不必在每个Mapper上加上Mapper注解,大致如下:

package com.mall.MallWeb;

import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

/**
 * @author lw
 */
@SpringBootApplication
@MapperScan("com.mall.MallWeb.mapper")
public class MallWebApplication {

	public static void main(String[] args) {
		SpringApplication.run(MallWebApplication.class, args);
	}

}
编写实体类

    在代码目录下创建model文件夹,用于存储实体(数据库表)。编辑实体类,大致如下:

ppackage com.mall.MallWeb.model;

import java.io.Serializable;

/**
 * @author lw
 */
public class User implements Serializable {

    private Long id;
    private String name;
    private String password;
    private String phoneNumber;
    private Long money;

    public User(String name, String password, String phoneNumber) {
        this.name = name;
        this.password = password;
        this.phoneNumber = phoneNumber;
        this.money = 0L;
    }

    @Override
    public String toString() {
        return id + "::" + name + "::" + password + "::" + phoneNumber + "::" + money;
    }

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public String getPhoneNumber() {
        return phoneNumber;
    }

    public void setPhoneNumber(String phoneNumber) {
        this.phoneNumber = phoneNumber;
    }

    public Long getMoney() {
        return money;
    }

    public void setMoney(Long money) {
        this.money = money;
    }

}

Mapper接口类

    新建Mapper文件夹,里面放Mapper相关的接口类。编写Mapper接口类,大致内容如下,@Repository解决idea里面的bean使用错误

package com.mall.MallWeb.mapper;

import com.mall.MallWeb.model.User;
import org.springframework.stereotype.Repository;

import java.util.List;

/**
 * @author lw
 */
@Repository
public interface UserMapper {

    List<User> queryAll();
    User queryOne(Long id);
    void add(User user);
    void update(User user);
}

Mytatis配置文件mybatis-config.xml

    新建文件夹 resource/mybatis,下面新建:mybatis-config.xml 文件,写入下面的内容:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
    <typeAliases>
        <typeAlias alias="Integer" type="java.lang.Integer" />
        <typeAlias alias="Long" type="java.lang.Long" />
        <typeAlias alias="HashMap" type="java.util.HashMap" />
        <typeAlias alias="LinkedHashMap" type="java.util.LinkedHashMap" />
        <typeAlias alias="ArrayList" type="java.util.ArrayList" />
        <typeAlias alias="LinkedList" type="java.util.LinkedList" />
    </typeAliases>
</configuration>
表users查询配置文件User.xml

    新建文件夹 resouce/mybatis/mapper,新建文件:User.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.mall.MallWeb.mapper.UserMapper" >
    <resultMap id="BaseResultMap" type="com.mall.MallWeb.model.User" >
        <id column="id" property="id" jdbcType="BIGINT" />
        <result column="name" property="name" jdbcType="VARCHAR" />
        <result column="password" property="password" jdbcType="VARCHAR" />
        <result column="phoneNumber" property="phoneNumber" jdbcType="VARCHAR"/>
        <result column="money" property="money" jdbcType="BIGINT" />
    </resultMap>

    <sql id="Base_Column_List" >
        id, name, password, phoneNumber, money
    </sql>

    <insert id="add" parameterType="com.mall.MallWeb.mapper.UserMapper" useGeneratedKeys="true" keyProperty="id">
        INSERT INTO
            users
            (name, password, phoneNumber, money)
        VALUES
            (#{name}, #{password}, #{phoneNumber}, #{money})
    </insert>

    <update id="update" parameterType="com.mall.MallWeb.model.User">
        UPDATE
            users
        SET
        <trim suffixOverrides="," suffix="WHERE id = #{id}">
            <if test="name != null">name = #{name},</if>
            <if test="password != null">password = #{password},</if>
            <if test="phoneNumber != null">phoneNumber = #{phoneNumber},</if>
            <if test="money != null">money = #{money},</if>
        </trim>
    </update>

    <select id="queryAll" resultMap="BaseResultMap">
        SELECT
            <include refid="Base_Column_List" />
        FROM users
    </select>

    <select id="queryOne" resultType="com.mall.MallWeb.model.User" parameterType="java.lang.Long">
        SELECT
            <include refid="Base_Column_List" />
        FROM users
            WHERE id = #{id}
    </select>

</mapper>

测试文件UserMapperTest

    大致打代码如下:

    在Junit5中没有了RunWith,换成了ExtendWith。测试中使用了真实的数据库,所有开启了测试后的数据回滚,避免测试数据进入数据库

package com.mall.MallWeb.mapper;

import com.mall.MallWeb.model.User;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit.jupiter.SpringExtension;
import org.springframework.transaction.annotation.Transactional;

import java.util.List;

@ExtendWith(SpringExtension.class)
@SpringBootTest
public class UserMapperTest {

    @Autowired
    private UserMapper userMapper;

    @Test
    @Transactional
    public void addUserTest() {
        User user = new User("testUser", "testPassword", "testPhone");
        userMapper.add(user);
        assert userMapper.queryAll().size() != 0;
    }

    @Test
    public void queryTest() {
        List<User> users = userMapper.queryAll();
        assert users.size() != 0;
        for (User user: users) {
            System.out.println(user.toString());
        }
    }

    @Test
    @Transactional
    public void updateTest() {
        User user = new User("testUser", "testPassword", "testPhone");
        userMapper.add(user);
        System.out.println(user.toString());

        User newUser = userMapper.queryOne(user.getId());
        System.out.println(newUser.toString());

        newUser.setName("updateUser");
        System.out.println(newUser.toString());

        userMapper.update(newUser);
        System.out.println(newUser.toString());

        User queryUser = userMapper.queryOne(user.getId());
        assert queryUser.getName().equals("updateUser");
    }
}

controllers目录下视图文件:UserController.java

package com.mall.MallWeb.controllers;

import com.mall.MallWeb.mapper.UserMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.HashMap;
import java.util.Map;

/**
 * 用户
 */
@RestController
@RequestMapping("/user")
public class UserController {

    @Autowired
    private UserMapper userMapper;

    @GetMapping("/users")
    public Map users() {
        Map response = new HashMap();
        response.put("status", "success");
        response.put("users", userMapper.queryAll());
        return response;
    }
}

启动与测试

    现在开始运行程序,使用浏览器访问链接:http://localhost:8080/user/users

    能看到有数据或者没有数据都是成功的(下面的数据是提前插入的)

{
    "users": [
        {
            "id": 6,
            "name": "testUser",
            "password": "testPasspword",
            "phoneNumber": "testPhone",
            "money": 0
        },
        {
            "id": 7,
            "name": "testUser",
            "password": "testPasspword",
            "phoneNumber": "testPhone",
            "money": 0
        },
        {
            "id": 8,
            "name": "testUser",
            "password": "testPasspword",
            "phoneNumber": "testPhone",
            "money": 0
        },
        {
            "id": 9,
            "name": "testUser",
            "password": "testPasspword",
            "phoneNumber": "testPhone",
            "money": 0
        },
        {
            "id": 10,
            "name": "testUser",
            "password": "testPassword",
            "phoneNumber": "testPhone",
            "money": 0
        },
        {
            "id": 11,
            "name": "testUser",
            "password": "testPassword",
            "phoneNumber": "testPhone",
            "money": 0
        },
        {
            "id": 12,
            "name": "testUser",
            "password": "testPassword",
            "phoneNumber": "testPhone",
            "money": 0
        }
    ],
    "status": "success"
}

参考链接

Spring Boot+MyBatis入门案例 目录概述新建项目项目结构数据库表pom.xmlapplication.yml配置文件User实体类Mapper接口Service接口及其实现类Controller编写main方法测试更新方法查询全部删除方法后记 概述 使用Spring Boot+MyBatis实现用户的增删查改。 新建项目 可以参考这个作者的步骤 ------>使用IDEA创建一个springboot项目 项目结构 数据库表 为了方便测试,用户只设置了id和name属性。 pom.xml <?xml version="1.0 阅读详情

相关推荐

Spring Boot和Mybatis整合入门实践指南

Mybatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。与传统的 JDBC 相比,Mybatis 减少了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。Mybatis 可以使用简单的 XML 或注解用于配置和原始映射,将接口和 Java 的 POJOs(Plain Old Java Objects,普通的 Java对象)映射成数据库中的记录。

weixin_35761094的博客 383

SpringBoot+Mybatis实例(图文教程)

现在在公司主要还是做大数据平台的测试,而今天记录下SpringBoot整合Mybatis,好记性不如烂笔头。废话不多说,开干。在网上找到一个不错的轮子。直接整。

全村的希望的博客 5521

springboot整合mybatis完整版代码示例

springboot整合mybatis示例 , 传统的spring 整合mybatis大家都知道光配置文件就很复杂, 繁琐, 有一个地方编写有问题, 整个项目就会跑不起来, 总而言之就是各自配置过于繁琐, 但是sprintboot就不一样了, 直接集成了好多spring的东西, 无需编写传统的spring配置文件, 就能很轻松方便的把项目跑起来, 提高了开发效率, 整个过程变得十分高效简洁, 使用起来那叫一个让人轻松愉悦, 哈哈哈

基于springboot的前后端分离的案列(一)

练习案列

qq_67124455的博客 3542

SpringBoot整合Mybatis示例源码

SpringBoot整合Mybatis示例源码,

mybatis-spring-boot-starter-2.0.0.jar

mybatis mybatis-spring-boot-starter-2.0.0.jar下载

Spring boot mybatis 简单示例

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

lxyoucan的博客 876

Springboot整合mybatis简单登录实例

刚进一家公司,用的是springboot+mybatis,之前一直没用过,就自己搭建了一个简单的demo,加深一下理解,弄了半天才跑通,真的很简单的demo,很适合初学者

springboot + mybatis简单例子

【代码】springboot + mybatis简单例子。

邱邱的博客 418

保姆级教程:在RK3568上调试RGMII网口,从设备树到PHY驱动的完整避坑指南

本文提供RK3568开发板上RGMII网口调试的完整指南,涵盖硬件检查、设备树配置、驱动加载及性能优化。通过详细步骤和实战案例,帮助开发者避开常见陷阱,确保以太网功能稳定运行,特别关注PHY驱动和MDIO总线的调试技巧。

weixin_26821003的博客 320

YOLOv8-seg模型后处理实战:从输出解析到mask生成的完整流程

本文详细解析了YOLOv8-seg实例分割模型的后处理完整流程,从理解output0与output1的双输出结构,到实现检测框的置信度过滤、坐标转换与NMS,再到核心的掩膜生成数学原理与矩阵乘法实现。文章深入探讨了如何将掩膜系数与原型掩膜库结合,生成像素级分割结果,并提供了掩膜上采样、边缘优化、性能提升及解决实际应用难题的实战方案。

xgboost6farmer的博客 316

springboot+mybatis示例

1、新建springboot项目,结构如下 2、pom.xml新增mybatis依赖 <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>1.3.2</version> </dependency&.

qq_38642731的博客 689

华为海思IC设计岗位笔试全解析:物理、电路与工艺三大方向备考指南

本文全面解析华为海思IC设计岗位笔试的物理、电路与工艺三大方向备考要点。针对物理设计方向,重点讲解半导体能带理论、载流子输运机制等核心考点;电路设计方向涵盖Verilog语法、UVM验证等关键技术;工艺方向则深入探讨FinFET工艺、光刻技术等前沿知识。提供高效备考策略和应试技巧,助力考生提升通过率。

weixin_29196613的博客 1082

芋道 Spring Boot MyBatis 入门

点击上方“芋道源码”,选择“设为星标”做积极的人,而不是积极废人!源码精品专栏原创 | Java 2019 超神之路,很肝~中文详细注释的开源项目RPC 框架 Dubbo 源码解析网络...

芋艿V 639

Altium Designer差分走线实战:从规则设置到阻抗匹配的完整流程

本文详细讲解了在Altium Designer中进行差分走线的完整实战流程,涵盖从原理图定义差分对、PCB布局管理、关键设计规则设置,到利用阻抗计算工具确定线宽与间距,以及布线技巧与等长处理等核心步骤。文章旨在帮助工程师掌握高速PCB设计中差分信号传输的关键技术,确保信号完整性并实现精确的阻抗匹配。

weixin_29163857的博客 254

【读论文】ASR大模型动态热词新方案

大型语言模型(LLMs)以其卓越的通用知识和推理能力重塑了 AI 领域,但它们在处理特定领域或用户的专有词汇(即“热词”)时,往往表现出“选择性失忆”。传统的 RAG 或 Prompting 方案在实时性和准确性上存在瓶颈。阿里的《Hotword Model for Large Models》论文提出了一种“神经插件”方案,它能够在不修改基座模型权重的前提下,动态、精准地将热词能力注入到生成过程中。本文将从架构设计、训练范式到推理逻辑,全方位拆解这一技术的内核,并探讨其在工业级应用中的价值。

kakaZhui的博客 290

Spring boot(maven) - Mybatis 超级入门版

一款java连接数据库的框架分为三块区域第一区:java区第二区:mybatis区第三区:数据库区(简称Sql区)mybatis是连接两端的桥梁,起到了翻译的作用,将java语言翻译成Sql可运行的语言,将Sql运行的结果返回经过处理,返回至java语言环境中将两个不相关的语言联系在一起,就是mybatis的作用。

c_yanxin_ru的博客 1314

通过Langchain实现大模型完成测试用例生成的代码(可集成到各种测试平台)

代码中使用的是讯飞spark3.0版本,其中版本在的控制已经封装到了langchain对应的讯飞的iflytek的类中,可以在调用的时候显示控制,默认是spark2.0版本。

Criss@陈磊 2360

Spring Boot 整合 MyBatis 快速入门指南

Spring Boot 整合 MyBatis 快速入门指南 本指南基于 ShawnyXiao 的 SpringBoot-MyBatis 开源项目,旨在帮助您快速理解和搭建一个基于 Spring Boot 和 MyBatis 的后台服务。 1. 项目目录结构及介绍 以下是项目的高级别目录结构及其主要组成部分: . ├── src │ ├── main │ │ ├── java │ │...

gitblog_00692的博客 894

基于FPGA的以太网设计(1)----大白话解释什么是以太网

基于FPGA的千兆以太网设计(1)----大白话解释什么是以太网

孤独的单刀 3869

mapbox进阶,dem数据转为等高面,加载转换后的等高面到地图

本文详细介绍如何基于mapbox-gl v3.*.* 版本,使用dem数据转为等高面,加载转换后的等高面到地图,亲测可用。希望能帮助到您。一起学习,加油!加油!

我哎GIS博客 406

【Spring Boot】MyBatis入门:连接Mysql数据库、测试单元、连接的常见错误

本文以MyBatis框架为核心,系统讲解了其作为持久层框架的核心价值与快速入门实践。首先介绍MyBatis专注于简化JDBC开发,通过映射机制实现数据库与Java对象的高效交互。随后通过Spring Boot项目实战演示:配置MyBatis与MySQL依赖、创建包含deleteFlag等字段的UserInfo实体类、编写Mapper接口并使用@Select注解实现数据查询。针对单元测试中出现的空指针问题,指出需添加@SpringBootTest注解以加载Spring上下文。

Code哈哈笑的博客 2176

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

spring boot 、mybatis-plus、shiro整合入门教程(二)——mybatis-plus常用操作

接续上一篇,spring boot 、mybatis-plus、shiro整合入门教程(一)——mybatis-plus代码生成器 项目中的数据库表设计如下: 菜单管理页面功能:新增、修改、删除、查询 新增代码如下: SysMenuController类的代码如下: @Resource private SysMenuServiceImpl sysMenuService; /*...

u011915230的专栏 988

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

Spring Boot入门系列之:三、Spring Boot整合Mybatis

spring-boot-mybatis 开发环境 开发工具: Intellij IDEA 2018.2.6 springboot: 2.0.7.RELEASE jdk: 1.8.0_192 maven: 3.6.0 mybatis: 3.4.6 mybatis 简介 什么是 MyBatis ? MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免...

leone的博客 4636

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

Spring Boot MyBatis 入门

1. 概述 在 DAL 数据访问层,目前会有三种方向的解决方案: JDBC MyBatis JPA 艿艿自己在知识星球中,做过一个简单的调研,看看大家使用哪个为主。结果是 MyBatis > JPA > JDBC 。这个也符合在知乎上看到的两篇文章: 《MyBatis 为什么在国内相当流行?》 《为什么阿里巴巴的持久层采用 iBatis 框架,而不使用 hibernat...

weixin_42073629的博客 477

Spring boot入门spring mvc spring boot mybatis配置整合

备注: 通过前面几章的操作,对Spring Boot已经有了基本的了解,不过Spring Boot他也仅仅是个封装集成引用的盒子而已,需要与具体的项目相结合才能真正的使用起来, 主要是记录下 使用Spring Boot实现 Spring Mvc 和mybatis的整合: 具体配置如下: 1、创建Maven项目,可以是web项目或者也可以是基本maven项目 2、配置pom.xml &...

常年被追砍的博客 812
上一篇: Java垃圾回收GC概览
下一篇: Mysql Docker 主从配置
_萧_
博客等级 码龄10年 55粉丝 157原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值