• MyBatis操作数据库的方式(api+注解)


    目录

    一.原生的 API&注解的方式

    1. MyBatis-原生的 API 调用

    二.注解的方式

    使用注解的方式来配置接口方法

    注意事项和说明


    一.原生的 API&注解的方式

    1. MyBatis-原生的 API 调用

    在前面项目的基础上,将增删改查,使用 MyBatis 原生的 API 完成,就是直接通过
    SqlSession 接口的方法来完成
    1. 增加
    2. 删除
    3. 修改
    4. 查询

    1. /**
    2. * @author 海绵hong
    3. * @version 1.0
    4. * MyBatisNativeTest: 演示使用MyBatis原生API操作
    5. */
    6. public class MyBatisNativeTest {
    7. //属性
    8. private SqlSession sqlSession;
    9. //编写方法完成初始化
    10. @Before
    11. public void init() {
    12. //获取到sqlSession
    13. sqlSession = MyBatisUtils.getSqlSession();
    14. //sqlSession 返回的对象是 DefaultSqlSession
    15. System.out.println("sqlSession--" + sqlSession.getClass());
    16. }
    17. //使用sqlSession原生的API调用我们编写的方法[了解]
    18. @Test
    19. public void myBatisNativeCrud() {
    20. //添加
    21. /**
    22. *
    23. * @Override
    24. * public int insert(String statement, Object parameter) {
    25. * return update(statement, parameter);
    26. * }
    27. *
    28. * statement: 就是接口方法-完整声明
    29. * parameter: 入参
    30. */
    31. Monster monster = new Monster();
    32. monster.setAge(100);
    33. monster.setBirthday(new Date());
    34. monster.setEmail("kate2@qq.com");
    35. monster.setGender(0);
    36. monster.setName("大象精-100");
    37. monster.setSalary(10000);
    38. int insert =
    39. sqlSession.insert("com.hong.mapper.MonsterMapper.addMonster", monster);
    40. System.out.println("insert---" + insert);
    41. //删除
    42. int delete = sqlSession.delete("com.hong.mapper.MonsterMapper.delMonster", 11);
    43. System.out.println("delete--" + delete);
    44. //修改
    45. Monster monster = new Monster();
    46. monster.setAge(20);
    47. monster.setBirthday(new Date());
    48. monster.setEmail("kate3@qq.com");
    49. monster.setGender(1);
    50. monster.setName("牛魔王-100");
    51. monster.setSalary(1000);
    52. monster.setId(10);//这个一定要有,如果没有就不知道修改哪个对象
    53. int update =
    54. sqlSession.update("com.hong.mapper.MonsterMapper.updateMonster", monster);
    55. System.out.println("update--" + update);
    56. //查询
    57. List monsters =
    58. sqlSession.selectList("com.hong.mapper.MonsterMapper.findAllMonster");
    59. for (Monster monster : monsters) {
    60. System.out.println("monster--" + monster);
    61. }
    62. //如果是增删改, 需要提交事务
    63. if(sqlSession != null) {
    64. sqlSession.commit();
    65. sqlSession.close();
    66. }
    67. System.out.println("操作成功...");
    68. }
    69. }

    原生的api调用就是会去找你的MonsterMapper.xml配置的语句

    二.注解的方式

    我们不去使用xml配置方法去操作数据库,那么我们就可以使用注解的方式操作

    首先我们需要去创建一个接口:

    使用注解的方式来配置接口方法

    1. /**
    2. * @author 海绵hong
    3. * @version 1.0
    4. * MonsterAnnotation: 使用注解的方式来配置接口方法
    5. */
    6. public interface MonsterAnnotation {
    7. //添加monster
    8. /*
    9. 解读
    10. 1. 使用注解方式配置接口方法addMonster
    11. 2. 回顾xml如何配置
    12. INSERT INTO `monster`
    13. (`age`, `birthday`, `email`, `gender`, `name`, `salary`)
    14. VALUES (#{age}, #{birthday}, #{email}, #{gender}, #{name}, #{salary})
    15. 解读
    16. 1. useGeneratedKeys = true 返回自增的值
    17. 2. keyProperty = "id" 自增值对应的对象属性
    18. 3. keyColumn = "id" 自增值对应的表的字段
    19. */
    20. @Insert("INSERT INTO `monster` (`age`, `birthday`, `email`, `gender`, `name`, `salary`) " +
    21. "VALUES (#{age}, #{birthday}, #{email}, #{gender}, #{name}, #{salary})")
    22. @Options(useGeneratedKeys = true, keyProperty = "id", keyColumn = "id")
    23. public void addMonster(Monster monster);
    24. //根据id删除一个Monster
    25. /*
    26. xml文件中的配置
    27. DELETE FROM `monster` WHERE id = #{id}
    28. */
    29. @Delete("DELETE FROM `monster` WHERE id = #{id}")
    30. public void delMonster(Integer id);
    31. //修改Monster
    32. /*
    33. UPDATE `monster`
    34. SET `age`=#{age} , `birthday`= #{birthday}, `email` = #{email},
    35. `gender` = #{gender} , `name`= #{name}, `salary` = #{salary}
    36. WHERE id = #{id}
    37. */
    38. @Update("UPDATE `monster` " +
    39. "SET `age`=#{age} , `birthday`= #{birthday}, `email` = #{email}, " +
    40. "`gender` = #{gender} , `name`= #{name}, `salary` = #{salary} " +
    41. "WHERE id = #{id}")
    42. public void updateMonster(Monster monster);
    43. //查询-根据id
    44. /*
    45. xml配置
    46. */
    47. @Select("SELECT * FROM `monster` WHERE id = #{id}")
    48. public Monster getMonsterById(Integer id);
    49. //查询所有的Monster
    50. /*
    51. xml配置
    52. */
    53. @Select("SELECT * FROM `monster`")
    54. public List findAllMonster();
    55. }

    这样就是将一个MonsterMapper接口和MonsterMapper.xml配置文件和到一起

    当然我们不使用xml文件配置,那么也需要改一下mybatis-config.xml(有数据库配置文件,和需要的jdbc包)

    1. <mappers>
    2. <mapper class="com.hong.mapper.MonsterAnnotation"/>
    3. mappers>

    测试文件

    1. /**
    2. * @author 海绵hong
    3. * @version 1.0
    4. */
    5. public class MonsterAnnotationTest {
    6. //属性
    7. private SqlSession sqlSession;
    8. private MonsterAnnotation monsterAnnotation;
    9. @Before
    10. public void init() {
    11. //获取到sqlSession
    12. sqlSession = MyBatisUtils.getSqlSession();
    13. monsterAnnotation = sqlSession.getMapper(MonsterAnnotation.class);
    14. //返回的依然是一个接口的代理对象
    15. System.out.println("monsterAnnotation--" + monsterAnnotation.getClass());
    16. }
    17. @Test
    18. public void addMonster() {
    19. Monster monster = new Monster();
    20. monster.setAge(30);
    21. monster.setBirthday(new Date());
    22. monster.setEmail("kate6@qq.com");
    23. monster.setGender(1);
    24. monster.setName("狐狸精-100");
    25. monster.setSalary(1000);
    26. //使用在接口方法配置注解方式完成对DB操作
    27. monsterAnnotation.addMonster(monster);
    28. System.out.println("添加后monster-id-" + monster.getId());
    29. //如果是增删改, 需要提交事务
    30. if(sqlSession != null) {
    31. sqlSession.commit();
    32. sqlSession.close();
    33. }
    34. System.out.println("保存成功...");
    35. }
    36. @Test
    37. public void findAllMonster() {
    38. //使用接口配置注解的方式操作DB
    39. List allMonster = monsterAnnotation.findAllMonster();
    40. for (Monster monster : allMonster) {
    41. System.out.println("monster--" + monster);
    42. }
    43. if(sqlSession != null) {
    44. sqlSession.close();
    45. }
    46. System.out.println("查询成功...");
    47. }
    48. }

    注意事项和说明

    1. 如 果 是 通 过 注 解 的 方 式 , 就 不 再 使 用 MonsterMapper.xml 文 件 , 但 是 需 要 在
    mybatis-config.xml 文件中注册含注解的类 / 接口
    2. 使用注解方式 , 添加时 , 如果要返回自增长 id , 可以使用 @Option 注解 , 组合使用
    1. @Insert(value = "INSERT INTO `monster` (`age`, `birthday`, `email`, `gender`, `name`,
    2. `salary`) " +
    3. "VALUES (#{age}, #{birthday}, #{email}, #{gender}, #{name}, #{salary})")
    4. @Options(useGeneratedKeys = true, keyProperty = "id", keyColumn = "id")
    5. public void addMonster(Monster monster)

  • 相关阅读:
    【2023最新Java面试宝典】—— SpringBoot面试题(44道含答案)
    几道单调队列相关的题目
    SSL证书也会失效?什么情况下SSL证书会失效呢?
    Selenium 元素不能定位总结
    CSS笔记
    vite+vue3+ts项目集成vue-router、axios封装、sass、element-plus及icon(新增在线预览地址)
    [大话设计模式C++版] 第18章 如果再回到从前 —— 备忘录模式
    Go语言模拟康威生命游戏Conway‘s Game of Life
    中心经纬度计算周边8宫格GeoHash编码
    亿道丨三防平板丨加固平板丨三防加固平板丨改善资产管理
  • 原文地址:https://blog.csdn.net/weixin_54107527/article/details/127791230