当前位置: 首页 > 编程笔记 >

springboot快速整合Mybatis组件的方法(推荐)

太叔志尚
2023-03-14
本文向大家介绍springboot快速整合Mybatis组件的方法(推荐),包括了springboot快速整合Mybatis组件的方法(推荐)的使用技巧和注意事项,需要的朋友参考一下

Spring Boot简介

Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程。该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置。通过这种方式,Spring Boot致力于在蓬勃发展的快速应用开发领域(rapid application development)成为领导者。

原有Spring优缺点分析

Spring的优点分析

Spring是Java企业版(Java Enterprise Edition,JEE,也称J2EE)的轻量级代替品。无需开发重量级的Enterprise JavaBean(EJB),Spring为企业级Java开发提供了一种相对简单的方法,通过依赖注入和面向切面编程,用简单的Java对象(Plain Old Java Object,POJO)实现了EJB的功能。

Spring的缺点分析

虽然Spring的组件代码是轻量级的,但它的配置却是重量级的。一开始,Spring用XML配置,而且是很多XML配置。Spring 2.5引入了基于注解的组件扫描,这消除了大量针对应用程序自身组件的显式XML配置。Spring 3.0引入了基于Java的配置,这是一种类型安全的可重构配置方式,可以代替XML。

所有这些配置都代表了开发时的损耗。因为在思考Spring特性配置和解决业务问题之间需要进行思维切换,所以编写配置挤占了编写应用程序逻辑的时间。和所有框架一样,Spring实用,但与此同时它要求的回报也不少。

除此之外,项目的依赖管理也是一件耗时耗力的事情。在环境搭建时,需要分析要导入哪些库的坐标,而且还需要分析导入与之有依赖关系的其他库的坐标,一旦选错了依赖的版本,随之而来的不兼容问题就会严重阻碍项目的开发进度。

MyBatis

@

简介

优点

最大的优点是SQL语句灵活,适合调优情景,业务复杂情景

劣势

最大的劣势是不同数据库之间的迁移

引入mybatis组件

pom.xml中加入

<dependency>
 <groupId>mysql</groupId>
 <artifactId>mysql-connector-java</artifactId>
</dependency>
<dependency>
 <groupId>org.mybatis.spring.boot</groupId>
 <artifactId>mybatis-spring-boot-starter</artifactId>
 <version>2.1.1</version>
</dependency>

application.properties中加入

#dateSource
spring.datasource.driverClassName=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/test?serverTimezone=UTC&useUnicode=true&characterEncoding=utf8&useSSL=false
spring.datasource.username=root
spring.datasource.password=root
# mybatis
# 下划线转驼峰开启
mybatis.configuration.map-underscore-to-camel-case=true
# mapper扫描位置
mybatis.mapper-locations=classpath:mapper/*.xml

需要说明的是,我引入的mysql驱动为 com.mysql.cj.jdbc.Driver,而不是 com.mysql.jdbc.Driver。以下是一些参数的说明;

  • serverTimezone:该驱动需要指定某时区。
  • useUnicode:开启指定编码。
  • characterEncoding:指定读取数据库的编码,因为项目采用UTF-8,存取数据库信息时保持一致。
  • useSSL:是否建立SSL连接,我显示选的否,因为这要为服务器证书验证提供信任库,暂时没条件。

代码实战

本地的 mysql 版本为 5.7.20。

建表语句

CREATE TABLE USER_INFO
(
 user_id DECIMAL(10) PRIMARY KEY NOT NULL,
 user_name VARCHAR(20) DEFAULT "" NOT NULL
);
CREATE UNIQUE INDEX USER_INFO_user_id_uindex ON USER_INFO (user_id);
ALTER TABLE USER_INFO COMMENT = '用户基本信息表';

插入数据

INSERT INTO test.user_info (user_id, user_name) VALUES (1, '特朗普');
INSERT INTO test.user_info (user_id, user_name) VALUES (2, '唐纳德');

现在的项目路径为

在SpringBoot的入口类中加 @MapperScan 注解,以扫描 DAO 类,不用在每个dao接口加个@Mapper 注解。

package com.example;

import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
@MapperScan("com.example.dao")
public class DemoApplication {
 public static void main(String[] args) {
  SpringApplication.run(DemoApplication.class, args);
 }
}

注:如果没有分拆项目成微服务架构,或分布式架构,application主类中的@SpringBootApplication自动会扫描本包中的@Controller,@Service,@Resource等,是不需要浪费另一行@ComponentScan注解,配置路径的。

UserController.java

package com.example.controller;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import com.example.service.IUserService;
@Controller
@RequestMapping("user")
public class UserController {
 @Autowired
 private IUserService userService;
 @RequestMapping("/queryUser")
 @ResponseBody
 void queryUser() {
  this.userService.queryUser();
 }
}

IUserService.java

package com.example.service;

public interface IUserService {
 void queryUser();
}

UserServiceIml.java

package com.example.service;

import com.example.dao.UserDao;
import com.example.entity.UserEntity;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;
import java.util.List;

@Service("userService")
public class UserServiceIml implements IUserService {

 @Resource
 private UserDao userDao;

 @Override
 public void queryUser() {
  List<UserEntity> userList = this.userDao.queryUser();
  System.out.println("================");
  System.out.println(userList);
  System.out.println("================");
 }
}

注:如果是SSM架构过来的,这个@Resource注解可能比较陌生,因为我估计会和我之前一样用@Autowired,但是我是没有在dao层用 @Repository 注解的,之前用了在主类用了@MapperScan自动去扫描所有的dao,所以不能再用之前的@Autowired。

UserDao.java

package com.example.dao;
import com.example.entity.UserEntity;
import java.util.List;
public interface UserDao {
 List<UserEntity> queryUser();
}

UserEntity.java

package com.example.entity;
public class UserEntity {
 private long userId;
 private String userName;

 public long getUserId() {
  return userId;
 }

 public void setUserId(long userId) {
  this.userId = userId;
 }

 public String getUserName() {
  return userName;
 }
 public void setUserName(String userName) {
  this.userName = userName;
 }
 
 @Override
 public String toString() {
  return "UserEntity{" +
    "userId=" + userId +
    ", userName='" + userName + '\'' +
    '}';
 }
}

如果你运行不成功,请对比引入的包的版本,和数据库配置是否是根据你本地的,顺便看看注解是否和文中一样。

效果图如下;

注:如果是跟着本教程来的,因为一开始就引入了spring security,而新增的路径不在刚才的权限中,所以我给zs用户改成了user下的皆可访问。如果没有跟着之前配置spring security,无需理会如下内容

//http.authorizeRequests().antMatchers("/user/addUser").hasRole("AAA") 
http.authorizeRequests().antMatchers("/user/**").hasRole("AAA")

总结

以上所述是小编给大家介绍的springboot快速整合Mybatis组件的方法,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对小牛知识库网站的支持!如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!

 类似资料:
  • 本文向大家介绍5分钟快速学会spring boot整合Mybatis的方法,包括了5分钟快速学会spring boot整合Mybatis的方法的使用技巧和注意事项,需要的朋友参考一下 一、前言 记得刚接触SpringBoot时,大吃一惊,世界上居然还有这么省事的框架,立马感叹:SpringBoot是世界上最好的框架。哈哈! 下面这篇文章主要给大家介绍了关于springboot整合Mybatis。在

  • 我有一个包含100,000个集合的数组。每个集合包含1,000,000以下的自然数。我必须找到有序对的数量{m,n},其中0 例如,我有两个集合set1={1,2,4}set2={1,3}。5以下所有可能的有序数对是{1,2}、{1,3}、{1,4}、{2,3}、{2,4}和{3,4}。集合1中不同时存在的低于5的数的有序对是{1,3}、{2,3}和{3,4}。集合2中5以下缺失的有序对是{1,2

  • 本文向大家介绍SpringBoot整合mybatis结合pageHelper插件实现分页,包括了SpringBoot整合mybatis结合pageHelper插件实现分页的使用技巧和注意事项,需要的朋友参考一下 SpringBoot整合mybatis分页操作 SpringBoot整合Mybatis进行分页操作,这里需要使用Mybatis的分页插件:pageHelper, 关于pageHelper的

  • 本文向大家介绍Springboot整合activemq的方法步骤,包括了Springboot整合activemq的方法步骤的使用技巧和注意事项,需要的朋友参考一下 今天呢心血来潮,也有很多以前的学弟问到我关于消息队列的一些问题,有个刚入门,有的有问题都来问我,那么今天来说说如何快速入门mq。 一、首先说下什么是消息队列? 1.消息队列是在消息的传输过程中保存消息的容器。 二、为什么要用到消息队列?

  • 本文向大家介绍SpringBoot整合liquibase的实现方法,包括了SpringBoot整合liquibase的实现方法的使用技巧和注意事项,需要的朋友参考一下 LiquiBase 是一个用于数据库重构和迁移的开源工具,通过日志文件的形式记录数据库的变更,然后执行日志文件中的修改,将数据库更新或回滚到一致的状态。它的目标是提供一种数据库类型无关的解决方案,通过执行schema类型的文件来达到

  • 本文向大家介绍SpringBoot整合Swagger的方法示例,包括了SpringBoot整合Swagger的方法示例的使用技巧和注意事项,需要的朋友参考一下 依赖 配置类 启动类 在springBoot的启动类上添加一个注解即可配置成功: @EnableSwagger2 访问api的路径 http://ip/projectName/swagger-ui.html 注解说明 @Api 标注在类上,