Spring 中使用MyBatis

news2024/9/23 8:20:05

一、Mybatis 的作用

1、MyBatis(前身为iBatis)是一个开源的Java持久层框架,它主要用于与数据库交互,帮助开发者更轻松地进行数据库操作。

持久层:指的是就是数据访问层(dao),是用来操作数据库的。
在这里插入图片描述

2、MyBatis 提供了一种简单而强大的方式来执行数据库操作,包括查询、插入、更新和删除。支持几乎所有的 JDBC 代码以及设置参数和获取结果集的工作。开发者可以使用XML配置文件或者注解来定义SQL语句,并且可以将SQL语句的参数映射到Java对象,以便进行数据库操作。

ORM是什么 ?

ORM(Object Relation Mapping)对象关系映射,是一种思想,主要包含三种对应关系:

关系映射对应关系
类和表对应一个pojo类 ←→ 一张数据库表
字段和列名对应pojo类中的一个字段 ←→ 数据库表中的一列
类实例化对象和数据对应pojo类的一个对象 ←→ 数据库表中的一行数据

ORM思想是所有持久层框架的基本思想,也是目前所有数据传输的思想。就是把数据和对象一一对应起来。从本质上来说SpringMVC也是做的这样的事情,数据在页面时,传到后台就成了对象。
在这里插入图片描述

3、MyBatis 提供了缓存机制,可以帮助提高查询性能。你可以配置缓存来存储查询结果,以便在后续查询中重用结果,从而减少数据库访问次数。

4、MyBatis 支持事务管理,可以确保数据库操作的原子性和一致性。你可以通过配置或编程方式管理事务,以满足应用程序的需求。

二、Spring中MyBatis的使用步骤

2.1 创建数据库和表

请自行安装数据库并创建表,例如我的数据库名为yiqifu

CREATE TABLE `U_USER` (
`id`  int(255) NULL ,
`nickname`  varchar(255) NULL 
);

在这里插入图片描述

2.2 添加maven依赖

分别添加mysql-connector-java(用于连接mysql数据库)、mybatis(mybatis核心库)、mybatis-spring(在spring中使用mybatis的库)的maven依赖包。

 
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>5.3.29</version>
        </dependency>
 
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.23</version>
        </dependency>
        
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.5.11</version>
        </dependency>
        <!--mybatis-spring包是适配包,帮助你在Spring中使用MyBatis-->
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis-spring</artifactId>
            <version>2.0.7</version>
        </dependency>
 
        <!--可以使用阿里巴巴的DruidDataSource-->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-jdbc</artifactId>
            <version>5.3.29</version>
        </dependency>
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid</artifactId>
            <version>1.2.8</version>
            <scope>test</scope>
        </dependency>

3.3 编写实体类

根据数据表的字段创建一个实体类,各字段可以不跟数据库一致。对应关系可以在Mapper.xml中配置

package top.yiqifu.study.p061_mybatis;
 
public class UserEntity {
 
    public int id;
    public String name;
 
 
    public UserEntity(){
 
    }
    public UserEntity(int id, String name) {
        this.id = id;
        this.name = name;
    }
 
 
    public int getId() {
        return id;
    }
 
    public void setId(int id) {
        this.id = id;
    }
 
    public String getName() {
        return name;
    }
 
    public void setName(String name) {
        this.name = name;
    }
 
    @Override
    public String toString() {
        return "UserEntity{" +
                "id=" + id +
                ", name='" + name + '\'' +
                '}';
    }
}

2.4 创建UserMapper接口

UserMapper接口的作用是告诉mybatis您要对数据库执行那些操作。具体实现类由Spring AOP完成。其中执行的SQL语句可以通过Mappser.xml配置,也可以在这里使用注解配置。我这里仅定义了几个简单的增删改查。

package top.yiqifu.study.p061_mybatis;
 
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Result;
import org.apache.ibatis.annotations.Results;
import org.apache.ibatis.annotations.Select;
 
import java.util.List;
 
@Mapper
public interface UserMapper {
 
    void insert(UserEntity user);
 
    void deleteById(Integer id);
 
    void update(UserEntity user);
 
    List<UserEntity> findAll();
 
    @Select("select * from u_user where id=#{id}")
    @Results({
        @Result(property = "name", column = "nickname"), // 指定属性名和列名的映射关系
    })
    UserEntity findById(Integer id);
}

2.5 配置UserMapper.xml

UserMapper.xml的作用是告诉mybatis您在UserMapper接口定义的方法具体使用什么样的SQL及其他约束。我这里简单配置了UserMapper接口中每个方法。

注:其实也可以直接在UserMapper接口中使用注解定义(请看findById方法),使用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">
 
 
<!-- namespace 对应到 接口上 就不需要实例化了 -->
<mapper namespace="top.yiqifu.study.p061_mybatis.UserMapper">
 
    <resultMap type="top.yiqifu.study.p061_mybatis.UserEntity" id="BaseResultMap">
        <!-- column 表里的字段 -->
        <!-- property 实体对象里的属性 -->
        <result column="id" property="id"/>
        <result column="nickname" property="name"/>
    </resultMap>
 
    <insert id="insert" parameterType="top.yiqifu.study.p061_mybatis.UserEntity">
    insert into u_user(nickname) values(#{name})
    </insert>
 
    <insert id="deleteById" parameterType="Integer">
    delete  from u_user where id=#{id}
    </insert>
 
    <insert id="update" parameterType="top.yiqifu.study.p061_mybatis.UserEntity">
    update u_user set nickname=#{name} where id=#{id}
    </insert>
 
    <select id="findAll" resultMap="BaseResultMap">
      select * from u_user
    </select>
 
 
</mapper>

2.6 配置数据库连接信息 JDBC

配置jdbc.properties(放在resources目录下)的作用是指定数据连接信息。

database.driver=com.mysql.cj.jdbc.Driver
 
database.url=jdbc:mysql://localhost:3306/yiqifu?characterEncoding=utf8&useSSL=false&serverTimezone=UTC
 
database.username=root
 
database.password=123456xxoo

2.7 在Spring中配置Mybatis

配置applicationContext-mybatis.xml(放在resources目录下)的作用将前的内容整合在起。包括mybatis的JDBC环境,接口映射和接口配置。

<?xml version="1.0" encoding="UTF-8" ?>
 
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/context
        http://www.springframework.org/schema/context/spring-context.xsd"
    >
 
    <context:component-scan base-package="top.yiqifu.study.p061_mybatis"></context:component-scan>
 
    <!-- 加载jdbc.properties配置文件 -->
    <context:property-placeholder location="classpath:jdbc.properties"/>
 
    <!-- 配置 MyBatis 数据源 -->
    <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
        <property name="driverClassName" value="${database.driver}" />
        <property name="url" value="${database.url}" />
        <property name="username" value="${database.username}" />
        <property name="password" value="${database.password}" />
    </bean>
 
    <!-- 配置 mybatis Session -->
    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
        <property name="dataSource" ref="dataSource" />
        <!--<property name="configLocation" value="classpath:mybatis-config.xml"></property>-->
        <property name="mapperLocations" value="classpath:mapper/*.xml" />
    </bean>
 
    <!-- 扫描Mapper接口(Spring会使用AOP为其实现具体方法) -->
    <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
        <property name="basePackage" value="top.yiqifu.study.p061_mybatis" />
    </bean>
 
 
</beans>

2.8 在Spring中调用Mybatis查询数据

以下是调用示例:

package top.yiqifu.study.p061_mybatis;
 
import org.springframework.context.support.ClassPathXmlApplicationContext;
import top.yiqifu.study.p051_proxy.Test011_StaticProxyDog;
import top.yiqifu.study.p051_proxy.Test041_Animal;
import top.yiqifu.study.p051_proxy.Test042_Dog;
 
 
public class Test001_Mybatis
{
    // 静态代理
    public static void main( String[] args )
    {
        ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("applicationContext-mybatis.xml");
        UserMapper mapper = context.getBean("userMapper", UserMapper.class);
 
        for(String beanName : context.getBeanDefinitionNames()){
            System.out.println(beanName);
        }
 
 
        UserEntity user1 = new UserEntity();
        UserEntity user2 ;
        //添加
        user1.setName("test");
        mapper.insert(user1);
 
        int userId = 7;
        user2 = mapper.findById(userId);
        System.out.println(user2);
        //修改
        user1.setId(userId);
        user1.setName("new-test");
        mapper.update(user1);
 
        //查询
        user2 = mapper.findById(userId);
        System.out.println(user2);
 
        //删除
        //mapper.deleteById(userId);
 
 
        user2 = mapper.findById(userId);
        System.out.println(user2);
    }
}

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Filament 【表单操作】修改密码

场景描述&#xff1a; 新增管理员信息时需要填写密码&#xff0c;修改管理员信息时密码可以为空&#xff08;不修改密码&#xff09;&#xff0c;此时表单中密码输入有冲突&#xff0c;需要对表单中密码字段进项条件性的判断&#xff0c;使字段在 create 操作时为必需填写&…

深度学习-注意力机制和分数

深度学习-注意力机制 注意力机制定义与起源原理与特点分类应用领域实现方式优点注意力机制的变体总结注意力分数定义计算方式注意力分数的作用注意力分数的设计总结 注意力机制&#xff08;Attention Mechanism&#xff09;是一个源自对人类视觉研究的概念&#xff0c;现已广泛…

实测 WordPress 最佳优化方案:WP Super Cache+Memcached+CDN

说起 WordPress 优化加速来可以说是个经久不衰的话题了&#xff0c;包括明月自己都撰写发表了不少相关的文章。基本上到现在为止明月的 WordPress 优化方案已经固定成型了&#xff0c;那就是 WP Super CacheMemcachedCDN 的方案&#xff0c;因为这个方案可以做到免费、稳定、安…

如何用R语言ggplot2画高水平期刊散点图

文章目录 前言一、数据集二、ggplot2画图1、全部代码2、细节拆分1&#xff09;导包2&#xff09;创建图形对象3&#xff09;主题设置4&#xff09;轴设置5&#xff09;图例设置6&#xff09;散点颜色7&#xff09;保存图片 前言 一、数据集 数据下载链接见文章顶部 处理前的数据…

基于FreeRTOS+STM32CubeMX+LCD1602+MCP6S26(SPI接口)的6通道模拟可编程增益放大器Proteus仿真

一、简介: MCP6S26是模拟可 编程增益放大器(Programmable Gain Amplifiers, PGA)。它们可配置为输出 +1 V/V 到 +32 V/V 之间的增 益,输入复用器可通过 SPI 端口选择最多 6 个通道中的 一个。串行接口也可以将 PGA 置为关断模式,以降低 功耗。这些 PGA 针对高速度、低失调…

Python编程基础5

邮件编程 SMTP&#xff08;Simple Mail Transfer Protocol&#xff09;简单邮件传输协议&#xff0c;使用TCP协议25端口&#xff0c;它是一组用于由源地址到目的地址传送邮件的规则&#xff0c;由它来控制信件的中转方式。python的smtplib提供了一种很方便的途径发送电子邮件。…

【python】tkinter GUI开发: Button和Entry的应用实战探索

✨✨ 欢迎大家来到景天科技苑✨✨ &#x1f388;&#x1f388; 养成好习惯&#xff0c;先赞后看哦~&#x1f388;&#x1f388; &#x1f3c6; 作者简介&#xff1a;景天科技苑 &#x1f3c6;《头衔》&#xff1a;大厂架构师&#xff0c;华为云开发者社区专家博主&#xff0c;…

MySQL----排序ORDER BY

在对数据进行处理的时候&#xff0c;我们通常需要对读取的数据进行排序。而 MySQL 的也提供了 ORDER BY 语句来满足我们的排序要求。 ORDER BY 可以按照一个或多个列的值进行升序&#xff08;ASC&#xff09;或降序&#xff08;DESC&#xff09;排序。 语法 SELECT column1…

航班进出港管理系统的设计

管理员账户功能包括&#xff1a;系统首页&#xff0c;个人中心&#xff0c;管理员管理&#xff0c;用户管理&#xff0c;航班信息管理&#xff0c;航飞降落请求管理&#xff0c;公告信息管理 前台账户功能包括&#xff1a;系统首页&#xff0c;个人中心&#xff0c;公告信息&a…

中国新兴的数字证书品牌——JoySSL

JoySSL是一个基于全球可信顶级根创新推出的新一代https数字证书&#xff0c;也是中国为数不多的自主品牌SSL证书。以下是关于JoySSL的详细介绍&#xff1a; 1 品牌背景&#xff1a; JoySSL是网盾安全旗下的产品&#xff0c;专注于网络安全技术服务、安全防护系统集成、数据安…

计算机网络知识CIDR(无类别域区间路由)

目录 介绍 基本信息 优点与关联 如何计算判定范围&#xff08;你应该是来看这个的&#xff0c;前面是水字数的&#xff09; 省流版 介绍 无类别域间路由&#xff08;Classless Inter-Domain Routing、CIDR&#xff09;是一个用于给用户分配IP地址以及在互联网上有效地路由…

【SkiaSharp绘图】01使用SkiaSharp绘制Hello World

文章目录 SkiaSharp简介主要特点适用场景 SkiaSharp的Hello World!1、创建一个.NET Framework项目2、拖入SKGLControl控件GLControl、SKControl、SKGLControl对比GLControlSKControlSKGLControl选择和使用场景高性能的选择 SKGLControl 3、绘制Hello World 为何选择SkiaSharpIm…

绘唐科技官网

绘唐科技AI工具是一系列经过训练的人工智能工具&#xff0c;旨在提供各种智能化的解决方案。这些工具可以应用于多个领域&#xff0c;包括自然语言处理、图像识别、语音识别、机器学习等。 其中&#xff0c;自然语言处理工具可以帮助用户处理和理解文本数据。它可以实现文本分类…

150W无感功率电阻器

特点&#xff1a;1x150 W/2x60 W/3x33 W功率 SOT-227模具封装两种不同的端子选项 可供选择良好的机械可靠性 无感设计 电阻值&#xff1a;0.5Ω≤ 1MΩ 耐抗精度:1%- 10 % 温度系数:50 ppm/℃- 250 ppm/℃(25℃-105℃&#xff09; 额定功率:150W 70℃ bottom case tempe…

Thinkphp一文鸡富贵鸡玫瑰庄园富农场仿皮皮果理财农场源码

Thinkphp一文鸡富贵鸡玫瑰庄园富农场仿皮皮果理财农场源码&#xff0c;喜欢的朋友可以下载研究 一文鸡富贵鸡玫瑰庄园富农场仿皮皮果理财农场源码

8-1RT-Thread消息队列

8-1RT-Thread消息队列 消息队列又称队列&#xff0c;是一种常用于线程间通信的数据结构。 消息队列控制块里有两个链表&#xff0c;空闲列表用来挂接空的小几块&#xff0c;另一个链表是用来挂接存有消息的消息框。其中消息链表头指向消息队列当中的第一个消息框&#xff0c;而…

Python 制作词云图

&#x1f49d;&#x1f49d;&#x1f49d;欢迎莅临我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:「stormsha的主页」…

LabVIEW处理大量数据时,怎样确保数据的准确性和完整性?

在LabVIEW处理中&#xff0c;确保大量数据的准确性和完整性至关重要。以下是详细的多角度分析和建议&#xff0c;以确保在LabVIEW中处理大量数据时&#xff0c;数据的准确性和完整性&#xff1a; 1. 数据采集阶段 1.1 高精度硬件选择 选择高精度的数据采集硬件&#xff0c;如…

C++设计模式---装饰器模式

1、介绍 装饰器&#xff08;Decorator&#xff09;模式是一种结构型设计模式&#xff0c;它允许你动态地给一个对象添加额外的职责。 装饰器模式主要用于扩展对象的功能&#xff0c;而又不改变其原有结构。在C中&#xff0c;装饰器模式主要应用于那些需要为对象动态添加功能或改…

STM32定时器输出pwm的几种模式

目录 定时器 输出脉冲模式&#xff1a; PWM模式&#xff08;PWM Mode&#xff09; 输出比较模式&#xff08;Output Compare Mode&#xff09; 总结 占空比&#xff1a; 输出比较模式与占空比 PWM模式与占空比 输出比较模式与PWM模式的结合 输出比较模式实例&#xf…