15Spring Boot整合MyBatis

news/2024/5/15 1:02:53/文章来源:https://blog.csdn.net/qq_41946216/article/details/127100048

       MyBatis 是一个半自动化的 ORM 框架,所谓半自动化是指 MyBatis 只支持将数据库查出的数据映射到 POJO 实体类上,而实体到数据库的映射则需要我们自己编写 SQL 语句实现,相较于Hibernate 这种完全自动化的框架,Mybatis 更加灵活,我们可以根据自身的需求编写 sql 语句来实现复杂的数据库操作。

       随着 Spring Boot 越来越流行,越来越多的被厂商及开发者所认可,MyBatis 也开发了一套基于 Spring Boot 模式的 starter:mybatis-spring-boot-starter。本节我们就介绍下如何在 Spring Boot 项目中整合 MyBatis。

引入依赖

       Spring Boot 整合 MyBatis 的第一步,就是在项目的 pom.xml 中引入 mybatis-spring-boot-starter 的依赖,示例代码如下。

<!--引入 mybatis-spring-boot-starter 的依赖-->
<dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId><version>2.2.0</version>
</dependency>

配置 MyBatis

       在 Spring Boot 的配置文件(application.properties/yml)中对 MyBatis 进行配置,例如指定 mapper.xml 的位置、实体类的位置、是否开启驼峰命名法等等,示例代码如下。

###################### MyBatis 配置#########################
mybatis:# 指定 mapper.xml 的位置mapper-locations: classpath:mybatis/mapper/*.xml#扫描实体类的位置,在此处指明扫描实体类的包,在 mapper.xml 中就可以不写实体类的全路径名type-aliases-package: net.biancheng.www.beanconfiguration:#默认开启驼峰命名法,可以不用设置该属性map-underscore-to-camel-case: true  

注意:使用 MyBatis 时,必须配置数据源信息,例如数据库 URL、数据库用户型、数据库密码和数据库驱动等。否则报错。

#数据源连接信息
spring:datasource:username: rootpassword: rooturl: jdbc:mysql://localhost:3306/tyut?useUnicode=true&allowPublicKeyRetrieval=true&characterEncoding=UTF-8&useSSL=false&serverTimezone=Asia/Shanghaidriver-class-name: com.mysql.cj.jdbc.Driver

创建实体类

       在指定的数据库内创建一个 user 表,并插入一些数据,如下。

id  user_id  user_name  password sex  age   address        qq               email
1    12        老张             123456      男     24    重庆大学     324234         324234@qq.com
2    13        刘丽             123456      女     23    重庆大学    34543532     34543532@qq.com
4    14        张丽             123456      女    19     重庆大学    346756543   346756543@qq.com
5    15        王芳             123456      女    20     重庆大学   353453354    353453354@qq.com
7    16        李迪             123456     男     26     tyut            313370741   313370741@qq.com
8    17        杨科             123456     男     24     tyut            313370741   313370741@qq.com
9    18        张美             123456     女     23     tyut            313370741   313370741@qq.com

  DROP TABLE IF EXISTS user;
  CREATE TABLE `user`(
      `id` int(20) NOT NULL AUTO_INCREMENT,

      `user_id` int(20) DEFAULT NULL,
      `user_name` varchar(32) DEFAULT NULL,

      `password` varchar(32) DEFAULT NULL,
      `sex` varchar(32) DEFAULT NULL,
      `age` int(20) DEFAULT NULL,
      `address` varchar(32) DEFAULT NULL,
      `qq` varchar(32) DEFAULT NULL,
      `email` varchar(32) DEFAULT NULL,
       PRIMARY KEY (`id`)
  ) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8;


insert into `user`(id,user_id,user_name,password,sex,age,address,qq,email)values(1,12,'老张','123456','男',24'重庆大学','324234','324234@qq.com')
insert into `user`(id,user_id,user_name,password,sex,age,address,qq,email)values(2,13,'刘丽','123456','女',23'重庆大学','34543532','34543532@qq.com')
insert into `user`(id,user_id,user_name,password,sex,age,address,qq,email)values(4,14,'张丽','123456','女',19'重庆大学','346756543','346756543@qq.com')
insert into `user`(id,user_id,user_name,password,sex,age,address,qq,email)values(5,15,'王芳','123456','女',20'重庆大学','353453354','353453354@qq.com')
insert into `user`(id,user_id,user_name,password,sex,age,address,qq,email)values(7,16,'李迪','123456','男',26'tyut','313370741','313370741@qq.com')
insert into `user`(id,user_id,user_name,password,sex,age,address,qq,email)values(8,17,'杨科','123456','男',24'tyut','313370741','313370741@qq.com')
insert into `user`(id,user_id,user_name,password,sex,age,address,qq,email)values(9,18,'张美','123456','女',23'tyut','313370741','313370741@qq.com')
  

       根据数据库 user 表,创建相应的实体类 User,代码如下。

public class User implements Serializable {private Integer id;private Integer userId;private String userName;private String password;private String sex;private Integer userAge;private String address;private String qq;private String email;省略 getter setter toString 和构造方法
}

创建 Mapper 接口

       在com.hwadee.mapper 中创建一个 UserMapper 接口,并在该类上使用 @Mapper 注解,代码如下。

package com.hwadee.mapper;
import com.hwadee.entity.User;
import org.apache.ibatis.annotations.Mapper;
@Mapper
public interface UserMapper {//通过用户名密码查询用户数据User getByUserNameAndPassword(User user);
}

当 mapper 接口较多时,我们可以在 Spring Boot 主启动类上使用 @MapperScan 注解扫描指定包下的 mapper 接口,而不再需要在每个 mapper 接口上都标注 @Mapper 注解。

创建 Mapper 映射文件

       在配置文件 application.properties/yml 通过 mybatis.mapper-locations 指定的位置mybatis/mapper/ 中创建 UserMapper.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.hwadee.dao.UserMapper"><resultMap id="BaseResultMap" type="User"><id column="id" property="id"></id><result column="user_id" property="userId"></result><result column="user_name" property="userName"></result><result column="password" property="password"></result><result column="sex" property="sex"></result><result column="age" property="userAge"></result><result column="address" property="address"></result><result column="qq" property="qq"></result><result column="email" property="email"></result></resultMap><sql id="Base_Column_List">id, user_id, password, user_name, sex, age, address, qq, email</sql><!--根据用户名密码查询用户信息--><!--application.yml 中通过 type-aliases-package 指定了实体类的为了,因此--><select id="getByUserNameAndPassword" resultType="User">select *from userwhere user_name= #{userName,jdbcType=VARCHAR}and password= #{password,jdbcType=VARCHAR}</select>
</mapper>

       使用 Mapper 进行开发时,需要遵循以下规则:

  • mapper 映射文件中 namespace 必须与对应的 mapper 接口的完全限定名一致。
  • mapper 映射文件中 statement 的 id 必须与 mapper 接口中的方法的方法名一致
  • mapper 映射文件中 statement 的 parameterType 指定的类型必须与 mapper 接口中方法的参数类型一致。
  • mapper 映射文件中 statement 的 resultType 指定的类型必须与 mapper 接口中方法的返回值类型一致。

创建 Mapper 映射文件

1. 在 spring-boot项目中com.hwadee.service 包中创建一个名为 UserService 的接口,代码如下。

import net.biancheng.www.bean.User;
public interface UserService {public User getByUserNameAndPassword(User user);
}

2. 在com.hwadee.service.impl 包中创建 UserService 接口的实现类,并使用 注解@Service 将其以组件的形式添加到容器中,代码如下。

@Service("userService")
public class UserServiceImpl implements UserService {@AutowiredUserMapper userMapper;@Overridepublic User getByUserNameAndPassword(User user) {User loginUser = userMapper.getByUserNameAndPassword(user);return loginUser;}
}

3. 创建 LoginController 并编写 doLogin() 方法 ,代码如下。

@Slf4j
@Controller
public class LoginController {@AutowiredUserService userService;@RequestMapping("/user/login")public String doLogin(User user, Map<String, Object> map, HttpSession session) {//从数据库中查询用户信息User loginUser = userService.getByUserNameAndPassword(user);if (loginUser != null) {session.setAttribute("loginUser", loginUser);log.info("登陆成功,用户名:" + loginUser.getUserName());//防止重复提交使用重定向return "redirect:/main.html";} else {map.put("msg", "用户名或密码错误");log.error("登陆失败");return "login";}}
}

4. 启动springboot主体类,进行测试

       访问“http://localhost:8080/user/login?ussername=xxx&password=123456”



注解方式

       通过上面的学习,我们知道 mapper 映射文件其实就是一个 XML 配置文件,它存在 XML 配置文件的通病,即编写繁琐,容易出错。即使是一个十分简单项目,涉及的 SQL 语句也都十分简单,我们仍然需要花费一定的时间在mapper 映射文件的配置上。

       为了解决这个问题,MyBatis 针对实际实际业务中使用最多的“增伤改查”操作,分别提供了以下注解来替换 mapper 映射文件,简化配置:

  • @Select
  • @Insert
  • @Update
  • @Delete

       通过以上注解,基本可以满足我们对数据库的增删改查操作,示例代码如下。

@Mapper
public interface UserMapper {@Select("select * from user where user_name = #{userName,jdbcType=VARCHAR} and password = #{password,jdbcType=VARCHAR}")List<User> getByUserNameAndPassword(User user);@Delete("delete from user where id = #{id,jdbcType=INTEGER}")int deleteByPrimaryKey(Integer id);@Insert("insert into user ( user_id, user_name, password, email)" +"values ( #{userId,jdbcType=VARCHAR}, #{userName,jdbcType=VARCHAR}, #{password,jdbcType=VARCHAR}, #{email,jdbcType=VARCHAR})")int insert(User record);@Update(" update user" +"    set user_id = #{userId,jdbcType=VARCHAR},\n" +"      user_name = #{userName,jdbcType=VARCHAR},\n" +"      password = #{password,jdbcType=VARCHAR},\n" +"      email = #{email,jdbcType=VARCHAR}\n" +"    where id = #{id,jdbcType=INTEGER}")int updateByPrimaryKey(User record);
}

注意事项

       mapper 接口中的任何一个方法,都只能使用一种配置方式,即注解和 mapper 映射文件二选一,但不同方法之间,这两种方式则可以混合使用,例如方法 1 使用注解方式,方法 2 使用 mapper 映射文件方式。

我们可以根据 SQL 的复杂程度,选择不同的方式来提高开发效率。

  • 如果没有复杂的连接查询,我们可以使用注解的方式来简化配置;
  • 如果涉及的 sql 较为复杂时,则使用 XML (mapper 映射文件)的方式更好一些。

16Spring Boot整合日志框架

https://blog.csdn.net/qq_41946216/article/details/127106166?spm=1001.2014.3001.5502

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_15972.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

windows下Redis多实例部署

当存在多个项目的时候&#xff0c;需要同时部署时&#xff0c;且只有一台服务器时&#xff0c;哪么就需要部署Redis多个实例&#xff0c;原理很简单&#xff0c;多个Redis服务运行使用不同的配置及数据管理。 具体操作如下&#xff1a; 1、进入redis安装目录&#xff0c;找到…

zerotier的planet服务器(根服务器)-搭建教程

应用场景介绍: 利用阿里云服务器,搭建根服务器,把不同局域网打通,实现内网穿透,远程控制。 准备工具: 1、服务端:云服务器(有公网IP)Centos 7.62、客户端: 工控机(或者家里电脑)(Linux) ,公司电脑Windows 搭建私有化 ZeroTier步骤: 一、云服务器上安装服务操作…

python如何制作并安装自建包?

一、依赖 首先检查python是否安装了wheel、setuptools包,没有则使用pip安装pip install wheel --force-reinstallpip install setuptools --force-reinstall 二、准备文件在create_package文件夹下,制作自定义包(myPackage): 在该包下,有aa.py和bb.py两个模块, 同时该包…

win11怎么回去win10?四种方法教你!

win11系统与旧系统相比&#xff0c;在这些方面进行了重大更新&#xff1a;新的开始菜单、通知中心、重新设计的任务栏以及更加美观的圆角窗口&#xff0c;确实给用户带来了不一样的体验。然而&#xff0c;win11有时漏洞频出、BUG不断和兼容性不佳的问题&#xff0c;让很多升级w…

(附源码)springboot企业合同管理系统 毕业设计 161456

springboot企业合同管理系统 摘 要 信息化社会内需要与之针对性的信息获取途径&#xff0c;但是途径的扩展基本上为人们所努力的方向&#xff0c;由于站在的角度存在偏差&#xff0c;人们经常能够获得不同类型信息&#xff0c;这也是技术最为难以攻克的课题。针对企业合同等问…

安装CUDA、anaconda、pytorch

文章目录前言一、CUDA安装1.查看CUDA版本2.安装CUDA2.1 下载CUDA2.2 安装CUDA2.3 测试CUDA安装成功二、anaconda安装1.anaconda下载2.anaconda环境变量配置3.测试anaconda安装成功3.anaconda常见命令操作3.1 清华镜像3.2 切换虚拟环境三、pytorch安装1.anaconda下pytorch安装2.…

YOLOV5模型转onnx并推理

YOLOV5模型转onnx并推理模型转onnx普通模型转onnxyolov5模型转onnxonnx 推理普通模型yolov5模型一、推理二、坐标转换三、非极大值抑制四、根据置信度过滤无用框五、画图六、总代码模型转onnx 普通模型转onnx 加载模型&#xff0c;需要是torch.save保存的模型指定输入输出的名…

模板建立

模板建立 步骤如果还没有建立一个组存储自己的模板,则先选择2(红框处)然后取个名字就好如果已经有组了,在自己建立的组内添加新模板1:后续快速生成使用的代码 2:对该模板的描述 3.模板代码 4.应该是为这个模版声明对应的语言(后附展示具体界面)根据需要选择语言,一般为java,也有…

JMeter详细安装教程

文章目录1 运行环境配置2 JMeter下载3 JMeter环境变量配置与启动3.1 环境变量配置3.2 启动1 运行环境配置 JMeter运行需要java环境&#xff0c;安装JMeter前需要安装配置好Java&#xff0c;参考文章Java环境变量配置详细教程 2 JMeter下载 下载地址&#xff1a;http://jmete…

新一期智能钱包系列:Louis Guthmann和 Ivo Georgiev 讨论账户抽象与智能钱包

Ambire 的 Twitter Space 第 10 集探讨了 EVM 生态系统中的互操作性和资产管理的解决方案。 &#x1f525;&#x1f525;准备好迎接第&#x1f51f;集了吗&#xff1f; 我们将对以太坊账户和智能合约进行研究&#x1f913;&#xff0c;这将会很有趣。&#x1f606; 周四凌晨 1 …

【Spring】AOP的三种方式

什么是aop AOP&#xff08;Aspect Oriented Programming&#xff09;意为&#xff1a;面向切面编程&#xff0c;通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术。AOP是OOP的延续&#xff0c;是软件开发中的一个热点&#xff0c;也是Spring框架中的一个重要内…

SLAM第11讲

在&#xff11;&#xff11;讲中要下载DBow3库 地址&#xff1a;https://github.com/rmsalinas/DBow3 cd DBoW3 #进入源文件夹 mkdir build #新建一个编译目标文件夹 cd build #将build作为make工作路径 cmake -DUSE_CONTRIBON .. #编译上一级目录&#xff0c…

uni-app 怎么实现路由拦截

前言 随着业务的需求&#xff0c;项目需要支持H5、各类小程序以及IOS和Android&#xff0c;这就需要涉及到跨端技术&#xff0c;不然每一端都开发一套&#xff0c;人力成本和维护成本太高了。团队的技术栈主要以Vue为主&#xff0c;最终的选型是以uni-appuview2.0作为跨端技术…

Hugging Face学习

huggingface学习了解案列基础中文文本分类任务中文文本填空中文关系推断了解 Huggingface官网: link。Huggingface是一个开源社区&#xff0c;它提供给了先进的NLP模型&#xff0c;数据集以及其他的工具&#xff1a;数据集&#xff0c;数据集的下载地址&#xff1b;各种预训练…

杨氏干涉实验

摘要 杨氏干涉实验是显示光的波动特质的著名实验之一。这是当今几个量子光学实验的基础。 我们通过使用可调节狭缝宽度和狭缝距离的双狭缝&#xff0c;在VirtualLab Fusion中重现了这个著名的实验。 使用一个单点光源&#xff0c;我们检查了缝隙宽度和缝隙距离对干涉的影响&a…

什么OKR,分明是中华田园KPI

最近&#xff0c;OKR被诟病得越来越严重了&#xff1a;OKR就是啥都OK啊&#xff0c;最后累死自己就好了。这个诞生于互联网、成熟于互联网巨头&#xff0c;并普及世界的管理方法&#xff0c;却在本土化的实践中出现各种怨声哀道。 更有人吐槽的生动形象&#xff1a; OKR真的水土…

差分约束原理及其应用

经典应用&#xff1a;求不等式组的解 差分约束系统是一组n元一次不等式组&#xff0c;描述了n个变量x1~xn 之间的m对相对关系&#xff0c;其中每一个变量都可以变成形如xi-xj<ck,再来可以进一步变形成xi<xjck,这一条式子和求最短路算法里面的三角不等式dist[y]<dist…

MySQL——(三大日志)(MVCC)(间隙锁与其他各种锁)

三大日志 一个SQL执行的时候&#xff0c;会在buffer pool里面做哪些操作 undo log 在对数据执行操作之前就进行了记录 undo log主要记录了数据的逻辑变化&#xff0c;比如一条INSERT语句&#xff0c;对应一条DELETE的undo log&#xff0c;对于每个UPDATE语句&#xff0c;对应一…

【电商数仓】修改压缩编码、hive环境部署、yarn配置、idea开发环境搭建、准备数据

文章目录0 修改压缩编码格式&#xff08;1&#xff09;业务数据首日同步脚本&#xff08;2&#xff09;修改消费&#xff08;第二层&#xff09;Flume的配置文件1 Hive环境搭建&#xff08;1&#xff09;Hive引擎简介&#xff08;2&#xff09;Hive on Spark配置兼容性说明部署…

比色法,艾美捷总胶原蛋白检测试剂盒测定方案

胶原蛋白是细胞外基质的主要成分之一。胶原蛋白生成的失调会导致诸如纤维化&#xff08;胶原蛋白过多&#xff09;或骨关节炎&#xff08;胶原蛋白太少&#xff09;等疾病。因此&#xff0c;胶原蛋白生成的测量在许多与疾病相关的研究中都很重要。 目前市场上胶原蛋白检测范围&…