Mybatis的注解开发

古城微笑少年丶 2024-04-01 12:54 157阅读 0赞

Mybatis的注解开发

注解开发介绍

目标
  • 了解常用的注解
讲解
注解开发介绍

Mybatis也支持注解开发。但是需要明确的是,Mybatis仅仅是把映射配置文件 使用注解代替了;而Mybatis的全局配置文件仍然是xml。

实际开发中,可以使用注解开发+xml开发。但是要注意:

  • 一个功能,不能重复配置:如果使用注解配置一次,再用xml配置一次,mybatis会报错
  • 映射配置文件 和 映射器要 同名同位置
  • 开发时:简单功能使用注解,复杂功能使用xml
常用注解
  • @Select:用于配置查询语句。相当于select标签
  • @Insert:用于配置插入语句。相当于insert标签
  • @SelectKey:用于插入数据时,获取主键值
  • @Update
  • @Delete
  • @Results:相当于resultMap标签
  • @Result:相当于resultMap里的id或者result标签
  • @Many:相当于resultMap里的collection
  • @One:相当于resultMap里的association

单表CURD操作

目标
  • 能够使用注解实现单表的CURD操作
实现
映射器里加方法
  1. package com.demo.dao;
  2. import com.demo.domain.User;
  3. import com.demo.domain.User2;
  4. import org.apache.ibatis.annotations.*;
  5. import java.util.List;
  6. /**
  7. * 按住alt,鼠标竖着拖动,是列选择模式
  8. * 按住ctrl,点击左右方向键,一个单词一个单词的跳
  9. * 按住shift,点击左右方向键,一个字符一个字符的选中
  10. * 按住ctrl+shift,点击左右方向键,一个单词一个单词的选中
  11. */
  12. public interface UserDao {
  13. /**
  14. * 查询全部用户
  15. */
  16. @Select("select * from user")
  17. List<User> queryAll();
  18. /**
  19. * 根据id查询一个用户
  20. */
  21. @Select("select * from user where id = #{id}")
  22. User findById(Integer id);
  23. /**
  24. * 查询数量
  25. */
  26. @Select("select count(*) from user")
  27. int totalCount();
  28. /**
  29. * 插入一条用户数据
  30. * <selectKey resultType="int" keyProperty="id" order="AFTER">
  31. * select last_insert_id()
  32. * </selectKey>
  33. */
  34. @Insert("INSERT INTO USER(username, birthday, sex, address) " +
  35. "VALUES(#{username}, #{birthday}, #{sex}, #{address})")
  36. @SelectKey(statement = "select last_insert_id()",
  37. resultType = int.class,
  38. keyProperty = "id",
  39. before = false)
  40. void save(User user);
  41. /**
  42. * 修改用户
  43. */
  44. @Update("update user set username = #{username}, birthday=#{birthday}," +
  45. "sex=#{sex}, address=#{address} where id=#{id}")
  46. void edit(User user);
  47. /**
  48. * 删除用户
  49. */
  50. @Delete("delete from user where id = #{id}")
  51. void delete(Integer id);
  52. /**
  53. * 查询用户,把结果封装成User2
  54. * 注意:User2的属性名 和 user表的字段名 不同
  55. * <resultMap id="user2Map" type="User2">
  56. * <id property="userId" column="id"/>
  57. * <result property="username" column="username"/>
  58. * <result property="userBirthday" column="birthday"/>
  59. * <result property="userSex" column="sex"/>
  60. * <result property="userAddress" column="address"/>
  61. * </resultMap>
  62. *
  63. * 代替resultMap标签的注解:@Results
  64. * 代替id标签/result标签的注解:@Result
  65. */
  66. @Select("select * from user")
  67. @Results({
  68. @Result(property = "userId", column = "id", id = true),
  69. @Result(property = "username", column = "username"),
  70. @Result(property = "userBirthday", column = "birthday"),
  71. @Result(property = "userSex", column = "sex"),
  72. @Result(property = "userAddress", column = "address")
  73. })
  74. List<User2> queryAllUser2();
  75. }
功能测试
  1. package com.demo;
  2. import com.demo.dao.UserDao;
  3. import com.demo.domain.User;
  4. import com.demo.domain.User2;
  5. import org.apache.ibatis.io.Resources;
  6. import org.apache.ibatis.session.SqlSession;
  7. import org.apache.ibatis.session.SqlSessionFactory;
  8. import org.apache.ibatis.session.SqlSessionFactoryBuilder;
  9. import org.junit.After;
  10. import org.junit.Before;
  11. import org.junit.Test;
  12. import java.io.IOException;
  13. import java.io.InputStream;
  14. import java.util.Date;
  15. import java.util.List;
  16. /**
  17. * 注解开发测试
  18. */
  19. public class AnnotationTest {
  20. private InputStream is;
  21. private SqlSession session;
  22. private UserDao userDao;
  23. @Test
  24. public void testQueryAll(){
  25. List<User> userList = userDao.queryAll();
  26. for (User user : userList) {
  27. System.out.println(user);
  28. }
  29. }
  30. @Test
  31. public void testFindById(){
  32. System.out.println(userDao.findById(41));
  33. }
  34. @Test
  35. public void testTotalCount(){
  36. System.out.println(userDao.totalCount());
  37. }
  38. @Test
  39. public void testSave(){
  40. User user = new User();
  41. user.setUsername("jack");
  42. user.setSex("男");
  43. user.setAddress("英格兰");
  44. user.setBirthday(new Date());
  45. userDao.save(user);
  46. session.commit();
  47. System.out.println(user);
  48. }
  49. @Test
  50. public void testEdit(){
  51. User user = userDao.findById(54);
  52. user.setUsername("rose");
  53. user.setSex("女");
  54. userDao.edit(user);
  55. session.commit();
  56. }
  57. @Test
  58. public void testDelete(){
  59. userDao.delete(54);
  60. session.commit();
  61. }
  62. @Test
  63. public void testQueryAllUser2(){
  64. List<User2> user2s = userDao.queryAllUser2();
  65. user2s.forEach(System.out::println);
  66. }
  67. @Before
  68. public void init() throws IOException {
  69. //1. 读取全局配置文件
  70. is = Resources.getResourceAsStream("SqlMapConfig.xml");
  71. //2. 得到一个SqlSession对象
  72. SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(is);
  73. session = factory.openSession();
  74. userDao = session.getMapper(UserDao.class);
  75. }
  76. @After
  77. public void destroy() throws IOException {
  78. session.close();
  79. is.close();
  80. }
  81. }
#

发表评论

表情:
评论列表 (有 0 条评论,157人围观)

还没有评论,来说两句吧...

相关阅读

    相关 Mybatis 注解开发

    这几年来注解开发越来越流行,Mybatis 也可以使用注解开发方式,这样我们就可以减少编写 Mapper 映射 文件了。本次我们先围绕一些基本的 CRUD 来学习,再学习复杂映