前言
在本节内容中,对入门程序进行了更加丰富的sql操作,增删改查逐一测试
mybatisTest.java测试类
// 定义测试类,用于测试MyBatis操作
public class mybatisTest {
// 私有变量,用于存储SqlSessionFactory和SqlSession对象
private SqlSessionFactory sqlSessionFactory;
private SqlSession sqlSession;
// 初始化方法,使用@Before注解,在每个测试方法执行前运行
@Before
public void init() {
// 指定MyBatis核心配置文件的位置
String resource = "mybatis-config.xml";
InputStream inputStream;
try {
// 加载配置文件资源
inputStream = Resources.getResourceAsStream(resource);
// 使用SqlSessionFactoryBuilder构建SqlSessionFactory
sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
// 创建SqlSession实例
sqlSession = sqlSessionFactory.openSession();
} catch (IOException e) {
// 异常处理
e.printStackTrace();
}
}
// 测试查询User表全部内容
@Test
public void selectUserAll() {
// 执行查询操作,并接收返回的用户列表
List<User> userList = sqlSession.selectList("test.selectUserAll");
// 输出用户列表
System.out.println(userList);
}
// 测试通过ID查询用户
@Test
public void selectUserById() {
// 执行查询操作,并接收返回的用户对象
User user = sqlSession.selectOne("test.selectUserById", 1);
// 输出用户对象
System.out.println(user);
}
// 测试新增用户数据
@Test
public void insertUserInfo() {
// 先查询一个用户(这里逻辑上可能不符合实际,仅为示例)
User user = New User();
// 设置用户信息
user.setPassword("123456");
user.setUsername("小美");
// 执行插入操作,并获取影响行数
int index = sqlSession.insert("test.insertUserInfo", user);
// 输出影响行数
System.out.println(index);
}
// 测试更新用户数据
@Test
public void updateUserById() {
// 类似新增操作,先查询再更新
User user = sqlSession.selectOne("selectUserById", 10);
user.setPassword("123456");
user.setUsername("大壮");
int index = sqlSession.update("updateUserById", user);
System.out.println(index);
}
// 测试通过ID删除用户信息
@Test
public void deleteUserById() {
// 执行删除操作,并获取影响行数
int user = sqlSession.delete("test.deleteUserById", 10);
// 输出影响行数
System.out.println(user);
}
// 清理资源方法,使用@After注解,在每个测试方法执行后运行
@After
public void destory() {
// 提交事务(如果有修改操作)
sqlSession.commit();
// 关闭SqlSession
sqlSession.close();
}
}
userMapper.xml映射文件
<!-- 定义Mapper映射文件,命名空间为test -->
<mapper namespace="test">
<!-- 查询User表全部内容 -->
<select id="selectUserAll" resultType="User">
select * from tb_user
</select>
<!-- 通过ID查询用户 -->
<select id="selectUserById" resultType="User" parameterType="int">
select * from tb_user where id = #{id}
</select>
<!-- 模糊查询用户,通过username -->
<select id="selectUserByName" resultType="User" parameterType="String">
select * from tb_user where username like concat('%',#{username},'%')
</select>
<!-- 插入新用户信息 -->
<insert id="insertUserInfo" parameterType="User">
insert into tb_user (username,password) values (#{username},#{password})
</insert>
<!-- 更新用户信息 -->
<update id="updateUserById" parameterType="User">
update tb_user set username=#{username}, password=#{password} where id=#{id}
</update>
<!-- 通过ID删除用户信息 -->
<delete id="deleteUserById" parameterType="int">
delete from tb_user where id = #{id}
</delete>
</mapper>
总结
MyBatis基础:包括如何配置MyBatis环境(mybatis-config.xml)、定义Mapper映射文件(userMapper.xml)、使用SqlSessionFactory和SqlSession执行数据库操作。
CRUD操作:演示了如何在MyBatis中进行增删改查(CRUD)操作,包括selectList、selectOne、insert、update、delete方法的使用。
参数传递:展示了如何在Mapper映射文件中通过parameterType定义方法参数类型,以及在SQL语句中如何使用#{参数名}来引用这些参数。
事务管理:通过sqlSession.commit()和sqlSession.close()方法管理数据库事务,确保数据一致性和资源正确释放。
JUnit测试:使用JUnit框架编写测试用例,通过@Before、@Test、@After注解控制测试方法的执行顺序和生命周期。
动态SQL:在selectUserByName方法中,使用了concat函数和like操作符实现模糊查询,展示了MyBatis动态SQL的能力。
命名空间:在Mapper映射文件中定义namespace,用于唯一标识Mapper接口或XML映射文件,在SQL语句引用时通过namespace.id的方式确保唯一性。注意本节内容的命名空间为test