mybatis 的快速入门以及基于spring boot整合mybatis(一)

news2024/11/24 23:07:54

MyBatis基础

MyBatis是一款非常优秀的持久层框架,用于简化JDBC的开发

准备工作:
   1,创建sprong boot工程,引入mybatis相关依赖
   2,准备数据库表User,实体类User
   3, 配置MyBatis(在application.properties中数据库连接信息)
   4,编写Mybatis程序:编写MyBatis的持久层接口,定义SQL(注解/XML)

创建spring boot工程,并且引入相关的依赖。

1,在自己的工程下右击,然后点击new,选择module。

选择:spring Initializr 右边的配置根据自己情况选择。

选择spring boot的版本和要添加的依赖,最后点击创建。

查看pom文件

         <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>3.0.3</version>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.31</version>
        </dependency>
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid-spring-boot-starter</artifactId>
            <version>1.2.11</version>
        </dependency>

        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>

2,准备数据库库表user

create table user(
    id int unsigned primary key auto_increment comment 'ID,主键',
    username varchar(20) comment '用户名',
    password varchar(32) comment '密码',
    name varchar(10) comment '姓名',
    age tinyint unsigned comment '年龄'
) comment '用户表';

insert into user(id, username, password, name, age) values (1, 'daqiao', '123456', '大乔', 22),
                                                           (2, 'xiaoqiao', '123456', '小乔', 18),
                                                           (3, 'diaochan', '123456', '貂蝉', 24),
                                                           (4, 'lvbu', '123456', '吕布', 28),
                                                           (5, 'zhaoyun', '12345678', '赵云', 27);

和实体类User


@Data
@NoArgsConstructor
@AllArgsConstructor
public class User {
    private Integer id;
    private String username;
    private String password;
    private String name;
    private Integer age;
}

3,在application.properties配置文件中添加连接数据库的配置。

#配置数据库连接信息
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/tlias
spring.datasource.username=root
spring.datasource.password=root

4,编写程序测试:

在com.sde包下创建子包mapper包,并创建一个UserMapper接口

mapper接口的代码:
@Mapper
public interface UserMapper {

    /**
     * 根据用户名查询
     * @param username
     * @return
     */
    @Select("select * from user where username = #{username}")
    public User getByUsername(String username);

    /**
     * 查询全部用户
     * @return
     */
    @Select("select id, username, password, name, age from user")
    public List<User> selectAll();

    /**
     * 根据id删除
     * @param id
     */
    @Delete("delete from user where id = #{id}")
    public void delUser(Integer id);

    /**
     * 根据id修改用户信息
     * @param user
     */
    @Update("update user set username = #{username},password = #{password},name = #{name},age = #{age} where id = #{id}")
    public void updateUser(User user);

    /**
     * 添加用户信息
     * @param user
     */
    @Insert("insert into user values(null,#{username},#{password},#{name},#{age})")
    public void addUser(User user);

}
在test类中测试

代码:

   @Autowired
    private UserMapper2 userMapper;

    @Test
    @DisplayName("测试查询全部")
    public void testSelectAll(){
        List<User> userList = userMapper.selectAll();
        userList.forEach(e -> System.out.println(e));
    }

    @Test
    @DisplayName("测试删除")
    public void testDel(){
        userMapper.delUser(8);
    }

    @Test
    @DisplayName("测试修改")
    public void testUpdate(){
        userMapper.updateUser(new User(7,"wxx","111","王星星",20));
    }

    @Test
    @DisplayName("测试添加")
    public void testAdd(){
        userMapper.addUser(new User(null,"java","111222","Java开发",55));
    }

    @Test
    @DisplayName("测试根据用户名查询")
    public void testGetByUsername(){
        User user = userMapper.getByUsername("daoen");
        System.out.println(user);
    }

辅助配置:
语法提示配置
  • 在写mysql语句的行,右击找到 Show Context Action。
  • 然后点击,inject language for reference。
  • 找到MySQL点击确定。
  • 当已经配置过这个语法提示的时候,在点击Show Context Action,会出现 Uninject language for reference。点击一下就去掉了语法提示。在重复上面的步骤,添加即可。

然后找到 inject language for reference

选择MySQL 双击即可。

 看这里代码颜色就不一样了。

如果已经配置,在SQL语句上面右击,会出现  Uninject language for reference。点击这个就去掉了。

看效果:SQL语句全部变成了绿色。就去掉了

 

日志输出:

默认情况下,我们在mybatis中SQL语句执行时,我们看不到SQL语句执行的日志,配置一下配置,就可以看到在控制台输出的sql语句提示了。

在application.properties 配置文件中。添加 一面代码就行

#mybatis 的日志信息 -- 输出控制台 mybatis.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl



#配置数据库连接信息
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/sde01
spring.datasource.username=root
spring.datasource.password=root


#mybatis 的日志信息  -- 输出控制台
mybatis.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl

 JDBC VS Mybatis  对比

看图说话

mybatis相比于jdbc可以很好的操作数据库并且能够简化代码开发。所以我们在以后项目和开发中,选取的是mybatis。

数据库连接池

  • 1,数据库连接池是一个容器,负责分配、管理数据库连接(Connection)。
  • 2,它允许应用程序重复使用一个现有的数据库连接,而不是再重新建立一个。
  • 3,释放空闲时间超过最大空闲时间的连接,来避免因为没有释放连接而引起的数据库连接遗漏。

优势:

​ 资源重用 ​

提升系统响应速度

​ 避免数据库连接遗漏 ​

标准接口:DataSource ​

官方(sun)提供的数据库连接池接口,由第三方组织实现此接口。

功能:获取连接 ​ Connection getConnection() throws SQLException;

常见产品:

Druid(德鲁伊) ​

  • 功能强大,性能优秀,是Java语言最好的数据库连接池之一
  • Druid连接池是阿里巴巴开源的数据库连接池项目

spring boot默认使用的是 Hikari连接池

通过上面的图片,我们可以看到,即便我们没有配置数据库连接池,也是有数据库连接池的。是spring boot默认自带的连接池(Hikari 追光者) 

现在我们配置我们的国产数据库连接池 Druid数据库连接池。

先引入依赖:

        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid-spring-boot-starter</artifactId>
            <version>1.2.11</version>
        </dependency>

在application.propertise 配置文件里面配置

配置的代码信息:

#配置druid连接池
spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
#配置数据库连接信息
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/tlias
spring.datasource.username=root
spring.datasource.password=root

xml映射配置

在Mybatis中,既可以通过注解配置SQL语句,也可以通过XML配置文件配置SQL语句。

规则:

  • ​ 1,XML映射文件的名称与Mapper接口名称一致,并且将XML映射文件和Mapper接口放置在相同包下(同包同名)。
  • 2,XML映射文件的namespace属性为Mapper接口全限定名一致。
  • 3,XML映射文件中sql语句的id与Mapper 接口中的方法名一致,并保持返回类型一致。

1,同包同名:

在resource是目录下,右击点击new然后选择Directory

切记在Directory里面,不是以逗号分割,而是用/分割。因为在电脑中,不同级别的目录,是/分开的,不是点。

这是一个错误的示范:

下面这个是正确的示范:

 

 点击回车就创建成功了。

刚创建好长这样,下面添加一个和UserMapper,同名的xml文件

 然后就创建成功了。

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=""><!--根节点-->


</mapper>

 2,namespace属性为Mapper接口全限定名一致

右击UserMapper接口,点击 Copy Path/Refernence

接着点击  copy Reference

 

最后粘贴到 刚刚创建的UserMapper.xml 配置文件中的namespace里面

3,sql语句的id与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.sde.mapper.UserMapper"><!--根节点-->


    <select id="selectAll" resultType="com.sde.pojo.User">
        select * from user
    </select>
    
</mapper>

在service包下面编写UserService接口

 在service包里面,在创建一个子包,impl包,并创建UserServiceImpl这个实现类

 在controller包中编写 UserController 

 启动项目,在Apifox里面测试

看控制台的输出

MyBatisX:

是一款基于 IDEA 的快速开发Mybatis的插件,为效率而生。

安装:

点击 file然后点击settings 找到 plugs搜索要下载的插件,然后点击install。

因为我是之前就下载好的,所以页面提示让我更新。没有安装过的话,会先让安装。

 安装好之后,就会发现我们的页面左侧就多了一个小鸟的标记。

安装好mybatisX插件之后,会发现我们在接口里面定义好方法,如果还没有写SQL语句,他会有一个红色的波浪线提示我们。

在红色波浪线处,右击就会出现这个页面。

点击 Generate statement 

 然后它就会在UserMapper.xml配置文件中生成一个标签。

 点击这边的小鸟,可以跳转到绑定的类或者对应接口的方法。

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

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

相关文章

高德地图画渐变线

高德地图画渐变线&#xff0c;思路是将线和颜色均分为多个小线段和小颜色&#xff0c;实现渐变&#xff0c;类似于下图。 如果需要多段线&#xff0c;自己循环拼一下就可以了&#xff0c;方法返回多个小线段组成的polyline数组。 /** 高德地图画渐变线* author: liyun* params…

记一次由 jedis 引发的离谱选学问题

背景 我的应用中&#xff0c;使用 jedis 作为连接 redis 的客户端&#xff0c;一直在用的好好的&#xff0c;后来有一个新的组件&#xff0c;也需要使用 redis&#xff0c;但是组件是内部封装的&#xff0c;我只能提供一个 StringReidsTempalte&#xff0c;所以我基于应用本身…

GPTs的创建与使用,自定义GPTs中的Actions示例用法 定义和执行特定任务的功能模块 通过API与外部系统或服务的交互

Name 等 Logo:自动生成 Name 介绍 Description 介绍 Instructions 要求或命令等 比如用中文回复&#xff0c;角色。 Knowledge 上传你的知识库&#xff0c;如果你有某一垂直行业的数据&#xff0c;基于数据来回答。比如我有某个芯片的指令集。 Capabilities 都要 Actions&…

ELasticsearch:什么是语义搜索?

语义搜索定义 语义搜索是一种解释单词和短语含义的搜索引擎技术。 语义搜索的结果将返回与查询含义匹配的内容&#xff0c;而不是与查询中的单词字面匹配的内容。 语义搜索是一组搜索引擎功能&#xff0c;其中包括根据搜索者的意图及其搜索上下文理解单词。 此类搜索旨在通过…

算法Day15 农场耕作

农场耕作 Description 你是一位农夫&#xff0c;拥有一块 m x n 的小农场。你打算在这块农场上耕种不同的农作物&#xff0c;以便在季节结束时获得最大的收成。 农场被分割成网格&#xff0c;每个格子代表不同的耕种区域&#xff0c;你可以选择每次向下或向右移动一格来耕作。…

解决 Element-ui中 表格(Table)使用 v-if 条件切换后,表格的列的筛选不显示了

解决方法 在每个需要使用 v-if 或 v-else 的 el-table-column 上增加 key 作为唯一标识&#xff0c;这样渲染的时候就不会因为复用原则导致列数据混乱了。关于key值&#xff0c;一般习惯使用字段名&#xff0c;也可随机生成一个值&#xff0c;只要具有唯一性就可以。

离散型制造企业MES系统行业应用

离散型制造企业具有产品种类多、生产周期长、生产过程复杂等特点&#xff0c;因此&#xff0c;采用先进的生产管理系统对于提高企业的生产效率和管理水平至关重要。其中&#xff0c;制造执行系统&#xff08;MES&#xff09;在离散型制造企业中得到了广泛应用&#xff0c; 一、…

RedisTemplate操作哈希数据

RedisTemplate操作哈希数据 概述常用方法添加哈希数据添加hashMap值判断hashkey 获取哈希数据获取属性值获取hashMap值。获取键值对。获取map键是否有值判断是否有map键。获取键。获取长度。集合方式获取值。匹配获取键值对 自增以double值大小自增。以long值大小自增。 修改删…

node.js和npm的安装与环境配置(2023最新版)

目录 安装node.js测试是否安装成功测试npm环境配置更改环境变量新建系统变量 安装node.js 1、进入官网下载&#xff1a;node.js官网 我选择的是windows64位的&#xff0c;你可以根据自己的实际情况选择对应的版本。 2、下载完成&#xff0c;安装。 打开安装程序 接受协议 选…

浅谈5G基站节能及数字化管理解决方案的设计与应用-安科瑞 蒋静

截至2023年10月&#xff0c;我国5G基站总数达321.5万个&#xff0c;占全国通信基站总数的28.1%。然而&#xff0c;随着5G基站数量的快速增长&#xff0c;基站的能耗问题也逐渐日益凸显&#xff0c;基站的用电给运营商带来了巨大的电费开支压力&#xff0c;降低5G基站的能耗成为…

js 复制粘贴板,当clipboardjs 不好使怎么办?

最近项目中做一个很常见的复制粘贴的功能耽误了比较长的时间特此记录&#xff0c;在往常这个功能直接用 clipboard 做就行了&#xff0c;但是这次却发现复制功能不好使了&#xff0c;虽然走了复制成功的回调&#xff0c;但是粘贴板并没有复制的内容。代码如下 <div v-for&q…

使用LangSmith来快速学习LangChain

好风凭借力&#xff0c;送我上青云&#xff01; 什么是LangSmith LangSmith is a platform for building production-grade LLM applications. It lets you debug, test, evaluate, and monitor chains and intelligent agents built on any LLM framework and seamlessly int…

oracle12c的job没有自动执行,手动运行提示任务1%正在运行问题

有个oracle12c上的job&#xff0c;提交到dbms_job&#xff0c;不知道什么时候开始&#xff0c;停下来了&#xff0c;没有自动运行。 手动关闭这个job&#xff0c;重新打开&#xff0c;不行&#xff1b;删除JOB&#xff0c;重新创建&#xff0c;也不行。 参考拙作&#xff1a; …

Leetcode 39 组合总和

题意理解&#xff1a; 一个 无重复元素 的整数数组 candidates 和一个目标整数 target 从candidates 取数字&#xff0c;使其和 target &#xff0c;有多少种组合&#xff08;candidates 中的 同一个 数字可以 无限制重复被选取&#xff09; 这道题和之前一道组合的区别&am…

【USB、串口、COM口、TTL、RS-232、RS-485区别详解】

USB&#xff0c;串口&#xff0c;COM口&#xff0c;TTL&#xff0c;RS-232&#xff0c;RS-485区别详解 1. USB&#xff0c;串口&#xff0c;COM口&#xff0c;TTL&#xff0c;RS-232&#xff0c;RS-485区别详解2 USB转TTL2 RS-232转TTL3 USB4 UART5 STM32串口异步通讯需要定义的…

2024年AI视频识别技术的6大发展趋势预测

随着人工智能技术的快速发展&#xff0c;AI视频识别技术也将会得到进一步的发展和应用。2023年已经进入尾声&#xff0c;2024年即将来临&#xff0c;那么AI视频识别技术又将迎来怎样的发展趋势&#xff1f;本文将对2023年的AI视频技术做一个简单的盘点并对2024年的发展趋势进行…

c/c++中一些不常用但有用的知识

1.变长数组 bool fun(int cnt) {unsigned char data[cnt];return true; } 在 C 语言中&#xff0c;变长数组&#xff08;Variable Length Arrays&#xff0c;VLA&#xff09;是 C99 标准引入的特性&#xff0c;允许使用变量来定义数组的长度。因此&#xff0c;在 C 版本的代码…

Oauth2.0 认证

目录 前言 1.介绍 2.Oauth2.0过程详解 3.Oauth 整合到 Spring Boot 实践 4.方法及配置详解&#xff1a; 总结 前言 Oauth2.0 是非常流行的网络授权表准&#xff0c;已经广泛应用在全球范围内&#xff0c;比较大的公司&#xff0c;如腾讯等都有大量的应用场景。 1.介绍 …

Qt工程文件分离、Qtimer定时器、Qt Creator 常用快捷键

Qt 工程文件分离 不含 UI 的文件分离 以堆栈窗体的代码为例。 firstpagewidget.h #ifndef FIRSTPAGEWIDGET_H #define FIRSTPAGEWIDGET_H#include <QtWidgets> // 记得修改class firstPageWidget : public QWidget {Q_OBJECT public:explicit firstPageWidget(QW…