还没取好名字先写

使用的软件版本

Jetbrains IDEA 2019.1

开始建项目

首先打开IDEA新建项目,选择Spring Initializr


image.png

填写项目的信息

这里我用Gradle

其他内容可以参考着写,填完之后下一步

项目信息

选择这些,然后进入下一步,填写项目保存的目录

配置的组件

点击完成,等待项目初始化

配置

刚建完的项目可能是这样的


image.png

在项目的resource目录下有application.properties

打开文件输入

# 数据库的配置

# 如果使用SQLite可以用下面这个配置(需要在Gradle引入SQLite依赖)
# spring.datasource.url=jdbc:sqlite:bunny.sqlite3
# spring.datasource.driverClassName=org.sqlite.JDBC

# MySQL数据库的配置
spring.datasource.url=jdbc:mysql://localhost:3306/spring?useSSL=false&characterEncoding=utf8&serverTimezone=UTC
spring.datasource.username=spring
spring.datasource.password=123456
spring.datasource.driverClassName=com.mysql.cj.jdbc.Driver

# mybatis的配置
# 填Model包的位置
mybatis.mapper-locations=classpath*:mapper/*.xml
mybatis.type-aliases-package=cc.bunnies.pocketsnacks.model

# 日志配置
logging.level.mapper=DEBUG
logging.level.org.springframework=INFO
logging.level.org.spring.springboot.dao=INFO
logging.file=logs/spring-boot-logging.log

# 编码配置
spring.http.encoding.force=true
spring.http.encoding.charset=UTF-8
spring.http.encoding.enabled=true
server.tomcat.uri-encoding=UTF-8

# 模板引擎
# 目录为resource下的目录
spring.thymeleaf.prefix=classpath:/templates/
spring.thymeleaf.suffix=.html
spring.thymeleaf.mode=LEGACYHTML5
spring.thymeleaf.encoding=UTF8

# 热部署
spring.devtools.restart.enabled=true

spring.session.store-type=none

开始Hello World

首先先在项目的包下建立相关的文件夹,类似

目录结构

在Controller下建立IndexController类,输入如下代码

package cc.bunnies.pocketsnacks.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

@Controller
public class IndexController {
    @RequestMapping("/")
    @ResponseBody
    String index() {
        return "Hello World";
    }
}

点击运行

Run

等待服务器初始化完成

打开浏览器http://localhost:8080
看到如下界面,说明的环境搭完了

Hello World

操作数据库

还记得之前在配置文件里面填写的数据库相关信息么。在IDEA里面有数据库操作的插件。

image.png

添加数据源

image.png

添加一个数据链接

image.png

之后可以用这个进行简单的数据管理

image.png

右键可以新建console,可以运行SQL脚本。

简单的新建一个表,运行

CREATE TABLE `user` (
  `uid` INT(11) NOT NULL AUTO_INCREMENT,
  `username` VARCHAR(20) NOT NULL,
  `password` VARCHAR(20) NOT NULL,
  PRIMARY KEY(`uid`)
);

然后在model包下新建一个User类,形如

package cc.bunnies.pocketsnacks.model;

import lombok.Builder;
import lombok.Data;

@Data
@Builder
public class User {
    private int uid;
    private String username;
    private String password;
}

使用Lombok可以通过注解生成Java字节码,这样你的类就会在编译时候自动添加相关函数,不需要手动再写一次。Model类的内容就和数据表的字段相对应即可。
@Data注解是自动为类内部的变量添加Getter和Setter
比如getUsername和setUsername
@Builder注解是给类添加一个Builder,可以用构造器模式构造类的实例比如这里就可以用

User user = User.builder().username("Ivan").password("123").build();

这种代码来构造一个username为Ivan,password为123的User类实例

当然你也可以为你的实体类写一个构造函数形如

public User(String username,String password){
  this.username= username;
  this.password = password;
}

接下来建立一个Dao类的接口,形如

package cc.bunnies.pocketsnacks.dao;

import cc.bunnies.pocketsnacks.model.User;
import org.apache.ibatis.annotations.*;
import org.springframework.stereotype.Component;

import java.util.List;

@Mapper
@Component
public interface UserDao {
    @Select("select * from user")
    List getAllUser();

    @Select("select * from user where username = #{username} limit 1")
    User getUserByUsername(@Param("username") String username);

    @Insert("insert into user(username,password) values (#{username},#{password})")
    @Options(useGeneratedKeys = true, keyProperty = "uid")
    int insert(User user);
}

@Select注解里面是执行对应的SQL语句并返回SQL语句对应的结果

@Insert注解会执行对应的Insert语句

@Options注解可以额外设置一些属性,比如在这里的就是设置返回值为自增ID

这些注解都使用形如#{名字}这种占位符,占位符对应的参数可以通过@Param("占位符名字")来指定,也可以传入一个实体类,然后使用#{实体类的属性}来传递值。

接下来创建一个Controller命名为UserController

package cc.bunnies.pocketsnacks.controller;

import cc.bunnies.pocketsnacks.dao.UserDao;
import cc.bunnies.pocketsnacks.model.User;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;

import java.util.List;

@Controller
public class UserController {

    private UserDao userDao;

    @Autowired
    public UserController(UserDao userDao) {
        this.userDao = userDao;
    }

    @RequestMapping("/user/list")
    public String list(ModelMap modelMap) {
        List users = userDao.getAllUser();  //获取所有用户
        modelMap.addAttribute("users", users);  //将数据传递给view
        return "user_list";  //view 的名字
    }

    @RequestMapping(value = "/user/add", method = RequestMethod.POST)
    public String add(ModelMap modelMap, @RequestParam String username, @RequestParam String password) {
        User user = User.builder().username(username).password(password).build();
        int uid = userDao.insert(user);
        if (uid <= 0) {
            modelMap.addAttribute("err_msg", "插入出错");
        }
        List users = userDao.getAllUser();
        modelMap.addAttribute("users", users);
        return "user_list";
    }
}

在Controller里面,通过RequestMapping来指定url由哪一个函数去处理比如"/user/list"是由UserController的list函数去处理的,可以通过指定method参数去限制函数只能响应特定的请求方式。使用ModelMap可以将数据传递给View层,这个是由Spring处理的。通过return的字符串,Spring去寻找对应的模板文件然后去渲染。

接下来创建一个HTML模板




    
    User List


这里使用Thymeleaf模板引擎,可以用${变量名}获取到Controller传递过来的值

未完待续

你可能感兴趣的:(还没取好名字先写)