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&sueUnicode=true&characterEncoding=UTF-8&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的意见