zoukankan      html  css  js  c++  java
  • 博客系统实战——SprintBoot 集成Thymeleaf 实现用户增删查改(含源码)

    近来在学习SprintBoot +Thymeleaf +Maven搭建自己的博客系统,故在学习过程中在此记录一下,也希望能给广大正在学习SprintBoot和Thymeleaf的朋友们一个参考。

    以下是目录结构:

    效果:

     1、创建一个Springboot 工程,具体步骤这个网上例子一大把,选择WEB,thymeleaf框架就行了,以下是pom.xml的内容

    1.  
      <?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.spring.blog</groupId>
          <artifactId>myblog</artifactId>
          <version>0.0.1-SNAPSHOT</version>
          <packaging>jar</packaging>
       
          <name>myblog</name>
          <description>myblog project for Spring Boot</description>
       
          <parent>
              <groupId>org.springframework.boot</groupId>
              <artifactId>spring-boot-starter-parent</artifactId>
              <version>2.0.3.RELEASE</version>
              <relativePath/> <!-- lookup parent from repository -->
          </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-web</artifactId>
              </dependency>
              <dependency>
                  <groupId>org.springframework.boot</groupId>
                  <artifactId>spring-boot-starter-thymeleaf</artifactId>
              </dependency>
          </dependencies>
          <build>
              <plugins>
                  <plugin>
                      <groupId>org.springframework.boot</groupId>
                      <artifactId>spring-boot-maven-plugin</artifactId>
                  </plugin>
              </plugins>
       
          </build>
      </project>

    2、创建用户类(避免太长省去了get set方法,可下载完整项目)

    package com.spring.boot.blog.blog.domain;
     
    /**
     * Created by 龙烨 on 2018/7/16.
     */
    public class User {
        private Long id; // 用户的唯一标识
        private String name;
        private String email;
     
        public User(){//无参数
     
        }
        public User(Long id,String name,String email){
            this.id=id;
            this.name=name;
            this.email=email;
        }
        
    }

    3、创建接口及实现方法,应为这里没有连接数据库,故使用内存

    package com.spring.boot.blog.blog.repository;
     
    import com.spring.boot.blog.blog.domain.User;
    import org.springframework.stereotype.Service;
     
    import java.util.ArrayList;
    import java.util.List;
    import java.util.concurrent.ConcurrentHashMap;
    import java.util.concurrent.ConcurrentMap;
    import java.util.concurrent.atomic.AtomicLong;
     
    /**
     * Created by 龙烨 on 2018/7/16.
     */
    @Service
    public class UserRepositoryImpl implements UserRepository {
     
        private static AtomicLong counter=new AtomicLong();
        private final ConcurrentMap<Long,User> userMap=new ConcurrentHashMap<>();
     
        @Override
        public User saveOrUpateUser(User user) {
            Long id=user.getId();
            if(id==null){//新建
                id=counter.incrementAndGet();
                user.setId(id);
            }
            this.userMap.put(id,user);
            return user;
        }
     
        @Override
        public void deleteUser(Long id) {
            this.userMap.remove(id);
     
        }
     
        @Override
        public User getUserById(Long id) {
     
            return this.userMap.get(id);
        }
     
        @Override
        public List<User> listUser() {
            return new ArrayList<User>(this.userMap.values());
        }
    }
    

      

    4 、创建控制类(避免太长,部分内容,下载源码可查看完整)

    @RestController
    @RequestMapping("/users")
    public class UserController {
     
        @Autowired
        private UserRepository userRepository;
        /**
         * 查询所以用户
         * @param model
         * @return
         */
        @GetMapping
        public ModelAndView list(Model model){
            model.addAttribute("userList",userRepository.listUser());
            model.addAttribute("title","用户管理");
            return new ModelAndView("users/list","userModel",model);
        }
     
        /**
         * 查询单个用户
         * @param model
         * @return
         */
        @GetMapping("{id}")
        public ModelAndView view(@PathVariable("id") Long id, Model model){
            User user=userRepository.getUserById(id);
            model.addAttribute("user",user);
            model.addAttribute("title","查看用户");
            return new ModelAndView("users/view","userModel",model);
        }
     
        /**
         * 创建表达页面
         * @param model
         * @return
         */
        @GetMapping("/form")
        public ModelAndView createForm( Model model){
            model.addAttribute("user",new User());
            model.addAttribute("title","创建用户");
            return new ModelAndView("users/form","userModel",model);
        }
     
        @PostMapping
        public ModelAndView saveOrUpdateUser(User user){
            user=userRepository.saveOrUpateUser(user);
            return new ModelAndView("redirect:/users");
        }

     5、resources 下创建文件:

    application.properties 增加以下内容:

    # THYMELEAF
    spring.thymeleaf.encoding=UTF-8
    # 热部署静态文件
    spring.thymeleaf.cache=false
    # 使用HTML5标准
    spring.thymeleaf.mode=LEGACYHTML5
    spring.thymeleaf.prefix=classpath:/templates/
    

      

    源码下载:源码

  • 相关阅读:
    Android Design Support Library(三)用CoordinatorLayout实现Toolbar隐藏和折叠
    Android Design Support Library(二)用NavigationView实现抽屉菜单界面
    Android Design Support Library(一)用TabLayout实现类似网易选项卡动态滑动效果
    Android5.x Notification应用解析
    了解ViewFlipper工作机制
    OkHttp自定义重试次数
    OkHttp实现全局过期token自动刷新
    Android5.0新控件
    Android4.0新控件
    用typedef给结构体一个别名
  • 原文地址:https://www.cnblogs.com/myscs/p/9355854.html
Copyright © 2011-2022 走看看