当前位置: 首页 > article >正文

mybatis 和 mybatis-plus

mybatis

配置

1.新建MAVEN项目

2.配置mybatis依赖

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>org.example</groupId>
    <artifactId>DemoMybatis</artifactId>
    <version>1.0-SNAPSHOT</version>

    <properties>
        <maven.compiler.source>17</maven.compiler.source>
        <maven.compiler.target>17</maven.compiler.target>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>


    <dependencies>
        <!--        连接数据库驱动-->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.30</version>
        </dependency>
        <!--        mybatis-->
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.5.12</version>
        </dependency>


    </dependencies>

    <build>
        <!--    配置idea扫描xml或者properties文件 -->
        <resources>
            <resource>
                <directory>src/main/resources</directory>
                <includes>
                    <include>**/*.properties</include>
                    <include>**/*.xml</include>
                </includes>
            </resource>
        </resources>
    </build>


</project>

3.创建表

REATE TABLE IF NOT EXISTS users \
    id INT AUTO_INCREMENT PRIMARY KEY, \
    name VARCHAR(100), \
    email VARCHAR(150));

4.创建数据源database.properties文件

resources 目录下 创建 database.properties文件:用于mybatis配置文件读取数据库信息

driver=com.mysql.cj.jdbc.Driver
url= jdbc:mysql://127.0.0.1:3306/mydatabase?serverTimezone=Asia/Shanghai&useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull&useSSL=false&allowPublicKeyRetrieval=true
username=root
password=123456

5.编写mybatis-config.xml配置文件

resources 目录下 创建 mybatis-config.xml配置文件: 用于配置数据库连接和 MyBatis 运行时所需的各种特性,包含了设置和影响 MyBatis 行为的属性、映射文件的位置。

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

<!-- mybatis的主配置文件 -->
<configuration>
    <!-- 引入外部资源: database.properties 配置文件-->
    <properties resource="database.properties"/>

    <!-- 配置环境:有助于将 SQL 映射应用于多种数据库之中 -->
    <environments default="mysql">
        <!-- 配置环境id:mysql-->
        <environment id="mysql">
            <!-- 配置事务的类型:使用JDBC的事务-->
            <transactionManager type="JDBC"/>
            <!-- 配置数据源(连接池)type="POOLED说明是使用连接池方式,节省资源 -->
            <dataSource type="POOLED">
                <!-- 配置连接数据库的4个基本信息 -->
                <property name="driver" value="${driver}"/>
                <property name="url" value="${url}"/>
                <property name="username" value="${username}"/>
                <property name="password" value="${password}"/>
            </dataSource>
        </environment>
    </environments>

</configuration>

6.连接测试

package org.example;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;

import java.io.IOException;
import java.io.Reader;

public class Main {
    public static void main(String[] args) {
        // mybatis-config.xml 路径
        String mybatisConfig = "mybatis-config.xml";
        try {
            // 加载配置文件
            Reader config = Resources.getResourceAsReader(mybatisConfig);
            // 构建会话
            SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(config);
            SqlSession sqlSession = sqlSessionFactory.openSession();
            System.out.println(sqlSession.getConfiguration());

            sqlSession.close();
        }catch (IOException e){
            e.printStackTrace();
        }
    }
}

使用

1.映射类

创建entity/User类:用于跟数据库字段做映射。

注意:与数据库中字段名、类型一致

package org.example.user;

import lombok.Data;

@Data
public class UserEntity {
    private int id;
    private String name;
    private String email;
}

2.Mapper接口

创建mapper/IUserMapper接口: 用于操作数据库CURD的方法

package org.example.mapper;

import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;
import org.example.entity.User;

import java.util.List;
import java.util.Map;

public interface IUserMapper {

    List<User> queryUser();

//    @Select("SELECT * FROM users")
//    List<User> queryUser();

    String getNameById(@Param("id") Long id);

    List<User> queryUserByMap(Map<String, Object> param);

    List<User> queryUserEntity(User user);

    int insertUser(@Param("user") User user);

    int updateUser(@Param("user") User user);

    int deleteUser(@Param("id") Long id);


}

3.mapper.xml文件

resources 目录下 org/example/mapper创建IUserMapper.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接口-->
<mapper namespace="org.example.mapper.IUserMapper">
    <!--查询所有用户-->
    <!--<select> 标签表明这是一条查询语句,属性id用来标识这条SQL;resultType表示返回的是一个userEntity类型的值。 -->
    <select id="queryUser" resultType="org.example.entity.User">
        select * from users;
    </select>

    <select id="getNameById" resultType="string">
        select name from users where id = #{id};
    </select>

    <select id="queryUserByMap" parameterType="map" resultType="org.example.entity.User">
        select * from users where id = #{id};
    </select>

    <select id="queryUserEntity" parameterMap="org.example.entity.User" resultType="org.example.entity.User">
        select * from users where id = #{id};
    </select>

    <insert id="insertUser" keyProperty="id" useGeneratedKeys="true">
        insert into users (name, email)
        values (#{user.name}, #{user.email})
    </insert>

    <update id="updateUser">
        update users set email=#{user.email} where id = #{user.id}
    </update>

    <delete id="deleteUser">
        delete from users where id = #{id}
    </delete>

</mapper>

注意:

mapper接口和mapper.xml之间需要遵循一定规则,才能成功的让mybatis将mapper接口和mapper.xml绑定起来

  • mapper接口和mapper.xml的命名要一样;
  • mapper接口的全限定名,要和mapper.xml的namespace属性一致;
  • mapper接口中的方法名,要和mapper.xml中的SQL标签的id一致;
  • mapper接口中的方法入参类型,要和mapper.xml中SQL语句的入参类型一致;
  • mapper接口中的方法出参类型,要和mapper.xml中SQL语句的返回值类型一致。 

Java框架:Mybatis【详细】_java mybatis-CSDN博客

mybatis-plus

MyBatis Plus 和 MyBatis 的区别
MyBatis Plus 与原始的 MyBatis 框架有以下主要区别:

功能增强:MyBatis Plus 在 MyBatis 的基础上提供了更多的功能,如通用的 CRUD 操作、分页查询、条件构造器等。这些功能减少了开发人员的工作量,提高了开发效率。

注解支持:MyBatis Plus 引入了一系列注解,如@TableName、@TableId、@TableField等,使得实体类的映射更加灵活和方便,不再需要 XML 映射文件。

更强大的条件构造器:MyBatis Plus 的条件构造器允许我们以更加直观和链式的方式构建 SQL 查询条件,而不必担心拼接 SQL 字符串。

自动代码生成:MyBatis Plus 提供了代码生成器,可以根据数据库表结构自动生成实体类和 Mapper 接口,极大地简化了开发过程。

总的来说,MyBatis Plus 是 MyBatis 的增强版,旨在提供更多便捷的特性,减少开发工作,同时保留了 MyBatis 的灵活性和强大性能。

1. 实体类注解
@TableName:用于指定数据库表的名称。
@TableId:用于指定主键字段。
@TableField:用于指定非主键字段的属性配置。
2. 逻辑删除注解
@TableLogic:用于实现逻辑删除。
3. 字段填充注解
@TableField:其中的 fill 属性可以用于指定字段的自动填充策略,如插入和更新时自动填充时间戳等。

SpringBoot中使用mybatis-plus

 1.新建SpringBoot项目

2.配置mybatis-plus依赖

pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
	<modelVersion>4.0.0</modelVersion>
	<parent>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-parent</artifactId>
		<version>3.3.4</version>
		<relativePath/> <!-- lookup parent from repository -->
	</parent>
	<groupId>org.example</groupId>
	<artifactId>MySpringBoot</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<name>MySpringBoot</name>
	<description>MySpringBoot</description>
	<url/>
	<licenses>
		<license/>
	</licenses>
	<developers>
		<developer/>
	</developers>
	<scm>
		<connection/>
		<developerConnection/>
		<tag/>
		<url/>
	</scm>
	<properties>
		<java.version>17</java.version>
	</properties>
	<dependencies>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-web</artifactId>
		</dependency>

		<dependency>
			<groupId>mysql</groupId>
			<artifactId>mysql-connector-java</artifactId>
			<version>8.0.30</version>
		</dependency>

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

		<dependency>
			<groupId>com.baomidou</groupId>
			<artifactId>mybatis-plus-spring-boot3-starter</artifactId>
			<version>3.5.5</version>
		</dependency>
		<dependency>
			<groupId>org.projectlombok</groupId>
			<artifactId>lombok</artifactId>
			<version>1.18.34</version>
			<scope>provided</scope>
		</dependency>

	</dependencies>

	<build>
		<plugins>
			<plugin>
				<groupId>org.springframework.boot</groupId>
				<artifactId>spring-boot-maven-plugin</artifactId>
			</plugin>
		</plugins>
	</build>

</project>

3.创建表

CREATE TABLE `users` (
  `id` INT NOT NULL AUTO_INCREMENT,
  `name` varchar(50) NOT NULL,
  `email` varchar(150) DEFAULT NULL,
  `status` int(10) DEFAULT '1',
  `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

4.配置数据库

application.properties文件中配置数据库连接信息:

spring.application.name=MySpringBoot
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/mydatabase?useUnicode=true&characterEncoding=utf-8&useSSL=false
spring.datasource.username=root
spring.datasource.password=123456
#debug=true

5.配置 MapperScan 注解

MySpringBootApplication.java

package org.example.myspringboot;

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

@SpringBootApplication
@MapperScan("org.example.myspringboot.**.mapper")  // 配置 MapperScan 注解
public class MySpringBootApplication {

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

}

6.映射类

Users.java

package org.example.myspringboot.accounts.domain;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;

import java.time.LocalDateTime;


@Data
@TableName("users")
public class Users {
    @TableId(value = "id", type = IdType.AUTO)
    private Long id;

    @TableField("name")
    private String name;

    @TableField("email")
    private String email;

    @TableField("status")
    private Long status;

    @TableField("create_time")
    private LocalDateTime create_time;
    @TableField("update_time")
    private LocalDateTime update_time;

//    @TableField("isMarried")
//    private Boolean isMarried;
}

7.Mapper映射

UsersMapper.java

package org.example.myspringboot.accounts.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Mapper;
import org.example.myspringboot.accounts.domain.Users;

@Mapper
public interface UsersMapper extends BaseMapper<Users> {
}

8.CURD

UserContorller.java

package org.example.myspringboot.accounts.controller;


import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.example.myspringboot.accounts.domain.Users;
import org.example.myspringboot.accounts.mapper.UsersMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.HashMap;
import java.util.List;

@RequestMapping("/users")
@RestController
public class UserContorller {

    @Autowired
    private UsersMapper usersMapper;

    @RequestMapping
    public ResponseEntity<List<Users>> list(){
        // 查询所有
        // List<Users>  usersList = usersMapper.selectList(null);

        // 分页查询
        Page<Users> page = new Page<>(1, 10);
        IPage<Users> usersPage = usersMapper.selectPage(page, null);
        List<Users> usersList = usersPage.getRecords();
        return ResponseEntity.ok()
                .body(usersList);
    }

    @RequestMapping("/add")
    public ResponseEntity<Users> add(){
        Users users = new Users();
        users.setName("admin");
        users.setEmail("admin@example.com");
        users.setStatus(1L);
        int row = usersMapper.insert(users);
        System.out.println(row);

        return ResponseEntity.ok()
                .body(users);
    }

    @RequestMapping("/get")
    public ResponseEntity<List<Users>> getUser(){
        //Users users = usersMapper.selectById(1L);

        HashMap<String, Object> map = new HashMap<>();
        // 查找 name=admin and status=0
        map.put("name", "admin");  // 查找name=admin
        map.put("status", "0");  // 查找status=0
        List<Users> userList = usersMapper.selectByMap(map);
        return ResponseEntity.ok()
                .body(userList);

    }

    @RequestMapping("/update")
    public ResponseEntity<String> update(){
        Users users = new Users();
        users.setId(1L);
        // 修改用户邮箱和status
        users.setEmail("admin@xxxxx.com");  // 修改id=1的用户邮箱
        users.setStatus(0L);  // 修改id=1的 status
        int row = usersMapper.updateById(users);
        System.out.println(row);
        return ResponseEntity.ok("OK");
    }
    
    public ResponseEntity<String> delete(){
        int row = usersMapper.deleteById(1L);
        return ResponseEntity.ok("OK");
    }
}

【MyBatis Plus】初识 MyBatis Plus,在 Spring Boot 项目中集成 MyBatis Plus,理解常用注解以及常见配置_mybatisplus-CSDN博客

 


http://www.kler.cn/a/314796.html

相关文章:

  • LeetCode【0035】搜索插入位置
  • 建筑施工特种作业人员安全生产知识试题
  • [CKS] K8S NetworkPolicy Set Up
  • Spring Boot 1.x 版本可以集成 Spring Cloud Sleuth
  • 在 Service Worker 中caches.put() 和 caches.add()/caches.addAll() 方法他们之间的区别
  • DOM 规范 — MutationObserver 接口
  • mysql批量修改表前缀
  • 【java实现json转化为CSV文件】
  • 【C++二叉树】二叉树的前序遍历、中序遍历、后序遍历递归与非递归实现
  • Kotlin 极简小抄 P3(函数、函数赋值给变量)
  • LeetCode 第416场周赛个人题解
  • springbootweb集成swagger
  • 王道考研视频——操作系统笔记
  • 海外服务器哪个速度最快且性能稳定
  • GRE隧道在实际部署中的优化、局限性与弊端
  • 排序篇(七大基于比较的排序算法)
  • 华为全联接大会HC2024 观会感
  • QMT获取可转债行情数据方法介绍!支持QMT量化软件的券商平台?
  • Oracle(140)如何创建和管理数据库角色?
  • Android14 蓝牙启动流程
  • C++编程语言:基础设施:命名空间(Bjarne Stroustrup)
  • 基于微信小程序的购物系统+php(lw+演示+源码+运行)
  • App端测——稳定性测试
  • 笔记整理—内核!启动!—linux应用编程、网络编程部分(1)API概述与文件I/O
  • 互联网技术的持续演进:从现在到未来
  • 开放的数据时代:Web3和个人隐私的未来