importorg.apache.ibatis.annotations.*;importjava.util.List;publicinterfaceUserMapper{// === 基础CRUD ===@Insert("INSERT INTO user (name, email) VALUES (#{name}, #{email})")@Options(useGeneratedKeys =true, keyProperty ="id")voidinsertUser(User user);// 新增用户@Select("SELECT * FROM user WHERE id = #{id}")UserselectUserById(Long id);// 根据ID查询@Update("UPDATE user SET name = #{name}, email = #{email} WHERE id = #{id}")voidupdateUser(User user);// 更新用户@Delete("DELETE FROM user WHERE id = #{id}")voiddeleteUser(Long id);// 删除用户// === 动态SQL ===@Select("SELECT * FROM user WHERE name LIKE CONCAT('%', #{keyword}, '%')")List<User>searchUsersByName(@Param("keyword")String keyword);// 模糊查询// === 关联查询 ===@Results({@Result(id =true, column ="id", property ="id"),@Result(column ="name", property ="name"),@Result(column ="email", property ="email"),@Result(property ="orders", column ="id", javaType =List.class,many =@Many(select ="com.example.mapper.OrderMapper.selectOrdersByUserId"))})@Select("SELECT * FROM user WHERE id = #{id}")UserselectUserWithOrders(Long id);// 通过ID查询用户及其订单// === 分页 ===@Select("SELECT * FROM user LIMIT #{offset}, #{limit}")List<User>selectUsersByPage(@Param("offset")int offset,@Param("limit")int limit);// === 事务管理 ===@Insert("INSERT INTO user (name, email) VALUES (#{name}, #{email})")@SelectKey(statement ="SELECT LAST_INSERT_ID()", keyProperty ="id", before =false, resultType =Long.class)voidinsertWithTransaction(User user);// 带事务的插入}
importorg.apache.ibatis.session.SqlSessionFactory;importorg.apache.ibatis.session.SqlSessionFactoryBuilder;importorg.junit.Before;importorg.junit.Test;publicclassMyBatisTest{privateSqlSessionFactory sqlSessionFactory;@Beforepublicvoidsetup(){sqlSessionFactory =newSqlSessionFactoryBuilder().build(getClass().getResourceAsStream("/mybatis-config.xml"));}@TestpublicvoidtestInsert(){User user =newUser();user.setName("John");user.setEmail("john@example.com");UserService service =newUserService(sqlSessionFactory);service.addUser(user);System.out.println("Inserted user ID: "+ user.getId());}// 其他测试方法...}
8. 核心注解对比表
注解
作用
使用场景
示例
@Insert
定义插入操作
新增数据
@Insert("INSERT INTO user (name, email) VALUES (#{name}, #{email})")
@Select
定义查询操作
查询单条或多条数据
@Select("SELECT * FROM user WHERE id = #{id}")
@Update
定义更新操作
修改数据
@Update("UPDATE user SET name = #{name} WHERE id = #{id}")