springboot+mybatis常用注解

springboot+mybatis常用注解

说到spring当然是要了解spring的两大特性IoC和AOP了

IoC和AOP

IoC英文全称Inversion of Control,即控制反转。简单理解:在原本JAVA开发中创建对象就是用new关键字来创建对象,这会导致对象的依赖关系非常复杂不好管理。而IoC就是将创建对象的权限放给spring,由spring统一管理。IoC容器:具有依赖注入功能的容器,IoC容器负责实例化、定位、配置应用程序中的对象并建立这些对象之间的依赖。

AOP英文全称Aspect-Oriented Programming,即面向切面编程。就是将重复的代码抽离出来放在一个类里集中管理如异常处理之类的,并且可以动态增加删减功能大大减少了程序员的重复工作。

三层架构

1、Dao层 全称为Data Access Object,负责于数据库进行联络,完成增删查改的功能。提供接口给Service层。

2、Service层 调用Dao层提供的接口,业务处理,为Controller层提供接口。

3、Controller层 负责请求转发,接收用户传来的参数,通过调用Service层提供的接口,实现将数据转发给Service层处理。接收Service的返回值,再转发给用户。 ———————————————— 版权声明:本文为CSDN博主「小绵杨Yancy」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。 原文链接:Spring框架三层架构(dao、service和controller)注解注入 实现简易登录功能_三层架构中简单的login功能_小绵杨Yancy的博客-CSDN博客

@Controller

控制层注解,接收前端发起的请求并将任务传递给指定的Service进行数据处理,然后返回前端需要的数据。

@RestController

这个注解相当于@Controller和@ResponseBody,@Controller返回的是一个字符串大多用于页面跳转,当然跳转代码得用JS在前端写,@RestController将返回一个对象,然后将这个对象转化成JSON字符串并返回这样前端就可以看到响应的JSON数据,即使前端没有对应的元素与之对应(这种情况大多是因为后端的实体类属性名与前端的属性名不同导致无法对应)。

@Service

服务层注解一般写Service层的代码大多先写一个XXXService interface接口继承IService这个接口,这个接口是MyBatisPlus的接口其中包含了一些对于数据库操作的常用方法:

//批量保存以事务形式向数据库写入数据
boolean saveBatch(Collection<T> entityList, int batchSize);
//删除
 default boolean remove(Wrapper<T> queryWrapper)
     ...

接着谈Service之后我们需要写一个XXXServiceImpl类实现上述接口(也可以继承ServiceImpl这个MybatisPlus提供的类简化开发,如果上面的接口继承了IService,那下面也要继承ServiceImpl这个类,不然就自己重写那一堆方法),此类就是写主要业务逻辑的地方controller层通过调用Service层的方法实现数据处理。

@Mapper

Dao层注解是@Mapper,MybatisPlus提供了一个BaseMapper接口。Dao层就是用于与数据库进行联系的层,如果有特殊的查询需要也可以在Mapper层自己写一个方法用于执行定制的SQL语句Service层进行处理与返回的数据不仅是Controller层提供的也有Dao层提供的。Dao层通过与数据库的联络完成Service层所需要的增删改查工作。

@RequestMappering("/xxx")

将HTTP请求映射到映射到Controller层。大多用于Controller层的类上用于分类请求,如果写了这个注解则这个Controller层的方法的请求都是带有这个路径的

其他注解还有@GetMappering,@PostMappering 等这些注解写在方法上,前端的请求路径自动与之匹配找到合适的Controller。

@ServletComponentScan

在@SpringBootApplication注解的类(即spingboot的启动类)上使用@ServletComponentScan注解后,Servlet(控制器)、Filter(过滤器)、Listener(监听器)可以直接通过@WebServlet、@WebFilter、@WebListener注解自动注册到Spring容器中,无需其他代码。

@Component

将该类注册为spring的一个Bean交给Spring进行管理

@Autowired

自动注入,用于实例化一个Service然后操作这个Service下的方法

Mybatis-Plus

首先导入依赖,在pom.xml文件的dependencies下写入并刷新

        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
            <version>3.4.2</version>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.28</version>
        </dependency>

配置Mybatis设置,在 /resources/applicstion.yml中写入

server:
  port: 8080 #服务器端口号
spring:
  application:
    name: reggie_take_out
  datasource:
    druid:
      driver-class-name: com.mysql.cj.jdbc.Driver #驱动
      url: url?xxx&xxx
      #xxx表示连接条件,综述如下
#1、serverTimezone=Asia/Shanghai,即时区设置,上海时间即东八区,高版本的mysql需要设置为 GMT%2B8(GMT+8)
#2、useUnicode=true 使用unicode 编码
#3、characterEncoding=utf8 数据库连接字符集
#4、useSSL=false 是否使用 ssl
#5、tinyInt1isBit=true 转换为 tinyint(1) 转换为 boolean ,否则为 int
#6、allowMultiQueries=true 是否允许多行查询,在批量更新数据时,update 语句使用分号(;)进行连接,此时则需要配置运行多行查询。
#7、rewriteBatchedStatements=true 批处理时需要设置该参数,在mysql5.1.13以上版本才能使用,对 update/insert/delete 都可以生效。数据量大时,消耗时间 jdbc batch < mybatis batch < foreach 循环。
#8、useAffectedRows=true,默认为false。是否使用影响行数,默认为找的所有修改行数,即false。在update 的情况下,更新3条,如果只有两条有变化,则返回2(useAffectedRows=true),否则返回3.
#9、defaultFetchSize=10000 默认获取条数
#10、zeroDateTimeBehavior=convertToNull 默认时间转换为null,避免转换报错。0000-00-00 时间转换为 null 
​
作者:斜月
链接:https://juejin.cn/post/7022925130477076487
来源:稀土掘金
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
      username: username
      password: password
mybatis-plus:
  configuration:
    #在映射实体或者属性时,将数据库中表名和字段名中的下划线去掉,按照驼峰命名法映射
    map-underscore-to-camel-case: true
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
  global-config:
    db-config:
      id-type: ASSIGN_ID

MybatisPlus提供了相当丰富的操作数据库的方法,让我们基本告别SQL语句,用了就回不去了。

LambdaQueryWrapper

这个类是一个支持Lambda表达式的条件构造器常用方法有

//构造条件构造器        
LambdaQueryWrapper<User> lambdaQueryWrapper = new LambdaQueryWrapper<>();
//eq匹配查询即SQL里的WHERE userId=xxx
lambdaQueryWrapper.eq(User::getId,user.getId());
//根据ID降序排列
lambdaQueryWrapper.orderByDesc(user.getId());
//相似查询
lambdaQueryWrapper.like()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值