SpringBoot学习笔记-01

SpringBoot

1. SpringBoot的作用

     SpringBoot是默认整合了Spring、SpringMVC及相关常用框架的一个综合性框架,大量的减少了相关的配置,使得创建项目和使用变得更加简单。在常规配置方面,SpringBoot的思想是“约定大于配置”,即:大多数开发者都会使用某种配置方式的话,则SpringBoot就会直接配置成那个样子,然后,开发者在使用SpringBoot时就不用再进行相关配置,只需要知道已经被配置为那个样子了就可以了!

2.创建SpringBoot项目

1.打开浏览器,访问 https://start.spring.io,并填写相关配置,可以同时选择相关依赖,配置完成后,点击【Generate the project】即可生成项目

2.项目下载结束后,将其放在eclipse工作空间中,并导入,注意,此处导入为【Existing Maven Projects

3.导入成功后,初始项目结构如下图

此时需要等待其下载所需要的maven配置,因此此时电脑必须能正常连接maven服务器,依赖下载结束后,项目结构正常。

    

3.SpringBoot的HelloWord

       在【src/main/resources】下默认已经存在【static】的文件夹该文件是SpringBoot项目用于存放静态资源的文件夹,例如存放【html】文件、图片、【CSS】文件、【JS】文件等,相当于传统项目中的webapp文件夹,则可以在static创建【index.html】欢迎页面。

       在src/main/java下默认已经存在【cn.hzxh.spring.sample】包,该包名是根据创建项目时的参数决定的,这个包就是当前项目的根包(Base-Package),并且在该包下已经存在【SampleApplication.java】文件,该文件的名称也是根据创建项目时填写的artifact决定的,该文件中包含【main】方法,直接执行main()方法就可以启动当前项目,所以,该类也是SpringBoot的启动类!

       SpringBoot项目在启动时会启动内置的Tomcat,默认占用【8080】端口,如果此前该端口已经处于占用状态,则项目会启动失败!通过【http://localhost:8080】即可访问所涉及的网页,由于SpringBoot项目内置Tomcat,该Tomcat只为当前项目服务,所以启动时设置的Context Path是空字符串,在访问时URL中不必添加项目名称,而index.html是默认的欢迎页面,其文件名也不必体现在URL中。

        启动成功,访问主页

   

      SpringBoot创建之后,会自动生成启动类,由注解【@SpringBootApplication】标识,告知底层,此类为启动类,且只能有一个,启动过程大概分为两个步骤:
1)对系统进行默认配置(由springboot自动配置机制设计和实现)。
2)扫描启动类所在包及子包中的类,然后进行加载,配置,初始化等。
具体配置项目可参考项目中【spring-boot-autoconfigure.jar】依赖包下的【MATA-INF】文件夹下的【spring.factories】文件内容。如对监听器,过滤器,定时器,security安全框架,thymeleaf模板等的支持,以及失败分析等。
     具体过程为:
1)首先系统监测由【@SpringBootApplication】注解标识的启动类,并扫描该类所在包及子包,在磁盘中,将.class文件交给JVM。
2)JVM拿到字节码文件后,利用类加载机制,将所有.class文件读取到内存中得到【xxx.Class】,并对这些类进行检查和扫描找到有特殊标记的类,如【@Controller】【Service】【Compnent】等。
3)由框架内置的【BeanFactory】接口的实现类生成对应资源的实例,并可以通过【ApplicationContext】对象的【getBean】方法获取对象。

4.SpringBoot + MyBatis

      SpringBoot项目默认没有集成持久层相关依赖,需要手动补充,或者创建项目时就选中。手动添加,打开【pom.xml】文件,添加依赖坐标。

<dependency>
    <groupId>org.mybatis.spring.boot</groupId>
    <artifactId>mybatis-spring-boot-starter</artifactId>
    <version>2.1.0</version>
</dependency>

<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <scope>runtime</scope>
</dependency>

关于依赖版本号,一般依赖的版本更新我们都说是不知道有什么区别的,SpringBoot会选择一个较为合适的依赖,添加至项目中,无其他情况,我们直接使用提供的依赖即可。

当添加以上依赖之后,SpringBoot项目再启动时就会尝试读取连接数据库的相关配置,如果还没有配置,则会启动失败!
src/main/resources下有application.properties,该文件就是SpringBoot的配置文件,在该文件中添加配置:

spring.datasource.url=jdbc:mysql://localhost:3306/db_ums?useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai
spring.datasource.username=root
spring.datasource.password=root

       需要注意的是,此文件配置结束后,SpringBoot并不会按照配置信息进行连接,只是读取该文件,检查是否有相关配置,也就意味着,即使配置错误,项目启动也并不会失败,具体错误会在后面的单元测试中体现。
       一般情况下,不需要配置连接数据库的driverClassName,因为SpringBoot会自动从jar中读取!

5.测试数据库连接

    在src/test/java下,默认已经存在项目的根包及测试类,且测试类中已经存在一个空的测试方法:

      可以先执行以上contextLoads()方法的单元测试,如果测试出错,一定是测试环境或者框架环境有问题,多考虑为jar包已经损坏,应该重新下载或者更换版本!
     在该类中添加【getConnection】方法,用于测试数据库连接

	@Autowired
	private DataSource dataSource;
	
	@Test
	public void getConnection() throws SQLException {
		Connection conn = dataSource.getConnection();
		System.err.println(conn);
	}
	

【@Autowired】注解会自动将值注入对应的对象中,如果此单元测试通过,则数据库连接配置文件配置正确。

6.注册功能的持久层接口

先创建与数据表对应的实体类cn.hzxh.springboot.sample.entity.User

public class User implements Serializable{
	
	private static final long serialVersionUID = 1L;

	private Integer id;
        private String username;
        private String password;
        private Integer age;
        private String phone;
        private String email;
        private Integer isDelete;
        private Integer departmentId;
    
        //SET/GET/ToString...    

}

然后,创建持久层接口cn.tedu.springboot.sample.mapper.UserMapper
可以在每一个抽象方法之前使用注解配置所对应的SQL语句,例如:

public interface UserMapper {

	@Insert("insert into t_user ("
			+ "username,password,"age,address,"email,department"
			+ ") values ("
			+ "#{username},#{password},#{age},#{address},#{email},#{department})")
	@Options(useGeneratedKeys=true,keyProperty="id")
	Integer insert(User user);

	User findByUsername(String username);

}

       这种做法是MyBatis本身就支持的,并不是SpringBoot所特有的!这种做法最大的优点在于:对应关系非常直观。主要的缺陷在于:配置长篇的SQL语句时,代码不易于阅读和维护!所以,一般仍然推荐使用XML配置映射的SQL语句!

       为了保证MyBatis框架能确定接口文件的位置,可以在接口的声明之前添加【@Mapper】注解,不过,这样的做法就要求每一个持久层接口之前都需要添加该注解,也可以在启动类【SampleApplication】之前添加【@MapperScan】注解进行配置,则后续只需要把持久层接口都放在这个包中就可以了,无需反复添加注解:

@SpringBootApplication
@MapperScan("cn.hzxh.springboot.sample.mapper")
public class SampleApplication {

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

}

7. 注册功能的映射

与此前一样,在【src/main/resources】下创建名为【mappers】的文件夹然后使用【UserMapper.xml】进行配置。

<?xml version="1.0" encoding="UTF-8" ?>  
<!DOCTYPE mapper PUBLIC "-//ibatis.apache.org//DTD Mapper 3.0//EN"      
    "http://ibatis.apache.org/dtd/ibatis-3-mapper.dtd">

<!-- namespace:当前XML文件用于配置哪个接口中抽象方法对应的SQL语句 -->
<mapper namespace="cn.hzxh.springboot.sample.mapper.UserMapper">

    <!-- resultMap节点:指导MyBatis如何封装查询结果 -->
    <!-- id:自定义名称 -->
    <!-- column:查询结果中的列名 -->
    <!-- property:type对应的类中的属性名 -->
    <resultMap id="UserEntityMap"
         type="cn.hzxh.springboot.sample.entity.User">
        <id column="id" property="id" />
        <result column="username" property="username" />
        <result column="password" property="password" />
        <result column="age" property="age" />
        <result column="phone" property="phone" />
        <result column="email" property="email" />
        <result column="is_delete" property="isDelete" />
        <result column="department_id" property="departmentId" />
    </resultMap>

    <!-- 使用insert节点配置插入数据的SQL语句 -->
    <!-- id:抽象方法的方法名 -->
    <!-- 在#{}中间的是方法的参数User类中的属性名称 -->
    <insert id="insert"
        useGeneratedKeys="true"
        keyProperty="id">
        INSERT INTO t_user (
            username, password,
            age, phone,
            email, is_delete,
            department_id
        ) VALUES (
            #{username}, #{password},
            #{age}, #{phone},
            #{email}, #{isDelete},
            #{departmentId}
        )
    </insert>

    <select id="findByUsername"
        resultMap="UserEntityMap">
        SELECT 
            * 
        FROM 
            t_user 
        WHERE 
            username=#{username} 
    </select>

</mapper>

另外,还需要配置XML文件的位置,则打开【application.properties】文件添加配置:

mybatis.mapper-locations=classpath:mappers/*.xml

8.持久层单元测试

     在【src/test/java】下创建【cn.hzxh.springboot.sample.mapper.UserMapperTests】单元测试类,将默认存在的【SampleApplicationTests】类之前的2行注解复制到【UserMapperTest】类之前:

@RunWith(SpringRunner.class)
@SpringBootTest
public class UserMapperTests {
	
      //凡是在SSM中,能通过getBean的方式获取的对象,SpringBoot中都可以通过添加此注解来实现自动装配
	@Autowired
	private UserMapper userMapper;
	
	@Test
	public void insert() {
		User user = new User();
		user.setUsername("SpringBoot");
		user.setPassword("root");
		Integer rows = userMapper.insert(user);
		System.err.println("rows:" + rows);
	}
	
	@Test
	public void findByUsername() {
		String username = "SpringBoot";
		User user = userMapper.findByUsername(username);
		System.err.println("user:" + user);
	}
	
}

9. 编写控制器处理请求

       创建控制器处理请求后的返回结果对象的类型【cn.hzxh.springboot.sample.util.JsonResult

public class JsonResult {

	private Integer state;
	private String message;
	
	public Integer getState() {
		return state;
	}
	public void setState(Integer state) {
		this.state = state;
	}
	public String getMessage() {
		return message;
	}
	public void setMessage(String message) {
		this.message = message;
	}
	
}

       创建【cn.hzxh.springboot.sample.controller.UserController】控制器类

/**
 * 使用@RestController相当于@Controller和@ResponseBody的组合使用方式
 * 当使用了@RestController时,该控制器类中所有处理请求的方法都是相当于添加了@ResponseBody注解的!
 * 一旦使用了该注解,该控制器类中的方法将不可以转发或者重定向,
 * 如果一定要转发或者重定向,必须使用ModelAndView作为处理请求的方法的返回值!
 */
@RestController
@RequestMapping("user")
public class UserController {

	@Autowired
	private UserMapper userMapper;

	//在SpringBoot项目中,默认已经将DispatcherServlet映射的路径配置为/*,即所有请求,无需写reg.do
	@RequestMapping("reg")
	public JsonResult reg(User user) {
	
		JsonResult js = new JsonResult();
		User u = userMapper.findByUsername(user.getUsername());
		if(u != null) {//该用户已经被注册
			js.setState(1);
			js.setMessage("注册失败,该用户已经被注册");
		}else {//可以注册,执行注册
			userMapper.insert(user);
			js.setState(2);
			js.setMessage("注册成功");
		}
		return js;
	}

}

      SpringBoot项目不需要开发者配置组件扫描,它默认的组件扫描就是项目的根包,即【cn.hzxh.springboot.sample】包,当前项目中所有的组件都必须在这个包或者其子包下!

      完成后,通过启动类启动项目,打开浏览器,输入以下内容进行测试。

http://localhost:8080/user/reg?username=junit&password=1234

10.添加前端页面,实现页面数据交互

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>用户注册</title>
</head>
<body>
<center>
<form id="form-reg">
	<h1>用户注册</h1>
	<label>姓名:</label>
	<input type="text" name="username"/><br>
	<label>密码:</label>
	<input type="password" name="password"/><br>
	<label>年龄:</label>
	<input type="text" name="age"/><br>
	<label>电话:</label>
	<input type="text" name="phone"/><br>
	<label>邮箱:</label>
	<input type="text" name="email"/><br>
	<input id="btn-reg" type="button" value="提交">
</form>
</center>
</body>
<script type="text/javascript" src="jquery-3.4.1.min.js"></script>
<script type="text/javascript">
$("#btn-reg").click(function(){
	$.ajax({
		"url":"user/reg",
		"data":$("#form-reg").serialize(),
		"type":"post",
		"dataType":"json",
		"success":function(result){
			alert(result.message);
		}
	});		
});
</script>
</html>

测试通过

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
学习尚硅谷视频整理的文档 Spring Boot 1 1 Spring Boot入门 4 1.1 简介 4 1.2 微服务(martin fowler发表了一篇文章) 5 1.3 环境约束 7 1.4 第一个Spring Boot项目(jar):HelloWorld 8 1.5 入门案例详解 11 1.5.1 POM文件 11 1.5.2 主程序类,主入口类 12 1.6 使用Spring Initializer向导快速创建Spring Boot 16 2 Spring Boot配置 18 2.1 配置文件 18 2.2 YML语法 19 2.3 YML配置文件值获取 21 2.4 properties配置文件乱码问题 24 2.5 @ConfigurationProperties与@Value的区别 25 2.6 配置@PropertySource、@ImportResource、@Bean 27 2.7 配置文件占位符 30 2.8 Profile多环境支持 31 2.9 配置文件的加载位置 33 2.10 外部配置加载顺序 36 2.11 自动配置原理 37 2.12 @Conditional派生注解 41 3 Spring Boot与日志 42 3.1 日志框架分类和选择 42 3.2 SLF4j使用 43 3.3 其他日志框架统一转换成slf4j+logback 44 3.4 Spring Boot日志使用 45 3.5 Spring Boot默认配置 47 3.6 指定日志文件和日志Profile功能 52 3.7 切换日志框架(不使用SLF4j+LogBack) 54 4 Spring Boot与Web开发 55 4.1 Web开发简介 55 4.2 静态资源映射规则 56 4.3 引入Thymeleaf 60 4.4 Thymeleaf语法 61 4.5 SpringMVC自动配置原理 67 4.6 SpringBoot扩展与全面接管 70 4.7 如何修改SpringBoot的默认配置 72 4.8 【实验】CRUD操作 73 4.8.1 默认访问首页 73 4.8.2 登录页面国际化 74 4.8.3 登录 80 4.8.4 拦截器进行登录检查 81 4.8.5 实验要求(没按要求做,不想改了!) 82 4.8.6 CRUD-员工列表 83 4.8.7 CRUD-员工修改 86 4.8.8 CRUD-员工添加 87 4.8.9 CRUD-员工删除 88 4.9 错误处理原理&错误页面定制 90 4.10 配置嵌入式Servlet容器(springboot 1.50版本) 97 4.10.1 如何定制和修改Servelt容器的相关配置 97 4.10.2 注册servlet三大组件【servlet,filter,listener】 98 4.10.3 替换为其他嵌入式容器 102 4.10.4 嵌入式servlet容器自动配置原理 103 4.10.5 嵌入式servlet容器启动原理 103 4.11 使用外置的Servlet容器 104 4.11.1 步骤 104 4.11.2 原理 107 5 Spring Boot与Docker(虚拟化容器技术) 110 5.1 简介 110 5.2 核心概念 111 5.3 安装Docker 112 5.4 Docker常用命令&操作 113 5.5 安装MySQL示例 114 6 Spring Boot与数据访问 115 6.1 JDBC 115 6.1.1 实现 115 6.1.2 自动配置原理 116 6.2 整合Durid数据源 117 6.3 整合Mybatis 122 6.3.1 注解版 123 6.3.2 配置文件版 124 6.4 整合SpringData JPA 125 6.4.1 SpringData简介 125 6.4.2 整合 126 7 Spring Boot启动配置原理 128 7.1 启动流程(Springboot 1.50版本) 128 7.1.1 创建SpringApplication对象 129 7.1.2 运行run方法 130 7.1.3 编写事件监听机制 132 8 Spring Boot自定义starters 136 8.1 概述 136 8.2 步骤 137 9 更多Springboot整合示例 144 10 Spring Boot与缓存 145 10.1 JSR107缓存规范 145 10.2 Spring的缓存抽象 146 10.2.1 基本概念 146 10.2.2 整合项目 146 10.2.3 CacheEnable注解 148 10.2.4 Cache注解 150 10.3 整合redis 154 10.3.1 在Docker上安装redis 154 10.3.2 Redis的Template 154 10.3.3 整合(百度) 155
好的,我可以和你分享一些关于Spring Boot学习笔记。 1. Spring Boot是什么? Spring Boot是一个基于Spring框架的快速开发框架,它能够帮助开发者快速搭建Spring项目,简化了Spring应用开发的繁琐过程,提高了开发效率。 2. Spring Boot的优点有哪些? Spring Boot的优点有很多,其中包括: - 简化了Spring应用的开发,提高了开发效率; - 集成了很多常用的第三方库,减少了依赖管理的工作; - 自动化配置,减少了配置文件的编写工作; - 内嵌了Tomcat等Web容器,使得应用的部署更加便捷; - 提供了Actuator等模块,使得应用的监控和管理更加便捷。 3. Spring Boot的核心注解有哪些? Spring Boot的核心注解包括: - @SpringBootApplication:标注在启动类上,代表这是一个Spring Boot应用; - @Controller:标注在控制器类上,处理HTTP请求; - @Service:标注在服务类上,用于处理业务逻辑; - @Repository:标注在数据访问类上,用于数据库访问; - @Configuration:标注在配置类上,用于配置Spring应用上下文。 4. Spring Boot的配置文件有哪些? Spring Boot的配置文件包括: - application.properties:基于Key-Value的属性文件; - application.yml:基于YAML语法的配置文件。 5. 如何使用Spring Boot集成数据库? 使用Spring Boot集成数据库需要完成以下几个步骤: - 在pom.xml中添加相关数据库依赖; - 配置数据源和JPA/Hibernate等相关配置; - 编写实体类和DAO层代码。 以上就是一些关于Spring Boot学习笔记,希望能对你有所帮助。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值