我的MyBatis快速入门
花了我四个小时,三个小时在找问题,哭死。

这是最终版的结构,每个文件的内容放最后了。
来谈谈步骤:
1.创建Maven项目,配置pom.xml
2.数据库建表,
3.创建目录结构(如图所示)
4.pojo包下的User实体类先弄好
5.定义 MyBatis 接口UserMapper.java
6.编写映射文件UserMapper.xml
7.配置mybatis-config.xml
8.配置日志log4j.properties(没有也行)
9.编写测试类TestMyBatis.java
我犯了什么错:
1.java下的UserMapper和resources下的UserMapper.xml路径不一致(图片里一致了)
2.数据库名称写错了,因为自己用的和AI用的不一致
3.这么简单的的程序有俩错够多了,别三了
代码:
UserMapper:
package com.ljy001.mapper;
import com.ljy001.pojo.User;
import java.util.List;
public interface UserMapper {
// 根据 ID 查询用户
User getUserById(int id);
// 查询所有用户
List<User> getAllUsers();
// 插入用户
int insertUser(User user);
// 更新用户信息
int updateUser(User user);
// 根据 ID 删除用户
int deleteUserById(int id);
}
User:
package com.ljy001.pojo;
public class User {
// 用户的唯一标识
private Integer id;
// 用户姓名
private String name;
// 用户年龄
private Integer age;
// 无参构造方法,方便创建对象时不传入初始值
public User() {
}
// 全参构造方法,方便在创建对象时直接初始化所有属性
public User(Integer id, String name, Integer age) {
this.id = id;
this.name = name;
this.age = age;
}
// 获取用户 ID
public Integer getId() {
return id;
}
// 设置用户 ID
public void setId(Integer id) {
this.id = id;
}
// 获取用户姓名
public String getName() {
return name;
}
// 设置用户姓名
public void setName(String name) {
this.name = name;
}
// 获取用户年龄
public Integer getAge() {
return age;
}
// 设置用户年龄
public void setAge(Integer age) {
this.age = age;
}
// 重写 toString 方法,方便打印对象信息
@Override
public String toString() {
return "User{" +
"id=" + id +
", name='" + name + '\'' +
", age=" + age +
'}';
}
}
TestMyBatis:
package com.ljy001;
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 com.ljy001.mapper.UserMapper;
import com.ljy001.pojo.User;
import java.io.InputStream;
import java.util.List;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class TestMyBatis {
private static final Logger logger = LoggerFactory.getLogger(TestMyBatis.class);
public static void main(String[] args) {
try {
String resource = "mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
performDatabaseOperations(sqlSessionFactory);
} catch (Exception e) {
logger.error("发生异常: ", e);
}
}
private static void performDatabaseOperations(SqlSessionFactory sqlSessionFactory) {
try (SqlSession session = sqlSessionFactory.openSession()) {
UserMapper userMapper = session.getMapper(UserMapper.class);
User user = getUserById(userMapper, 1);
if (user != null) {
logger.info("根据ID查询的用户: {}", user);
}
List<User> users = getAllUsers(userMapper);
if (!users.isEmpty()) {
logger.info("查询到的所有用户: {}", users);
}
User newUser = createNewUser();
insertUser(userMapper, session, newUser);
updateUser(userMapper, session, newUser);
deleteUserById(userMapper, session, newUser.getId());
}
}
private static User getUserById(UserMapper userMapper, int id) {
try {
return userMapper.getUserById(id);
} catch (Exception e) {
logger.error("查询用户时发生异常: ", e);
return null;
}
}
private static List<User> getAllUsers(UserMapper userMapper) {
try {
return userMapper.getAllUsers();
} catch (Exception e) {
logger.error("查询所有用户时发生异常: ", e);
return null;
}
}
private static User createNewUser() {
return new User(null, "Tom", 26);
}
private static void insertUser(UserMapper userMapper, SqlSession session, User user) {
try {
userMapper.insertUser(user);
session.commit();
logger.info("插入用户成功: {}", user);
} catch (Exception e) {
logger.error("插入用户时发生异常: ", e);
session.rollback();
}
}
private static void updateUser(UserMapper userMapper, SqlSession session, User user) {
try {
user.setName("Jerry");
userMapper.updateUser(user);
session.commit();
logger.info("更新用户成功: {}", user);
} catch (Exception e) {
logger.error("更新用户时发生异常: ", e);
session.rollback();
}
}
private static void deleteUserById(UserMapper userMapper, SqlSession session, Integer id) {
try {
if (id != null) {
userMapper.deleteUserById(id);
session.commit();
logger.info("删除用户成功,ID: {}", id);
}
} catch (Exception e) {
logger.error("删除用户时发生异常: ", e);
session.rollback();
}
}
}
UserMapper.xml
<!-- 定义结果映射,将数据库表的列名映射到实体类的属性 -->
<resultMap id="UserResultMap" type="com.ljy001.pojo.User">
<id property="id" column="id"/>
<result property="name" column="name"/>
<result property="age" column="age"/>
</resultMap>
<!-- 根据 ID 查询用户 -->
<select id="getUserById" parameterType="int" resultMap="UserResultMap">
SELECT * FROM users WHERE id = #{id}
</select>
<!-- 查询所有用户 -->
<select id="getAllUsers" resultMap="UserResultMap">
SELECT * FROM users
</select>
<!-- 插入用户 -->
<insert id="insertUser" parameterType="com.ljy001.pojo.User">
INSERT INTO users (name, age) VALUES (#{name}, #{age})
<!-- 如果数据库支持自动生成主键,可以使用以下方式获取插入后的主键值 -->
<selectKey keyProperty="id" resultType="int" order="AFTER">
SELECT LAST_INSERT_ID()
</selectKey>
</insert>
<!-- 更新用户信息 -->
<update id="updateUser" parameterType="com.ljy001.pojo.User">
UPDATE users
SET name = #{name}, age = #{age}
WHERE id = #{id}
</update>
<!-- 根据 ID 删除用户 -->
<delete id="deleteUserById" parameterType="int">
DELETE FROM users WHERE id = #{id}
</delete>
log4.properties:
log4j.rootLogger=DEBUG, stdout
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d %p [%c] - %m%n
mybatis-config.xml
<!-- 类型别名配置,简化全限定类名的使用 -->
<typeAliases>
<!-- 为单个类定义别名 -->
<typeAlias alias="User" type="com.ljy001.pojo.User"/>
<!-- 批量扫描包,为包下的所有类自动生成别名,别名默认为类名(首字母小写) -->
<package name="com.ljy001.pojo"/>
</typeAliases>
<!-- 插件配置,用于扩展 MyBatis 的功能,如分页插件 -->
<!-- 如果暂时不使用插件,可以保留注释 -->
<!-- <plugins>
<plugin interceptor="com.example.plugin.MyPlugin"/>
</plugins> -->
<!-- 环境配置,可以配置多个环境,如开发、测试、生产环境 -->
<environments default="development">
<environment id="development">
<!-- 事务管理器类型,JDBC 表示使用 JDBC 的事务管理 -->
<transactionManager type="JDBC"/>
<!-- 数据源类型,POOLED 表示使用连接池 -->
<dataSource type="POOLED">
<property name="driver" value="com.mysql.cj.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/250507?useSSL=false&serverTimezone=UTC"/>
<property name="username" value="root"/>
<property name="password" value="123456"/>
</dataSource>
</environment>
</environments>
<!-- 映射器配置,指定 MyBatis 的映射文件或映射接口 -->
<mappers>
<!-- 通过资源路径引入映射文件 -->
<mapper resource="com/ljy001/mapper/UserMapper.xml"/>
<!-- 通过接口的全限定名引入映射接口 -->
<!-- <mapper class="com.ljy001.mapper.UserMapper"/> -->
<!-- 批量扫描包下的所有映射接口 -->
<!-- <package name="com.ljy001.mapper"/> -->
</mappers>
pom.xml:
<!-- 项目基本信息 -->
<groupId>com.ljy001</groupId>
<artifactId>250205</artifactId>
<version>1.0-SNAPSHOT</version>
<!-- 项目属性配置 -->
<properties>
<!-- Java 编译版本,可根据实际情况调整 -->
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
<!-- 项目编码 -->
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<!-- 依赖版本定义 -->
<mysql-connector.version>8.0.32</mysql-connector.version>
<mybatis.version>3.5.10</mybatis.version>
<junit.version>4.13.2</junit.version>
<!-- SLF4J 版本 -->
<slf4j.version>1.7.36</slf4j.version>
<!-- log4j 版本 -->
<log4j.version>1.2.17</log4j.version>
</properties>
<!-- 依赖管理 -->
<dependencyManagement>
<dependencies>
<!-- MySQL 数据库驱动 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>${mysql-connector.version}</version>
</dependency>
<!-- MyBatis 框架 -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>${mybatis.version}</version>
</dependency>
<!-- JUnit 测试框架 -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>${junit.version}</version>
<scope>test</scope>
</dependency>
<!-- SLF4J API -->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>${slf4j.version}</version>
</dependency>
<!-- log4j 实现 -->
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>${log4j.version}</version>
</dependency>
<!-- 添加 slf4j-log4j12 依赖管理 -->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>${slf4j.version}</version>
</dependency>
</dependencies>
</dependencyManagement>
<!-- 项目依赖 -->
<dependencies>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.10</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<!-- 建议显式指定 scope 为 test -->
<scope>test</scope>
</dependency>
<!-- SLF4J API -->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
</dependency>
<!-- log4j 实现 -->
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
</dependency>
<!-- 添加 slf4j-log4j12 依赖 -->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>${slf4j.version}</version>
</dependency>
</dependencies>
<!-- 构建配置 -->
<build>
<plugins>
<!-- Maven 编译插件 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.1</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
<!-- 资源插件,确保配置文件能正确打包 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-resources-plugin</artifactId>
<version>3.2.0</version>
<configuration>
<encoding>${project.build.sourceEncoding}</encoding>
<resources>
<resource>
<directory>src/main/resources</directory>
<includes>
<include>**/*.properties</include>
<include>**/*.xml</include>
</includes>
</resource>
</resources>
</configuration>
</plugin>
</plugins>
</build>
建表语句:
把User实体类发给AI让它帮你生成吧
浙公网安备 33010602011771号