Springboot 入门

Springboot 入门

开始记录一点springboot的学习记录,不定期记录。供自己以后看,今晚先起个头就咕咕咕,明天还要训练。

遇到的问题

Annotations are not allowed here

在这里插入图片描述

原因是注解后面加了分号,很尴尬

MYSQL 依赖

		<dependency>
            <groupId>io.projectreactor</groupId>
            <artifactId>reactor-test</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

阿里云镜像

//添加到settings文件mirrors里
<mirror>
  <id>alimaven</id>
  <mirrorOf>central</mirrorOf>
  <name>aliyun maven</name>
  <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
</mirror>

Update

参考巨巨的博客搭建一个简单的登录页面

跟着做完了简单项目(可能算不上),不紧不慢,最后成功登录。下面是我对Springboot代码的一些理解

我觉得数据库是springboot的前置知识,大一下那会就想学,可怎么也看不懂,真的烦操,可能是我太笨。学完数据库好多了,言归正传,我们下边来讲一下入门知识。

项目的目录
如图建立springboot项目,至于怎么快速建立项目,自行百度。
这边说一下各个层的作用:

  • DAO层:包括XxxMapper.java(数据库访问接口类),XxxMapper.xml(数据库链接实现);
  • Bean层:也叫model层,模型层,entity层,实体层,就是数据库表的映射实体类,存放POJO对象,和JDBC似;
  • Service层:也叫服务层,业务层,包括XxxService.java(业务接口类),XxxServiceImpl.java(业务实现类);(可以在service文件夹下新建impl文件放业务实现类,也可以把业务实现类单独放一个文件夹下,更清晰)
  • Web层:就是Controller层,实现与web前端的交互。

不要着急,刚入门我自己看了很久,跟着代码示例做下去就慢慢看懂了,之后我会一个一个讲解自己

我们先介绍几个springboot的文件:
在这里插入图片描述

pom.xml

配置文件,用于导入依赖,springboot会自动下载对应的jar包,原理很复杂,有巨巨知道的可以教教我。我们只需根据需求在.xml文件的
< dependencies> < /dependencies>中添加依赖,右击.xml文件选择Maven,先Download,再Reload project,就可以成功导入依赖了。
在这里插入图片描述

springboot启动类

在这里插入图片描述

package com.example.demo;

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

@SpringBootApplication
//@SpringBootApplication注解告诉程序这是一个springboot启动类
@MapperScan("com.example.demo.mapper")
//指定要变成实现类的接口所在的包,然后包下面的所有接口在编译之后都会生成相应的实现类
//用于之后扫描,查找mapper映射,个人理解是一个框架
public class DemoApplication {

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

}

yml文件

spring:
  datasource:
    name: booklib  #数据库名
    url: jdbc:mysql://localhost:3306/booklib?useUnicode=true&useSSL=false&serverTimezone = GMT #url
    username: root  #用户名
    password: root  #密码
    driver-class-name: com.mysql.cj.jdbc.Driver  #数据库链接驱动

mybatis:
  mapper-locations: classpath:mapper/*.xml  #配置映射文件
  type-aliases-package: com.example.demo.bean #配置实体类

用于连接数据库,相当于JDBC的Util,之后mybatis相当于mysql语句,之后会讲解

package cn.edu.zucc.booklib.util;

import java.sql.Connection;

public class DBUtil {
	private static final String jdbcUrl="jdbc:mysql://localhost:3306/booklib?useUnicode=true&useSSL=false&serverTimezone = GMT";
//	private static final String jdbcUrl="jdbc:mysql://localhost:3306/booklib?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone = GMT";
	private static final String dbUser="root";
	private static final String dbPwd="root";
	static{
		try {
			Class.forName("com.mysql.cj.jdbc.Driver");
		} catch (ClassNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
	public static Connection getConnection() throws java.sql.SQLException{
		return java.sql.DriverManager.getConnection(jdbcUrl, dbUser, dbPwd);
	}
}

同时需要在.xml文件导入数据库和mybatis依赖

<!--数据库connect-->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.19</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-jdbc</artifactId>
        </dependency>
        
<!--mybatis-->      
		<dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>2.0.0</version>
        </dependency>

model层

就是JDBC里的bean,简单贴下

package com.example.demo.bean;

import org.springframework.context.annotation.Configuration;
import org.springframework.stereotype.Component;

import java.util.Date;


@Configuration
public class UserBean {
    private String userid;
    private String username;
    private String pwd;
    private String usertype;
    private Date createDate;
    private Date removeDate;
    public String getUserid() {return userid;}
    public void setUserid(String userid) {this.userid = userid;}
    public String getUsername() {return username;}
    public void setUsername(String username) {this.username = username;}
    public String getPwd() {return pwd;}
    public void setPwd(String pwd) {this.pwd = pwd;}
    public String getUsertype() {return usertype;}
    public void setUsertype(String usertype) {this.usertype = usertype;}
    public Date getCreateDate() {return createDate;}
    public void setCreateDate(Date createDate) {this.createDate = createDate;}
    public Date getRemoveDate() {return removeDate;}
    public void setRemoveDate(Date removeDate) {this.removeDate = removeDate;}
}

这边说下IDEA set和get的快捷键,光标选住变量名,Alt+Enter,或者Alter+Insert
(笔记本键盘可能找不到Insert)

@Date注解功能与用法

1、@Data可以为类提供读写功能,从而不用写get、set方法。
2、他还会为类提供 equals()、hashCode()、toString() 方法。
所有就不需要我们写set、get方法了,我们只需在实体类上+@Date注解就可以了
此时我们需要导入依赖

			<dependency>
                <groupId>org.projectlombok</groupId>
                <artifactId>lombok</artifactId>
                <version>1.18.8</version>
                //版本号可能不同,我自己使用1.18.8,用1.16.10会报错
            </dependency>

Mapper接口

也就是DAO层,实现访问数据库的接口文件,逻辑之后会整体讲解
关于@Mapper注解,可以看这篇博客

package com.example.demo.mapper;

import com.example.demo.bean.UserBean;
import org.apache.ibatis.annotations.Mapper;

@Mapper //在接口类上添加了@Mapper,在编译之后会生成相应的接口实现类
public interface UserMapper {

    UserBean getInfo(String name,String password);

}

看到这边会很疑惑,这是啥?不要着急,这就是用来访问数据库的,我们继续看

Usermapper文件

在这里插入图片描述
在resources目录下新建一个mapper包,创建UserMapper.xml文件
关于namespace的解释,可以看这篇博客

<?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.example.demo.mapper.UserMapper">

    <select id="getInfo" parameterType="String" resultType="com.example.demo.bean.UserBean">
        SELECT * FROM beansystemuser WHERE username = #{name} AND pwd = #{password}
    </select>

</mapper>

里面写mybatis语句,其中

</mapper namespace=“com.example.demo.mapper.UserMapper” />
用于绑定Dao接口的,即面向接口编程。当你的namespace绑定接口后,你可以不用写接口实现类,mybatis会通过该绑定自动帮你找到对应要执行的SQL语句

所以,UserMapper接口中的getInfo方法就可以调用了
关于mybatis学习,可以看这篇博客,写的是真的好

<select id="getInfo" parameterType="String" resultType="com.example.demo.bean.UserBean">
        SELECT * FROM beansystemuser WHERE username = #{name} AND pwd = #{password}
    </select>

这部分的意思是,这个sql语句的ID叫做getInfo,与Uermapper接口的方法名对应,parameterType表示传入参数类型为Sring,resultType属性表示返回的类型为UserBean,mybatis会自动将查询出的结果装配成UserBean类,太牛了
注意:
如果查询到一个结果就返回一个UserBean类,如果是多个结果,返回一个List
默认情况下,使用 #{} 格式的语法会导致 MyBatis 创建 PreparedStatement 参数并安全地设置参数(就像使用JDBC的 ? 一样)
Usermapper接口中的getInfo方法会将两个参数传入,完成查询

这边有个小疑问,如果有很多个查询,是要创建很多个Mapper接口,还是在UserMapper接口中写很多个方法,然后通过select标签的ID来实现。由于刚入门,经验太少,有知道的巨巨,可以教教

service层

包括XxxService.java(业务接口类),XxxServiceImpl.java(业务实现类)
我们先看Userservice接口

package com.example.demo.service;

import com.example.demo.bean.UserBean;

public interface UserService {
    UserBean loginIn(String name, String password);
}

service实现类

package com.example.demo.servicelmpl;


import com.example.demo.bean.UserBean;
import com.example.demo.mapper.UserMapper;
import com.example.demo.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

@Service
public class UserServicelmpl implements UserService {

//    @Autowired
    private UserMapper userMapper;

    @Override
    public UserBean loginIn(String name,String password){
        return userMapper.getInfo(name,password);
    }

}

代码中有 private UserMapper userMapper;,很疑惑接口也能实例化?
原因是,@mapper注解,会自动生成接口的实现类。

Control层

重点

主要用于前后端的交互

package com.example.demo.controller;

import com.example.demo.bean.UserBean;
import com.example.demo.service.UserService;
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.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;

@Controller
public class LoginController {

    @Autowired
    UserService userService;

    @RequestMapping("/login")
    public String show(){
        return "login";
    }

    @RequestMapping(value = "/loginIn",method = RequestMethod.POST)
    public String login(String name,String password){
        UserBean userBean = userService.loginIn(name,password);
        if(userBean!=null){
            return "success";
        }else {
            return "error";
        }
    }

}

开头@Controller 注解,可以看这边博客

简单来说,springboot会将特定包内的所有类都扫描一遍,并标记带@Controller、@Service、@repository、@Component等注解的类注入到IOC容器中,作为Spring的Bean来管理。

被@Controller标记的类实际上就是个SpringMVC Controller对象,它是一个控制器类,而@Contoller注解在org.springframework.stereotype包下。其中被@RequestMapping 标记的方法会被分发处理器扫描识别,将不同的请求分发到对应的接口上。

@RestController 和 @Conrtoller的区别

@RestController = @Conrtoller + @ResponseBody
使用了@RestController 不会返回html页面,而是直接返回字符串

至此,一个登录程序就完成了,简单总结一下整体的逻辑思路。

整体逻辑

当我们运行springboot启动类,(先睡觉了…明天牛客多校)

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值