如何使用mybatis操作数据库

发布于:2024-04-20 ⋅ 阅读:(30) ⋅ 点赞:(0)

Spring&Mybatis 基本操作

如何使用Mybatis在数据库中插入一条数据?

首先需要添加相关的依赖

<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>8.0.33</version>
</dependency>
<!--mybatis-->
<dependency>
    <groupId>org.mybatis</groupId>
    <artifactId>mybatis</artifactId>
    <version>3.5.9</version>
</dependency>

编写基础的配置文件

mybatis-config.xml

数据库用户名、密码、database名改为自己要用的

​ database名,就是localhost:3306后边的,我这里是mine2024

mappers一会儿要匹配到自己编写的``**mapper`

​ 其实得写相对路径,但是想简单写配置文件,就把配置文件都丢在同级目录下,这样光写文件名就行了

<?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核心配置文件-->
<configuration>
    <!-- 环境配置,定义了应用运行的环境,默认为development -->
    <environments default="development">
        <!-- development环境的详细配置 -->
        <environment id="development">
            <!-- 事务管理器配置,这里使用JDBC事务管理器 -->
            <transactionManager type="JDBC"/>
            <!-- 数据源配置,使用连接池管理数据库连接 -->
            <dataSource type="POOLED">
                <!-- 数据库驱动类路径 -->
                <property name="driver" value="com.mysql.cj.jdbc.Driver"/>
                <!-- 数据库连接URL,这里配置的是一个MySQL数据库的连接 -->
                <property name="url" value="jdbc:mysql://localhost:3306/mine2024?useSSl=trur&amp;sueUnicode=true&amp;characterEncoding=UTF-8&amp;serverTimezone=Asia/Shanghai"/>
                <!-- 数据库用户名 -->
                <property name="username" value="root"/>
                <!-- 数据库密码 -->
                <property name="password" value="123456"/>
            </dataSource>
        </environment>
    </environments>
    <!-- 定义mapper映射文件位置 -->
    <mappers>
        <!-- 指向具体的mapper映射文件 -->
        <mapper resource="FocusInfoMapper.xml"/>
    </mappers>
</configuration>

MybatisUtils.java

​ 这个文件反正每次都这么写,直接粘就完事儿了

package com.urfread.focusmore.mapper;

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;

//sqlSessionFactory -->sqlSession
public class MybatisUtils {

    private static SqlSessionFactory sqlSessionFactory;
    //使用mybatis第一步,获取sqlSessionFactory对象
    static {
        try {
            String resource = "mybatis-config.xml";
            InputStream inputStream = Resources.getResourceAsStream(resource);
            sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    //既然有了sqlSessionFactory,顾名思义,我们就可以从中获得sqlSession的实例了
    //sqlSession 完全包含了面向数据库执行SQL命令所需的所有方法
    public static SqlSession getSqlSession(){
        return sqlSessionFactory.openSession();
    }

}

插入数据的方法

首先你得先定义好类和数据库里的表

FocusInfo.java

//自己补全set、get方法、构造方法、toString什么的,会用lombok就用lombok,不会用就自己写
public class FocusInfo {
    private int id;
    private String task;
    private Date startTime;
    private Date endTime;
    private long elapsedTime;
}

建表操作

# 这里的表名可能不太合理,先将就着用吧
CREATE TABLE tasks (
    id INT NOT NULL PRIMARY KEY AUTO_INCREMENT,
    task VARCHAR(255) NOT NULL,
    start_time DATETIME NOT NULL,
    end_time DATETIME NOT NULL,
    elapsed_time BIGINT NOT NULL
);

接着你需要编写相应的dao和这个dao对应的配置文件,也就三个而已,一个dao的接口、一个dao的实现类、一个dao的配置文件

先定义好接口

FocusInfoDao.java

package com.urfread.focusmore.mapper;

import com.urfread.focusmore.pojo.FocusInfo;
import java.util.List;

public interface FocusInfoDao {
    int insert(FocusInfo focusInfo);
}

FocusInfoMapper.xml

这个文件和mybatis-config.xml还有FocusInfoDao.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">
<!--这里的namespace是你对应Dao的全类名,就是包名+类名-->
<mapper namespace="com.urfread.focusmore.mapper.FocusInfoDao">
    <insert id="insert" parameterType="com.urfread.focusmore.pojo.FocusInfo">
        INSERT INTO task_info (id, task, start_time, end_time, elapsed_time)
        VALUES (#{id}, #{task}, #{startTime}, #{endTime}, #{elapsedTime})
    </insert>
</mapper>

FocusInfoDaoImpl.java

package com.urfread.focusmore.mapper;

import com.urfread.focusmore.pojo.FocusInfo;
import org.apache.ibatis.session.SqlSession;
import org.springframework.stereotype.Repository;

import java.util.List;

@Repository
public class FocusInfoDaoImpl implements FocusInfoDao {
    public FocusInfoDaoImpl focusInfoDaoImpl() {
        return new FocusInfoDaoImpl();
    }

    SqlSession sqlSession;
    public FocusInfoDaoImpl() {
        sqlSession=MybatisUtils.getSqlSession();
    }

    @Override
    public int insert(FocusInfo focusInfo) {
        FocusInfoDao mapper=sqlSession.getMapper(FocusInfoDao.class);
        int res=mapper.insert(focusInfo);
        System.out.println(res);
        sqlSession.commit();
        return res;
    }
}

测试插入功能

FocusInfoDaoTest.java

我不会用springTest,所以直接new了个FocusInfoDaoImpl做测试,你可千万别学我啊!

package com.urfread.focusmore;

import com.urfread.focusmore.mapper.FocusInfoDaoImpl;
import com.urfread.focusmore.pojo.FocusInfo;
import org.junit.jupiter.api.Test;
import java.util.Date;

public class FocusInfoDaoTest {
    @Test
    public void testInsert() {
        FocusInfo focusInfo = new FocusInfo();
        focusInfo.setTask("测试 是否可以正常插入数据");
        focusInfo.setStartTime(new Date());
        focusInfo.setEndTime(new Date());
        focusInfo.setElapsedTime(0);

        new FocusInfoDaoImpl().saveFocusInfo(focusInfo);
    }
}

如何使用mybatis查询数据?

如果你已经掌握了如何插入一条数据,那么查询将变得非常简单。

增加配置

更改FocusInfoMapper.xml

加入一下代码

<select id="getAllFocusInfo" resultType="com.urfread.focusmore.pojo.FocusInfo">
    SELECT * FROM task_info
</select>

增加类上的方法

接口上的

List<FocusInfo> getAllFocusInfo();

实现类上的

@Override
public List<FocusInfo> getAllFocusInfo() {
    return sqlSession.selectList("com.urfread.focusmore.mapper.FocusInfoDao.getAllFocusInfo");
}

测试查询功能

@Test
public void testGetAllFocusInfo() {
    new FocusInfoDaoImpl().getAllFocusInfo().forEach(System.out::println);
}

如何更改和删除?

把FocusInfoMapper.xml文件喂给AI,问问AI的意见