Mybatis 注解

本文最后更新于:2024年9月8日 晚上

Mybatis 注解

  • mybatis最初配置信息是基于 XML ,映射语句(SQL)也是定义在 XML 中的,而到MyBatis 3提供了新的基于注解的配置。
  • 但是Java 注解的的表达力和灵活性十分有限,最强大的 MyBatis 映射并不能用注解来构建。
  • 注意:利用注解开发就不需要mapper.xml映射文件了,通过class绑定接口。
1
2
3
<mappers>
<mapper class="com.example.mapper.UserMapper"/>
</mappers>

@Select

  1. 在接口中添加注解。
1
2
3
// 查询全部用户。
@Select("select id,name,pwd password from user")
public List<User> getAllUser();
  1. 测试。
1
2
3
4
5
6
7
8
9
10
11
12
13
@Test
public void testGetAllUser() {
SqlSession session = MybatisUtils.getSession();
// 本质上利用了jvm的动态代理机制。
UserMapper mapper = session.getMapper(UserMapper.class);

List<User> users = mapper.getAllUser();
for (User user : users){
System.out.println(user);
}

session.close();
}

@Insert

  1. 编写接口方法注解。
1
2
3
// 添加一个用户。
@Insert("insert into user (id,name,pwd) values (#{id},#{name},#{pwd})")
int addUser(User user);
  1. 测试。
1
2
3
4
5
6
7
8
9
10
@Test
public void testAddUser() {
SqlSession session = MybatisUtils.getSession();
UserMapper mapper = session.getMapper(UserMapper.class);

User user = new User(6, "test", "123456");
mapper.addUser(user);

session.close();
}

@Update

  1. 编写接口方法注解。
1
2
3
// 修改一个用户。
@Update("update user set name=#{name},pwd=#{pwd} where id = #{id}")
int updateUser(User user);
  1. 测试。
1
2
3
4
5
6
7
8
9
10
@Test
public void testUpdateUser() {
SqlSession session = MybatisUtils.getSession();
UserMapper mapper = session.getMapper(UserMapper.class);

User user = new User(6, "test", "123456");
mapper.updateUser(user);

session.close();
}

@Delete

  1. 编写接口方法注解。
1
2
3
// 根据id删除用。
@Delete("delete from user where id = #{id}")
int deleteUser(@Param("id")int id);
  1. 测试。
1
2
3
4
5
6
7
8
9
@Test
public void testDeleteUser() {
SqlSession session = MybatisUtils.getSession();
UserMapper mapper = session.getMapper(UserMapper.class);

mapper.deleteUser(6);

session.close();
}
  • 注意:增删改一定要对事务处理。

@Param

  • @Param注解用于给方法参数起一个名字,以下是总结的使用原则:
    • 在方法只接受一个参数的情况下,可以不使用@Param
    • 在方法接受多个参数的情况下,建议一定要使用@Param注解给参数命名。
1
int addUser(@Param("user")User user);

本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!