首页 > 其他分享 >MyBatis 详解

MyBatis 详解

时间:2024-09-17 13:49:58浏览次数:10  
标签:数据库 详解 User SQL MyBatis id user

目录

目录

一、MyBatis 是什么

二、为什么使用 MyBatis

(一)灵活性高

(二)性能优化

(三)易于维护

三、怎么用 MyBatis

(一)添加依赖

(二)配置 MyBatis

(三)创建实体类和接口

(四)使用 MyBatis


一、MyBatis 是什么

MyBatis 是一个优秀的持久层框架,它支持自定义 SQL、存储过程以及高级映射。MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作。它可以通过简单的 XML 或注解来配置和映射原生信息,将 Java 对象与 SQL 语句之间进行转换,从而实现对数据库的操作。

二、为什么使用 MyBatis

(一)灵活性高

  1. 可以自定义 SQL 语句,满足复杂的业务需求。对于一些特殊的查询或操作,开发人员可以根据具体情况编写特定的 SQL,而不是局限于通用的 ORM 框架生成的固定 SQL。
  2. 支持动态 SQL,可以根据不同的条件拼接不同的 SQL 语句。例如,可以根据传入的参数决定是否添加 WHERE 子句或者 ORDER BY 子句。

(二)性能优化

  1. MyBatis 对 SQL 的控制更加精细,可以进行针对性的性能优化。比如,可以通过合理设置数据库连接参数、使用存储过程等方式提高数据库操作的效率。
  2. 减少不必要的数据库访问。MyBatis 可以通过缓存机制减少对数据库的重复查询,提高系统的响应速度。

(三)易于维护

  1. 代码结构清晰。MyBatis 的配置文件和映射文件将数据库操作与业务逻辑分离,使得代码易于理解和维护。
  2. 方便进行数据库迁移。如果需要更换数据库,只需要修改 MyBatis 的配置文件和 SQL 语句,而不需要对大量的 Java 代码进行修改。

三、怎么用 MyBatis

(一)添加依赖

在项目的构建文件(如 Maven 的 pom.xml)中添加 MyBatis 的依赖:

<dependency>
    <groupId>org.mybatis</groupId>
    <artifactId>mybatis</artifactId>
    <version>3.x.x</version>
</dependency>

(二)配置 MyBatis

  1. 创建一个配置文件 mybatis-config.xml,用于配置数据库连接信息和 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">
<configuration>
    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://localhost:3306/mydb"/>
                <property name="username" value="root"/>
                <property name="password" value="password"/>
            </dataSource>
        </environment>
    </environments>
    <mappers>
        <mapper resource="mapper/UserMapper.xml"/>
    </mappers>
</configuration>

  1. 创建映射文件(如 UserMapper.xml),用于定义 SQL 语句和 Java 对象与数据库表的映射关系:
<?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.example.mapper.UserMapper">
    <select id="getAllUsers" resultType="com.example.entity.User">
        SELECT * FROM users
    </select>
    <select id="getUserById" parameterType="long" resultType="com.example.entity.User">
        SELECT * FROM users WHERE id = #{id}
    </select>
    <insert id="insertUser" parameterType="com.example.entity.User">
        INSERT INTO users (name, email) VALUES (#{name}, #{email})
    </insert>
    <update id="updateUser" parameterType="com.example.entity.User">
        UPDATE users SET name = #{name}, email = #{email} WHERE id = #{id}
    </update>
    <delete id="deleteUser" parameterType="long">
        DELETE FROM users WHERE id = #{id}
    </delete>
</mapper>

(三)创建实体类和接口

  1. 创建实体类(如 User.java),用于表示数据库中的表结构:
public class User {
    private Long id;
    private String name;
    private String email;

    // 构造函数、getter 和 setter 方法
    //...
}

  1. 创建接口(如 UserMapper.java),定义数据库操作方法:

import com.example.entity.User;

public interface UserMapper {
    List<User> getAllUsers();
    User getUserById(Long id);
    int insertUser(User user);
    int updateUser(User user);
    int deleteUser(Long id);
}

(四)使用 MyBatis

在业务逻辑代码中,可以通过以下方式使用 MyBatis 进行数据库操作:

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.InputStream;
import java.util.List;

public class Main {
    public static void main(String[] args) {
        String resource = "mybatis-config.xml";
        InputStream inputStream = null;
        try {
            inputStream = Resources.getResourceAsStream(resource);
        } catch (IOException e) {
            e.printStackTrace();
        }
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);

        try (SqlSession sqlSession = sqlSessionFactory.openSession()) {
            UserMapper userMapper = sqlSession.getMapper(UserMapper.class);

            // 查询所有用户
            List<User> users = userMapper.getAllUsers();
            for (User user : users) {
                System.out.println(user.getName() + " - " + user.getEmail());
            }

            // 查询单个用户
            User user = userMapper.getUserById(1L);
            if (user!= null) {
                System.out.println(user.getName() + " - " + user.getEmail());
            }

            // 插入用户
            User newUser = new User();
            newUser.setName("New User");
            newUser.setEmail("[email protected]");
            int insertedId = userMapper.insertUser(newUser);
            System.out.println("Inserted user with id: " + insertedId);

            // 更新用户
            User updateUser = userMapper.getUserById(2L);
            if (updateUser!= null) {
                updateUser.setName("Updated User");
                userMapper.updateUser(updateUser);
            }

            // 删除用户
            userMapper.deleteUser(3L);
        }
    }
}

通过以上步骤,就可以在 Java 项目中使用 MyBatis 进行数据库操作了。MyBatis 提供了强大的功能和灵活性,使得开发人员能够更加高效地进行数据库开发。

标签:数据库,详解,User,SQL,MyBatis,id,user
From: https://blog.csdn.net/m0_57836225/article/details/142289870

相关文章

  • Go 语言中的空白标识符(_)用法详解
    在Go语言中,空白标识符 _ 有着独特的用途,特别是在循环以及其他一些场景中。本文将详细介绍空白标识符在Go语言中的用法,重点围绕其在循环中的应用以及其他常见场景。 一、空白标识符在循环中的应用 (一)忽略索引值 在遍历切片或数组时,如果我们只关心元素本身而不关......
  • DFT理论知识 scan insertion详解
    ###DFT理论知识:SCANInsertion详解####一、SCANInsertion概述**1.定义**SCANInsertion是设计可测试性(DesignForTestability,DFT)中的一种技术,通过在芯片设计中插入扫描链(ScanChain),使得原本难以测试的组合逻辑电路变得可测试。扫描链通过将触发器(Flip-Flop)转换为......
  • 【Linux进程】Linux Shell编程实战:构建简易脚本示例与技巧详解
    ......
  • ICM20948 DMP代码详解(25)
    接前一篇文章:ICM20948DMP代码详解(24) 上一回讲到了inv_icm20948_load_firmware函数,对于大体功能进行了介绍,本回深入其具体实现代码细节。为了便于理解和回顾,再次贴出相关代码: //SetupIvoryDMP. result|=inv_icm20948_load_firmware(s,dmp3_image,dmp3_image_size);......
  • 基于sqli-labs Less-5 sql报错注入详解
    按照之前的思路发现,是正常的'闭合的字符型,但是在联合注入0'unionselect1,2,3--+没有回显注入点,只是回显Youarein,因此无法使用联合注入,考虑使用报错注入或者盲注。考虑到本题会给出数据库的错误信息,且盲注比较麻烦,尝试使用报错注入1.报错注入函数简介1.1updatexml函数UP......
  • mybatis知识复习
    配置文件方式--快速入门这里插入几个学习时的错误:mybatis-config.xml找不到Mapper:我的原因是把Mapper放到了Java下的SRC路径,但IDEA并不会寻找到,所以要么是在pom.xml中加上。。。(没看),我用的是:在resource下建立一个同名的包:com/。/xxx如果不想建立一个新包(但一般都会吧?),参考这个......
  • MySQL中的ON DUPLICATE KEY UPDATE详解与应用
    目录什么是ONDUPLICATEKEYUPDATE?ONDUPLICATEKEYUPDATE的基本语法适用场景及工作原理使用ONDUPLICATEKEYUPDATE的实际示例示例1:简单的插入和更新示例2:结合多列唯一约束示例3:动态更新某些字段性能分析与优化建议与REPLACEINTO的区别注意事项与常见问题......
  • C语言-结构体-详解
    博客主页:【夜泉_ly】本文专栏:【C语言】欢迎点赞......
  • 详解!HTTP1.0/1.1/2.0/3.0的区别
    详解HTTP1.0/1.1/2.0/3.0的区别1.0和1.1有什么区别?响应状态码的区别HTTP/1.0仅定义了16种状态码。HTTP/1.1中新加入了大量的状态码,光是错误响应状态码就新增了24种。比如说,100(Continue)——在请求大资源前的预热请求,206(PartialContent)——范围请求的标识码......
  • 详解 Pandas 的透视表函数
    Pandas的透视表函数主要为pivot()和pivot_table(),主要的功能为对DataFrame的行和列进行重新组合来重塑数据。一、pivot函数pivot函数只能对数据进行重塑,不能进行聚合1.数据准备importpandasaspddf1=pd.DataFrame({'department_id':[1,2,3,3,......