热门标签 | HotTags
当前位置:  开发笔记 > 数据库 > 正文

MyBatis使用注解开发实现过程详解

这篇文章主要介绍了MyBatis使用注解开发实现过程详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

使用注解开发

1、面向接口编程

面向接口编程的根本原因:解耦,可扩展,提高复用,分层开发中、上层不用管具体的实现,大家都遵守共同的标准,使得开发变得容易,规范性好

2、使用注解开发

注解在接口上实现

@Select(value = "select * from user")
List getUsers();

需要在核心配置文件中绑定接口



  

测试

public class UserMapperTest {
  @Test
  public void test(){
    SqlSession sqlSession = MyBatisUtils.getSqlSession();
    //底层主要应用反射
    UserMapper mapper = sqlSession.getMapper(UserMapper.class);
    List users = mapper.getUsers();
    for (User user : users) {
      System.out.println(user);
    }
    sqlSession.close();
  }
}

本质:反射机制实现

底层:动态代理

3、CRUD

我们可以在工具类创建的时候实现自动提交事务

public static SqlSession getSqlSession(){
  return sqlSessionFactory.openSession(true);
}

编写接口,增加注解

public interface UserMapper {
  @Select(value = "select * from user")
  List getUsers();

  //方法存在多个参数,所有的参数前面必须加上@Param注解
  @Select("select * from user where id = #{id} or name = #{name}")
  User getUserByID(@Param("id")int id,@Param("name")String name);

  @Insert("insert into user(id,name,pwd) values (#{id},#{name},#{password})")
  int addUser(User user);

  @Update("update user set name = #{name},pwd = #{password} where id = #{id}")
  int updateUser(User user);

  @Delete("delete from user where id = #{uid}")
  int deleteUser(@Param("uid") int id);
}

测试类

【注意:我们必须要将接口注册绑定到我们的核心配置文件中】

关于@Param()注解

  • 基本类型的参数或者String类型,需要加上
  • 引用类型不需要加
  • 如果只有一个基本类型的化,可以忽略,但是建议都加上
  • 我们在SQL中引用的就是我们这里的@Param()中设定的属性名

#{} ${}区别

  • {}是预编译处理,${}是字符串替换
  • mybatis在处理#{}时,会将sql中的#{}替换为?号,调用PreparedStatement的set方法来赋值;mybatis在处理${}时,就是把${}替换成变量的值
  • 使用#{}可以有效的防止SQL注入,提高系统安全性

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。


推荐阅读
  • API网关作为微服务架构中的关键组件,扮演着系统与外部世界交互的唯一接口角色。它不仅封装了系统的内部复杂性,还为不同客户端提供了个性化的API接口。本文将探讨API网关的重要性及其核心功能。 ... [详细]
  • 尽管PHP是一种强大且灵活的Web开发语言,但开发者在使用过程中常会陷入一些典型的陷阱。本文旨在列出PHP开发中最为常见的10种错误,并提供相应的预防建议。 ... [详细]
  • Pikachu SQL注入实战解析
    作为一名网络安全新手,本文旨在记录个人在SQL注入方面的学习过程与心得,以备后续复习之用。通过逐步深入的学习,力求掌握每个知识点后再向下一个挑战迈进。 ... [详细]
  • 深入解析Apache SkyWalking CVE-2020-9483 SQL注入漏洞
    本文详细探讨了Apache SkyWalking中的SQL注入漏洞(CVE-2020-9483),特别是其影响范围、漏洞原因及修复方法。Apache SkyWalking是一款强大的应用性能管理工具,广泛应用于微服务架构中。然而,该漏洞使得未经授权的攻击者能够通过特定的GraphQL接口执行恶意SQL查询,从而获取敏感信息。 ... [详细]
  • 基于Java的学生宿舍管理系统设计
    本论文探讨了如何利用Java技术设计和实现一个高效的学生宿舍管理系统。该系统旨在提高宿舍管理的效率,减少人为错误,同时增强用户体验。通过集成用户认证、数据管理和查询功能,系统能够满足学校宿舍管理的多样化需求。 ... [详细]
  • 本文介绍了MySQL数据库的安全权限管理思想及其制度流程,涵盖从项目开发、数据库更新到日常运维等多个方面的详细流程控制,旨在通过严格的流程管理和权限控制,有效预防数据安全隐患。 ... [详细]
  • 本文详细解析了 SUCTF 2019 中的 EasySQL 题目,重点探讨了堆叠注入与 UNION 注入的区别及其应用条件。 ... [详细]
  • Waymo大规模采购FCA车型,软银巨资加码Cruise,无人驾驶商业化步伐加快
    近期,无人驾驶领域迎来两项重大进展:软银以22.5亿美元投资通用汽车旗下的Cruise Automation,同时Waymo宣布向菲亚特克莱斯勒采购62000辆厢式车。这些动向不仅提升了行业信心,也为无人驾驶技术的商业化铺平了道路。 ... [详细]
  • .NET Core中的一个接口多种实现的依赖注入与动态选择看这篇就够了
    .NETCore中的一个接口多种实现的依赖注入与动态选择看这篇就够了最近有个需求就是一个抽象仓储层接口方法需要SqlServer以及Oracle两种实现方式,为了灵活我在依赖注入的 ... [详细]
  • 文章目录17、less17-UpdateQuery-Errorbased-String18、less18-HeaderInjection-ErrorBased-string19、l ... [详细]
  • 解决MySQL错误2002:无法建立数据库连接
    本文详细描述了在Digital Ocean服务器上托管的多个WordPress站点突然出现数据库连接错误的情况,并提供了有效的解决方案。 ... [详细]
  • 深入解析数据库连接池的类型及参数配置
    本文详细介绍了数据库连接池的三大类型及其各自的特性,并深入探讨了连接池的关键参数配置,帮助开发者更好地理解和利用数据库连接池技术。 ... [详细]
  • ZKX 与 RedStone 达成数据集成合作
    ZKX 与 RedStone 宣布合作,共同推进数据集成,为用户带来更加多样化和可靠的价格数据源。 ... [详细]
  • .NET Core 与 MySQL 的集成:API 和 Entity Framework Core 的应用
    本文介绍了如何在.NET Core 2.2环境中构建一个基于API的应用,并通过Entity Framework Core (EF Core) 连接MySQL数据库。包括项目的创建、必要的NuGet包安装以及数据库上下文的配置。 ... [详细]
  • 正则表达式是一种强大的文本匹配工具,但在不当使用时,也可能成为安全漏洞的源头,特别是当它们被恶意利用以触发拒绝服务(DoS)攻击时。本文将深入探讨正则表达式如何成为攻击者的目标,并提供防范策略。 ... [详细]
author-avatar
l彡id夏日阳光
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有