介绍
在本项目中,你将学习如何使用流行的 Java 持久化框架 MyBatis 对课程时间表进行 CRUD(创建、读取、更新、删除)操作。
👀 预览


🎯 任务
在本项目中,你将学习:
- 如何配置项目并设置必要的依赖项
- 如何通过添加属性、构造函数、setter/getter 方法及其他内容来改进
Course实体类 - 如何改进 MyBatis 配置文件
mybatis-config.xml - 如何实现
CourseMapper接口及其相应方法 - 如何在
CourseMapper.xml文件中实现 SQL 映射 - 如何在
MyBatisTest.java文件中实现测试用例
🏆 成果
完成本项目后,你将能够:
- 使用 MyBatis 与 MySQL 数据库进行交互
- 定义实体类并配置 MyBatis 映射文件
- 使用 MyBatis 实现 CRUD 操作
- 编写单元测试以验证应用程序的功能
配置项目
在这一步中,你将学习如何配置项目并设置必要的依赖项。
- 打开
MyBatisCourseDemo02项目中的pom.xml文件。 - 在
<dependencies>部分添加以下依赖项:
<!-- MyBatis jar -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.6</version>
</dependency>
<!-- MySQL数据库驱动jar -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.16</version>
</dependency>
- 在
<properties>部分添加以下属性,以配置字符编码和 JDK 版本:
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
</properties>
- 添加以下
<build>部分,以将 XML 映射文件包含在类路径中:
<build>
<resources>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.xml</include>
</includes>
<filtering>true</filtering>
</resource>
<resource>
<directory>src/main/resources</directory>
<filtering>true</filtering>
</resource>
</resources>
</build>
改进实体类
在这一步中,你将通过添加属性、构造函数、setter/getter 方法及其他内容来改进Course实体类。
- 打开
/src/main/java/org/labex/pojo目录下的Course.java文件。 - 在
Course类中添加以下属性:
private int cNo;
private String cName;
private String teacher;
- 添加以下构造函数:
public Course() {
}
public Course(int cNo, String cName, String teacher) {
this.cNo = cNo;
this.cName = cName;
this.teacher = teacher;
}
- 添加以下 getter 和 setter 方法:
public int getCNo() {
return cNo;
}
public void setCNo(int cNo) {
this.cNo = cNo;
}
public String getCName() {
return cName;
}
public void setCName(String cName) {
this.cName = cName;
}
public String getTeacher() {
return teacher;
}
public void setTeacher(String teacher) {
this.teacher = teacher;
}
- 添加以下
toString()方法:
@Override
public String toString() {
return "Course number: " + this.cNo + "\tCourse name: " + this.cName + "\tTeacher: " + this.teacher;
}
改进 MyBatis 配置
在这一步中,你将改进 MyBatis 配置文件mybatis-config.xml。
- 打开
src/main/resources目录下的mybatis-config.xml文件。 - 在
<typeAliases>部分添加以下内容,为实体类定义别名:
<typeAliases>
<package name="org.labex.pojo"/>
</typeAliases>
- 在
<environments>部分配置数据源环境:
<environments default="development">
<environment id="development">
<transactionManager type="JDBC" />
<dataSource type="POOLED">
<property name="driver" value="${mysql.driver}" />
<property name="url" value="${mysql.url}" />
<property name="username" value="${mysql.username}" />
<property name="password" value="${mysql.password}" />
</dataSource>
</environment>
</environments>
- 在
<mappers>部分注册 SQL 映射文件CourseMapper.xml:
<mappers>
<package name="org.labex.mapper" />
</mappers>
实现 CourseMapper 接口
在这一步中,你将实现CourseMapper接口及其相应的方法。
- 打开
org.labex.mapper包中的CourseMapper.java文件。 - 向
CourseMapper接口中添加以下方法:
import java.util.List;
import org.labex.pojo.Course;
public interface CourseMapper {
/**
* 查询所有课程信息
*/
public List<Course> queryAllCourse();
/**
* 插入一门新课程
* @param course
*/
public int insertCourse(Course course);
/**
* 更新课程信息
* @param course
*/
public int updateCourse(Course course);
/**
* 根据课程编号删除课程信息
* @param course
*/
public int deleteCourse(int cNo);
}
实现 SQL 映射
在这一步中,你将在CourseMapper.xml文件中实现 SQL 映射。
- 打开
src/main/java/org/labex/mapper目录下的CourseMapper.xml文件。 - 添加以下 SQL 映射语句:
<!-- 获取所有课程信息 -->
<select id="queryAllCourse" resultType="org.labex.pojo.Course">
select * from course
</select>
<!-- 插入一门新课程 -->
<insert id="insertCourse" parameterType="org.labex.pojo.Course">
insert into course(cNo,cName,teacher)
values(#{cNo},#{cName},#{teacher})
</insert>
<!-- 根据课程编号更新课程信息 -->
<update id="updateCourse" parameterType="org.labex.pojo.Course">
update course set cName=#{cName},teacher=#{teacher}
where cNo=#{cNo}
</update>
<!-- 根据课程编号删除课程信息 -->
<delete id="deleteCourse" parameterType="int">
delete from course where cNo=#{cNo}
</delete>
实现测试用例
在这一步中,你将在MyBatisTest.java文件中实现测试用例。
- 打开
/src/test/java/org/labex/test目录下的MyBatisTest.java文件。 - 添加以下测试方法:
import java.io.IOException;
import java.io.Reader;
import java.util.List;
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 org.junit.Before;
import org.junit.Test;
import org.labex.mapper.CourseMapper;
import org.labex.pojo.Course;
public class MyBatisTest {
SqlSessionFactory sessionFactory = null;
SqlSession session = null;
@Before
public void before() throws IOException{
String resource = "mybatis-config.xml";
// 加载 MyBatis 配置文件
Reader reader = Resources.getResourceAsReader(resource);
// 创建 SqlSession 工厂
sessionFactory = new SqlSessionFactoryBuilder().build(reader);
// 创建能够执行 SQL 映射文件中 SQL 语句的 SqlSession 对象
session = sessionFactory.openSession();
}
@Test
public void testSel() throws IOException{
// 调用 session 中的 getMapper() 方法返回接口对象
CourseMapper cMapper = session.getMapper(CourseMapper.class);
// 执行查询并返回所有 Course 对象
List<Course> courses = cMapper.queryAllCourse();
System.out.println(courses);
session.close();
}
@Test
public void testIns() throws IOException{
// 调用 session 中的 getMapper() 方法返回接口对象
CourseMapper cMapper = session.getMapper(CourseMapper.class);
Course course = new Course(8,"人工智能","汤姆");
int i = cMapper.insertCourse(course);
session.commit();
System.out.println((i!=0? "数据添加成功":"数据添加失败"));
session.close();
}
@Test
public void testUpd() throws IOException{
// 调用 session 中的 getMapper() 方法返回接口对象
CourseMapper cMapper = session.getMapper(CourseMapper.class);
Course course = new Course(1,"软件测试","杰克");
int i = cMapper.updateCourse(course);
session.commit();
System.out.println((i!=0? "数据更新成功":"数据更新失败"));
session.close();
}
@Test
public void testDEl() throws IOException{
// 调用 session 中的 getMapper() 方法返回接口对象
CourseMapper cMapper = session.getMapper(CourseMapper.class);
int i = cMapper.deleteCourse(7);
session.commit();
System.out.println((i!=0? "数据删除成功":"数据删除失败"));
session.close();
}
}
完成这些步骤后,你已成功配置项目、改进实体类、配置 MyBatis 设置、实现CourseMapper接口并实现测试用例。现在你可以运行测试来验证应用程序的功能。
运行
接下来,在终端中进行编译和运行,并使用 Maven 检查测试文件:
cd MyBatisCourseDemo02
mvn test
你可以参考以下步骤来验证挑战结果。


总结
恭喜!你已完成此项目。你可以在 LabEx 中练习更多实验以提升技能。



