【Java从0到架构师】MyBatis - dao,nginx实战pdf
2021/9/6 7:07:04
本文主要是介绍【Java从0到架构师】MyBatis - dao,nginx实战pdf,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
Gitee 代码:dao
参考资料:https://mybatis.org/mybatis-3/zh/java-api.html
使用 MyBatis 实现 dao 层的几种方式
===========================================================================================
方法1:自定义 dao 实现类,在实现中调用 SqlSession 的相关方法(使用 XML)
方法2:只定义 dao 接口类,SqlSession 的 getMapper 方法生成 dao 的代理对象(使用 XML)
方法3:只定义 dao 接口类,SqlSession 的 getMapper 方法生成 dao 的代理对象(使用 注解)
目前注解的功能并没有 XML 强大,所以也可以 XML + 注解混合使用
自定义实现类,XML 实现 dao 层
======================================================================================
示例项目:MyBatis_dao_01
这种做法十分冗余,会有大量的重复代码,不推荐
只定义接口类,getMapper + XML 实现 dao 层
==================================================================================================
示例项目:MyBatis_dao_02
有 2 个配置要求:
-
mapper 的 namespace 必须是 dao 接口类的 全类名
-
mapper 中 select、update、insert、delete 的 id 值必须和 dao 的方法名一致
如果 update、insert、delete 方法的返回值是 Boolean 类型
-
代理对象内部是影响记录数大于 0 就返回 true
-
参考源码:
org.apache.ibatis.binding.MapperMethod.rowCountResult
方法
只定义接口类,getMapper + 注解实现 dao 层
================================================================================================
示例项目:MyBatis_dao_03
首先要在 mybatis-config.xml 中配置 dao 的位置
-
方法 1:需要将所有 dao 的类一个一个引入```
-
方法 2:可以引入一个包下所有的 dao 类```
@Select、@Insert、@Update、@Delete - 执行 DML 语句
@Select
、@Insert
、@Update
、@Delete
、@SelectKey
:用于传入 SQL 语句执行 DML 操作
@Insert("INSERT INTO skill(name, level) VALUES (#{name}, #{level})") boolean save(Skill skill); @Update("UPDATE skill SET name = #{name}, level = #{level} WHERE id = #{id}") boolean update(Skill skill); @Delete("DELETE FROM skill WHERE id = #{id}") boolean remove(Integer id); @Select("SELECT * FROM skill WHERE id = #{id}") Skill get(Integer id);
完整示例代码
@Param、@Options、@SelectKey、@CacheNamespace
@Param
:设置参数名
@Select("SELECT * FROM skill LIMIT #{start}, #{size}") List<Skill> listByStartAndSize(@Param("start") int start, @Param("size") int size);
@Options
:设置其他属性值
@SelectKey(statement = "SELECT LAST_INSERT_ID()", keyProperty = "id", before = false, resultType = Integer.class) @Options(useGeneratedKeys = true, keyProperty = "id") @Insert("INSERT INTO skill(name, level) VALUES (#{name}, #{level})") boolean save(Skill skill);
@CacheNamespace
:对应 mapper 文件中设置 <cache>
@CacheNamespace(flushInterval = 600000, size = 512, readWrite = true) public interface SkillDao { // code... }
完整示例代码
@Results、@ResultMap、@One、@Many - 多表懒加载
@Results
、@ResultMap
:对应 <resultMap>
@Result
:对应 <id>
、<result>
@One
对应 <association>
、@Many
对应 <collection>
@Select("SELECT * FROM person WHERE id = #{id}") @Results(id = "get", value = { @Result(property = "id", column = "id", id = true), @Result(property = "name", column = "name"), /* 身份证 */ @Result( property = "idCard", column = "id", one = @One(fetchType = FetchType.LAZY, select = "com.mj.dao.IdCardDao.getByPerson") ), /* 银行卡 */ @Result( property = "bankCards", column = "id", many = @Many(fetchType = FetchType.LAZY, select = "com.mj.dao.BankCardDao.listByPerson") ), /* 工作 */
这篇关于【Java从0到架构师】MyBatis - dao,nginx实战pdf的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-29RocketMQ底层原理资料详解:新手入门教程
- 2024-11-29RocketMQ源码资料解析与入门教程
- 2024-11-29[开源]6.1K star!这款电视直播源神器真的太赞啦!
- 2024-11-29HTTP压缩入门教程:轻松提升网页加载速度
- 2024-11-29JWT开发入门指南
- 2024-11-28知识管理革命:文档软件的新玩法了解一下!
- 2024-11-28低代码应用课程:新手入门全攻略
- 2024-11-28哪些办公软件适合团队协作,且能够清晰记录每个阶段的工作进展?
- 2024-11-28全栈低代码开发课程:零基础入门到初级实战
- 2024-11-28拖动排序课程:轻松掌握课程拖动排序功能