MyBatis最佳实践:注解开发

devtools/2025/1/24 15:24:16/
  1. 注解:

    1. @Insert:添加
    2. @Update:修改
    3. @Delete:删除
    4. @Select:查询
    5. @Result:实现结果集封装
    6. @Results:可以和 @Reslult 一起使用,封装多个结果集
    7. @One:实现一对一和多对一的结果集封装
    8. @Many:实现一对多结果集封装
  2. MyBatis 注解不能实现动态SQL 

  3. 使用:

    1. SqlMapConfig.xml 配置文件
      <mappers><!-- 第一种方式:class引入接口,只能引入一个接口--><mapper class="com.mybatis.Dao.TeacherDao"/><!-- 第二种方法:针对包下边的所用接口--><package name="com.mybatis.Dao"/>
      </mappers>
    2. 编写注解:
      1. 增删改查:
        java">@Select("select * from user")
        <!--结果映射集  字段和数据库的字段一一对应-->
        @Results(id = "userMap" ,value = {@Result(property = "id",column = "id"),@Result(property = "username",column = "username"),@Result(property = "birthday",column = "birthday"),@Result(property = "sex",column = "sex"),@Result(property = "address",column = "address")
        })
        List<User> findAll();@Select("select * from user where id = #{id}")
        @ResultMap(value = "userMap")
        List<User> findById(Integer id);@Select("select * from user where username = #{name}")
        @ResultMap(value = "userMap")
        List<User> findByName(String name);@Update("update user set username = #{username},birthday = #{birthday},sex = #{sex},address = #{address} where id = #{id}")
        int update(User user);@Delete("delete from user where  id = #{id}")
        int delete(Integer id);@Insert("insert into user (username,birthday,sex,address) value(#{username},#{birthday},#{sex},#{address})")
        int insert(User user);
    3. 多对一注解查询:
      1. 立即加载:
        java">@Select("select student.*,teacher.Tname from student left join teacher on student.t_id = teacher.id")
        @Results(id = "StudentMap",value = {@Result(property = "id",column = "id"),@Result(property = "Sname",column = "Sname"),@Result(property = "sex",column = "sex"),@Result(property = "age",column = "age"),@Result(property = "t_id",column = "t_id"),@Result(property = "teacher.Tname",column = "Tname")
        })
        List<Student> SelectStudentTeacher();
      2. 延迟加载:
        java">@Select("select * from student")
        @Results(id = "StudentMap",value = {@Result(property = "id",column = "id"),@Result(property = "Sname",column = "Sname"),@Result(property = "sex",column = "sex"),@Result(property = "age",column = "age"),@Result(property = "t_id",column = "t_id"),@Result(property = "teacher",column = "t_id",one = @One(select = "com.mybatis.Dao.TeacherDao.findTeacherById"))
        })
        List<Student> SelectStudentTeacher();//teacherDao接口
        @Select("select * from teacher where id = #{t_id}")
        List<Teacher> findTeacherById(Integer t_id);
      3. 一对多注解查询:
        java">@Select("select * from teacher")
        @Results(id = "teacherMap",value = {@Result(property = "id",column = "id"),@Result(property = "Tname",column = "Tname"),@Result(property = "student",column = "id",many = @Many(select = "com.mybatis.Dao.StudentDao.selectStudentByTeacherId",fetchType = FetchType.LAZY))    //延迟加载
        })
        List<Teacher> selectTeacherStudent();//studentDao接口
        @Select("select * from student where t_id = #{id}")
        List<Student> selectStudentByTeacherId(Integer id);

http://www.ppmy.cn/devtools/153166.html

相关文章

前端缓存策略:强缓存与协商缓存深度剖析

通常我们利用缓存是提高用户体验、减少网络请求、提高页面加载速度。 正确使用缓存策略&#xff0c;能显著减少服务器负担&#xff0c;同时加速资源加载。 前端缓存主要有两种类型&#xff1a;强缓存和协商缓存。 一、强缓存&#xff08;Cache-Control & Expires&#x…

Java面试题2025-Mysql

1.什么是BufferPool&#xff1f; Buffer Pool基本概念 Buffer Pool&#xff1a;缓冲池&#xff0c;简称BP。其作用是用来缓存表数据与索引数据&#xff0c;减少磁盘IO操作&#xff0c;提升效率。 Buffer Pool由缓存数据页(Page) 和 对缓存数据页进行描述的控制块 组成, 控制…

【数据可视化】全国星巴克门店可视化

&#x1f9d1; 博主简介&#xff1a;曾任某智慧城市类企业算法总监&#xff0c;目前在美国市场的物流公司从事高级算法工程师一职&#xff0c;深耕人工智能领域&#xff0c;精通python数据挖掘、可视化、机器学习等&#xff0c;发表过AI相关的专利并多次在AI类比赛中获奖。CSDN…

FPGA实现任意角度视频旋转(二)视频90度/270度无裁剪旋转

本文主要介绍如何基于FPGA实现视频的90度/270度无裁剪旋转&#xff0c;关于视频180度实时旋转&#xff0c;请见本专栏前面的文章&#xff0c;旋转效果示意图如下&#xff1a; 为了实时对比旋转效果&#xff0c;采用分屏显示进行处理&#xff0c;左边代表旋转前的视频在屏幕中…

【负载均衡式在线OJ】加载题目信息(文件版)

目录 如何读取文件 -- 常见流程 代码 如何读取文件 -- 常见流程 在C中使用 std::ifstream来打开文件流是一个常见的操作&#xff0c;用于创建一个输入文件流&#xff0c;并尝试打开名为 question_list的文件。if (!in.is_open())&#xff1a;检查文件是否成功打开。如果文件未…

靠右行驶数学建模分析(2014MCM美赛A题)

笔记 题目 要求分析&#xff1a; 比较规则的性能&#xff0c;分为light和heavy两种情况&#xff0c;性能指的是 a.流量与安全 b. 速度限制等分析左侧驾驶分析智能系统 论文 参考论文 两类规则分析 靠右行驶&#xff08;第一条&#xff09;2. 无限制&#xff08;去掉了第一条…

【行空板K10】项目实践案例征集 跨学科案例 研究蒸发量

目录 项目来源 项目简介 项目知识点 项目原理 物联网硬件架构 硬件简介 硬件接线原理 硬件接线实物 实验流程 实验注意事项 程序截图 项目数据表 总结 本文首发于DF创客社区&#xff1a;项目实践案例征集 跨学科案例 行空板K10 研究蒸发量 DF创客社区https://mc.d…

计算机网络之运输层

本文章目录结构出自于《王道计算机考研 计算机网络_哔哩哔哩_bilibili》 04 传输层 在网上看到其他人做了相关笔记&#xff0c;就不再多余写了&#xff0c;直接参考着学习吧。 王道考研 计算机网络笔记 第五章&#xff1a;传输层_王道计算机网络传输层_Baret-H的博客-CSDN博…