SpringBoot入门:SpringBoot+MySQL+MyBatis初级(含项目结构)

a.比较MyBatis和Hibernate

在管理系统时代,首先是实现业务逻辑,然后才是性能,所以Hibernate在当时是主流。

在移动互联网时代,MyBatis是首选,不屏蔽SQL,程序员可以自己制定SQL规则,能更加精确定义SQL,从而优化性能更符合、高并发,大数据,高性能,高响应的要求。

b.开发接口写实体类

        实体类好处就是,在IDE和编译器的支持下可以避免一切笔误,并且和语言无缝衔接。当然性能可能会有点损失,因为查询必然是查出所有字段。当然你也可以建个字段少的实体类,不过一般来说这点查询效率的损失不是事。
      不用的好处就是,对于动态类型或者弱类型语言没办法编译期检查,有没有这东西都一样,而且返回的查询结果可以随意处理,删个字段,加个字段啥的都很方便,封装dao时候要做的处理也很少,不像各大框架要写那么细。
(个人认为:如果用的是java,而且可以用hibernate/mybatis或者类似的框架,那么 用实体类 一点好处都 没有 )

    1、所有属性为private
    2、提供默认构造方法
    3、提供getter和setter
    4、实现serializable接口

 

 

1.创建个webapp工程,先写pom.xml(注意:pom严格控制缩进,空格,可以拿去notepad++区分空格和tab,tab会成-->)

spring-boot-starter-parent:统一各种jar的版本号,避免了版本不一致而出现的问题。所以,引入其他的依赖就可以省略版本号spring-boot-starter-web:自动嵌入tomcat容器

<?xml version="1.0" encoding="UTF-8"?>
#下面个三行,请注意,多了空格会出问题
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
	<modelVersion>4.0.0</modelVersion>
 
	<groupId>com.ocean</groupId>
	<artifactId>springboot-mybatis-demo</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<packaging>jar</packaging>
 
	<name>springboot-mybatis-demo</name>
	<description>Demo project for Spring Boot</description>
 
#加
   <parent>
     <groupId>org.springframework.boot</groupId>
     <artifactId>spring-boot-starter-parent</artifactId>
     <version>1.5.10.RELEASE</version>
   </parent>
 #加
	<properties>
		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
		<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
		<java.version>1.8</java.version>
	</properties>
 #加
	<dependencies>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-jdbc</artifactId>
		</dependency>
		<dependency>
			<groupId>org.mybatis.spring.boot</groupId>
			<artifactId>mybatis-spring-boot-starter</artifactId>
			<version>1.3.1</version>
		</dependency>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-web</artifactId>
		</dependency>
 
		<dependency>
			<groupId>mysql</groupId>
			<artifactId>mysql-connector-java</artifactId>
			<version>5.1.6</version>
		</dependency>

         <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
	</dependencies>
 
	<build>
		<plugins>
			<plugin>
			    <groupId>org.springframework.boot</groupId>
			    <artifactId>spring-boot-maven-plugin</artifactId>
			</plugin>
		</plugins>
	</build>

    <repositories>
    <repository>
      <id>public</id>
      <name>aliyun nexus</name>
      <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
      <releases>
        <enabled>true</enabled>
      </releases>
    </repository>
  </repositories>

  <pluginRepositories>
    <pluginRepository>
      <id>public</id>
      <name>aliyun nexus</name>
      <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
      <releases>
        <enabled>true</enabled>
      </releases>
      <snapshots>
        <enabled>false</enabled>
      </snapshots>
    </pluginRepository>
  </pluginRepositories>
</project>

spring-boot-starter-parent主要提供了如下默认配置:

    1.java版本默认使用1.8

    2.编码格式默认使用utf-8

    3.提供Dependency Management进行项目依赖的版本管理

    4.默认的资源过滤与插件管理

2.在src\main\resources下创建application.yml(严格控制缩进)

(没有resources的创建:main下创建文件夹resources,并且make directory as Resources Root

    没有java的创建:main下创建文件夹java,并且make directory as Sources Root。然后再创建包package)

    注意:需要填写信息时请在冒号后面空格,否则数据无效

spring:
  datasource:
    url: jdbc:mysql://localhost:3306/test?characterEncoding=utf-8&useSSL=false
    username: root
    password: 123456
    driver-class-name: com.mysql.jdbc.Driver
mybatis:
  mapper-locations: classpath*:mapper/*Mapper.xml
  type-aliases-package: com.yeexun.entity

3.准备mysql

CREATE TABLE `t_msg` (
  `id` int(11) NOT NULL,
  `message` varchar(255) DEFAULT NULL COMMENT '信息',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

insert into t_msg VALUES (1,"hello SpringBoot");

3.构建项目目录,我构建了一个经典的web项目目录结构,entity实体类(别名: model层 ,domain层
用途:实体层,用于存放我们的实体类,与数据库中的属性值基本保持一致,实现set和get的方法)、mapper映射(dao层,XML文件的抽象类)、service接口、impl接口实现、controller业务访问。resources/mapper包用于存放xml

4.构建数据库对应的实体类TMsg,这个类放在entity

package com.yeexun.entity;

import lombok.Data;

import java.io.Serializable;
@Data
public class TMsg implements Serializable {
    private Integer id;

    private String message;
}

5.Mapper接口和xml文件

package com.yeexun.mapper;

import com.yeexun.entity.TMsg;
import org.apache.ibatis.annotations.Mapper;

@Mapper
public interface TMsgMapper {
    public TMsg findById(Integer id);
}

#{}:相当于JDBC中的PreparedStatement

${}:是输出变量的值

简单说,#{}是经过预编译的,是安全的; ${}是未经过预编译的,仅仅是取变量的值,是非安全的,存在SQL注入。

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.yeexun.mapper.TMsgMapper">
    <select id="findById" resultType="com.yeexun.entity.TMsg">
        SELECT id,message from t_msg WHERE id = #{id}
    </select>
</mapper>

Service的接口及实现

package com.yeexun.service;

import com.yeexun.entity.TMsg;

public interface TMsgService {
    public TMsg findById(Integer id);
}
package com.yeexun.service.impl;

import com.yeexun.entity.TMsg;
import com.yeexun.mapper.TMsgMapper;
import com.yeexun.service.TMsgService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

@Service
public class TMsgServiceImpl implements TMsgService {

    @Autowired
    private TMsgMapper tMsgMapper;

    @Override
    public TMsg findById(Integer id) {
        return tMsgMapper.findById(id);
    }
}

Controller层

package com.yeexun.controller;

import com.yeexun.entity.TMsg;
import com.yeexun.service.TMsgService;
import org.apache.ibatis.annotations.Param;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequestMapping("/msg")
public class TMsgController {
    @Autowired
    private TMsgService tMsgService;

    @GetMapping("/getMsg")
    public String getMsg(@Param("id") Integer id){
        TMsg tMsg = tMsgService.findById(id);
        return tMsg.toString();
    }
}

启动类

package com.yeexun;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class SpringBootMybatisMysqlApplication {
    public static void main(String[] args) {
        SpringApplication.run(SpringBootMybatisMysqlApplication.class, args);
    }
}

结构如图(application在第一层包内)

结果如图

其余删除 修改 插入见下面的文章

https://blog.youkuaiyun.com/baidu_36216018/article/details/79466935 

<think>嗯,用户问怎么高效学习Spring Boot框架。首先,我需要回想一下自己学习Spring Boot的经历,或者常见的建议。可能先要掌握Java基础,特别是Spring框架,因为Spring Boot是建立在Spring之上的。然后,学习Spring Boot的自动配置、起步依赖这些核心特性。用户可能已经有一定的Java基础,但可能需要巩固Spring的相关知识,比如IoC、AOP之类的。 接下来,应该考虑学习路径。比如,先学官方文档,因为官方文档通常最权威,而且Spring Boot的文档写得不错。然后实践项目,通过做项目来加深理解。可能还要推荐一些书籍或者在线课程,比如《Spring Boot实战》之类的。另外,社区资源也很重要,比如Stack Overflow、GitHub上的开源项目,或者中文社区如掘金、思否。 还要考虑常见的工具和生态整合,比如Spring Data JPA、Spring Security、Spring Cloud,这些在项目中常用到。可能用户想知道如何整合数据库、安全框架或者微服务。所以学习这些模块的使用方法也很重要。 另外,调试和问题解决也是学习的一部分。比如,如何查看自动配置的结果,使用Actuator监控应用,或者通过日志排查问题。可能用户遇到过配置不生效的情况,这时候需要知道怎么排查。 然后,测试部分也不能忽视,单元测试、集成测试在Spring Boot中如何编写,使用MockMvc或者Testcontainers等工具。 还有,代码实践,比如创建简单的RESTful API,逐步增加功能,使用不同的数据库,加入安全验证,甚至构建微服务。通过实际项目来应用所学知识,这样更高效。 可能用户是自学,或者已经有一定经验但想提升效率。需要分阶段建议,从基础到高级,逐步深入。同时,强调实践和理论结合,避免只看不练。 还要考虑资源推荐,比如视频教程、书籍、博客、开源项目,这些资源的选择也很重要。优质的资源能提高学习效率,避免走弯路。 最后,持续学习,关注Spring Boot的更新,参与社区讨论,写博客总结,都是巩固知识的好方法。可能用户需要长期的学习计划,而不仅仅是快速入门。 总之,整理出一个结构化的学习路线,涵盖基础知识、核心概念、实践项目、工具使用、调试测试、资源推荐等方面,帮助用户高效学习Spring Boot。</think>学习 Spring Boot 的高效方法可以分为以下几个阶段,结合理论与实践,逐步深入: --- ### **1. 前置知识巩固** - **Java 基础**:掌握面向对象、集合、多线程、反射等核心概念。 - **Spring 基础**:理解 IoC(控制反转)、AOP(面向切面)、Spring MVC 等原理(推荐《Spring 实战》)。 - **Maven/Gradle**:熟悉依赖管理、项目构建工具。 - **数据库与 SQL**:了解 MySQL、PostgreSQL 等关系型数据库,以及 JDBC 基本操作。 --- ### **2. 快速入门 Spring Boot** - **官方文档**:从 [Spring Boot 官方文档](https://spring.io/projects/spring-boot) 开始,重点阅读: - **核心特性**:自动配置(Auto-Configuration)、起步依赖(Starter Dependencies)、内嵌容器(Tomcat/Jetty)。 - **配置文件**:`application.properties`/`application.yml` 的使用。 - **搭建第一个项目**: - 使用 [Spring Initializr](https://start.spring.io/) 生成项目骨架。 - 编写简单的 RESTful API(`@RestController`, `@GetMapping`)。 --- ### **3. 系统学习核心模块** - **Web 开发**: - 掌握 `@RestController`、`@RequestMapping`、参数校验(Hibernate Validator)。 - 静态资源处理、模板引擎(Thymeleaf)或前后端分离方案。 - **数据访问**: - Spring Data JPA:实体类注解(`@Entity`)、Repository 接口(`JpaRepository`)。 - MyBatis 整合:`@Mapper` 与 XML 配置。 - 事务管理(`@Transactional`)。 - **安全控制**: - Spring Security:认证(Authentication)与授权(Authorization)。 - JWT 整合实现无状态鉴权。 - **其他常用模块**: - 缓存(`@Cacheable` + Redis)。 - 消息队列(Spring Boot + RabbitMQ/Kafka)。 - 邮件发送(`JavaMailSender`)。 --- ### **4. 实践驱动学习** - **分阶段项目实战**: 1. **初级项目**:博客系统(用户管理、文章增删改查)。 2. **中级项目**:电商平台(商品管理、订单、支付模拟)。 3. **高级项目**:微服务架构(Spring Cloud + Spring Boot,服务拆分、注册中心、网关)。 - **开源项目参考**: - GitHub 搜索 `spring-boot-demo` 或 `spring-boot-best-practice`。 - 学习企业级项目架构(如 [Pig](https://gitee.com/log4j/pig))。 --- ### **5. 调试与问题排查** - **日志分析**:配置 `Logback`/`Log4j2`,合理使用 `@Slf4j` 输出日志。 - **Actuator 监控**:启用 `/actuator` 端点监控应用健康状态。 - **自动配置原理**: - 使用 `@Conditional` 注解的条件装配机制。 - 通过 `spring-boot-autoconfigure` 源码理解默认配置。 - **常见问题**: - 依赖冲突:`mvn dependency:tree` 分析依赖树。 - 配置优先级:命令行参数 > 配置文件 > 默认值。 --- ### **6. 高效工具与资源** - **开发工具**: - IDE:IntelliJ IDEA(集成 Spring 支持)。 - API 测试:Postman 或 Swagger UI。 - 数据库管理:DBeaver 或 IDEA 内置工具。 - **学习资源**: - **书籍**:《Spring Boot 编程思想》(小马哥)、《Spring Boot 实战》。 - **视频**:B 站尚硅谷/雷神的 Spring Boot 教程。 - **社区**:Stack Overflow、掘金、Spring 官方论坛。 - **进阶方向**: - 源码分析:Spring Boot 启动流程、自动配置加载机制。 - 性能优化:连接池配置、JVM 调优、异步处理(`@Async`)。 --- ### **7. 持续提升** - **参与开源**:贡献代码或文档到 Spring Boot 生态项目。 - **技术博客**:总结学习笔记(如搭建个人博客输出技术文章)。 - **关注更新**:订阅 Spring 官方博客,了解新版本特性(如 Spring Boot 3.x 的 Native 支持)。 --- ### **学习路线示例** ``` 1. 环境搭建 → 2. 第一个 REST API → 3. 整合数据库 → 4. 实现用户认证 → 5. 添加缓存/消息队列 → 6. 部署到云服务器 → 7. 微服务改造 → 8. 源码探究 ``` --- **关键点**:避免“只看不写”,通过小步快跑的方式逐步迭代项目功能,遇到问题优先查阅官方文档,再结合社区经验解决。保持对技术原理的好奇心(如“为什么 Spring Boot 不需要 XML 配置?”),深入源码理解设计思想。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值