从零开始学SpringBoot-增删改查实现

继上一篇《从零开始学SpringBoot-增删改查需求》的 需求功能描述,这篇文章主要是讲解实现思路和对应的实现代码,如大家发现实现过程中有疑问或者是有其他的实现注意点,可以留言,便于学习和交流。

本篇文章对增删改查需求的实现,主要是结合了SpringBoot+MyBastis+MySQL,其中SpringBoot的代码结构直接从官网上下载demo,在pom.xml中集成JSP、MyBatis和MySQL的数据源,实现的代码的目录结构如图:

从零开始学SpringBoot-增删改查实现_第1张图片


分解功能,描述+代码形式来讲解实现功能:

1.基本配置

1.1.pom.xml配置,使用到的依赖



	4.0.0

	com.example
	demo
	0.0.1-SNAPSHOT
	jar

	demo
	Demo project for Spring Boot

	
		org.springframework.boot
		spring-boot-starter-parent
		2.0.2.RELEASE
		 
	

	
		UTF-8
		UTF-8
		1.8
	

	
		
			org.springframework.boot
			spring-boot-starter
		

		
			org.springframework.boot
			spring-boot-starter-test
			test
		
		
		
			org.springframework.boot
			spring-boot-starter-web
		
		
		
			org.mybatis.spring.boot
			mybatis-spring-boot-starter
			1.1.1
		
		
		
			mysql
			mysql-connector-java
		
		
		
			javax.servlet
			javax.servlet-api
			priveded
		
		
		
			javax.servlet
			jstl
		
		
		
		    org.apache.tomcat.embed
		    tomcat-embed-jasper
		    priveded
		
		
		
			org.springframework.boot
			spring-boot-devtools
			true
		
	

	
		
			
				org.springframework.boot
				spring-boot-maven-plugin
				
					true
				
			
		
	



1.2.application.properties文件配置

#页面默认前缀目录和后缀
spring.mvc.view.prefix=/WEB-INF/views/
spring.mvc.view.suffix=.jsp

#关闭默认模板引擎
spring.thymeleaf.cache=false
spring.thymeleaf.enabled=false

#数据库信息
spring.datasource.url=jdbc:mysql://localhost:3306/mytest?useSSL=false
spring.datasource.username=root
spring.datasource.password=mysql2017
spring.datasource.driver-class-name=com.mysql.jdbc.Driver

spring.jpa.properties.hibernate.hbm2ddl.auto=update
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL5InnoDBDialect
spring.jpa.show-sql= true

2.有了上述的配置后,现在开始考虑实现

本篇文章主要以webapp中的jsp界面调用controller,通过controller调用service,在通过service调用Mapper,Mapper操作实体Bean映射,与数据库进行数据的操作。其中有些部分省略,例如service定义接口,在写入实现,由于考虑到对SpringBoot集成MyBatis对数据库进行操作,所以就不会细化太多层次。

2.1.实体类(User.java),与数据库中的字段对应

package com.example.demo.bean;

public class User {
	private int id;
	private String name;
	private String password;
	private int age;
	
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getPassword() {
		return password;
	}
	public void setPassword(String password) {
		this.password = password;
	}
	public int getAge() {
		return age;
	}
	public void setAge(int age) {
		this.age = age;
	}
	
}

2.2.编写UserMapper.java映射器类

针对此类,一般有两种实现方式来操作数据库

1)注解:@Insert、@Select、@Update、@Delete

2)xml文件配置

本篇文章中使用第一种:注解的方式来实现,大家有兴趣可以使用xml文件配置

package com.example.demo.mapper;

import java.util.List;

import org.apache.ibatis.annotations.Delete;
import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;
import org.apache.ibatis.annotations.Update;

import com.example.demo.bean.User;

@Mapper
public interface UserMapper {
	/**
	 * 全部用户查询
	 * @return
	 */
	@Select("SELECT ID,NAME,PASSWORD,AGE FROM USER")
	List findAll();
	
	/**
	 * 新增用户
	 */
	@Insert("INSERT INTO USER(NAME,PASSWORD,AGE)VALUES(#{name}, #{password}, #{age})")
	void addUser(User user);
	
	/**
	 * 修改用户
	 */
	@Update("UPDATE USER SET NAME=#{name}, PASSWORD=#{password}, AGE=#{age} WHERE ID=#{id}")
	void updateUser(User user);
	
	/**
	 * 删除用户
	 */
	@Delete("DELETE FROM USER WHERE ID=#{id}")
	void deleteUser(int id);
	
	@Select("SELECT ID,NAME,PASSWORD,AGE FROM USER WHERE ID=#{id}")
	User findById(@Param("id")int id);
}

注意:在类的方法上,本篇文章使用了@Mapper的注解来当前UserMapper注入到bean容器中,原因是因为此篇文章中只是用了一个Mapper的类,如果存在很多的话,建议大家在SpringBoot的启动类上添加@MapperScan("com.example.demo.mapper.*")来扫描Mapper类注入。

2.3.编写service和controller类

UserService.java代码:

package com.example.demo.service;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import com.example.demo.bean.User;
import com.example.demo.mapper.UserMapper;

@Service
public class UserService {
	@Autowired
	private UserMapper userMapper;
	
	/**
	 * 获取全部的用户
	 * @return
	 */
	public List findAll() {
		return userMapper.findAll();
	}
	
	/**
	 * 添加用户
	 * @param user
	 */
	@Transactional
	public void addUser(User user) {
		userMapper.addUser(user);
	}
	
	/**
	 * 修改用户
	 * @param user
	 */
	@Transactional
	public void updateUser(User user) {
		userMapper.updateUser(user);
	}
	
	/**
	 * 删除用户
	 * @param id
	 */
	@Transactional
	public void deleteUser(int id) {
		userMapper.deleteUser(id);
	}
	
	/**
	 * 查询指定用户
	 * @param id
	 * @return
	 */
	public User findById(int id) {
		return userMapper.findById(id);
	}
}

UserController.java代码

package com.example.demo.controller;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;

import com.example.demo.bean.User;
import com.example.demo.service.UserService;

@Controller
public class UserController {
	@Autowired
	private UserService userService;
	
	@RequestMapping("/listUser")
	public String listUser(Model model) {
		List users = userService.findAll();
		model.addAttribute("users", users);
		return "listUser";
	}
	
	@RequestMapping("/toAdd")
	public String toAdd() {
		return "/addUser";
	}
	
	@RequestMapping("/add")
	public String addUser(User user) {
		userService.addUser(user);
		return "redirect:/listUser";
	}
	
	@RequestMapping("/toUpdate")
	public String toUpdate(Model model, int id) {
		User user = userService.findById(id);
		model.addAttribute("user", user);
		return "/updateUser";
	}
	
	@RequestMapping("/update")
	public String updateUser(User user) {
		userService.updateUser(user);
		return "redirect:/listUser";
	}
	
	@RequestMapping("/delete")
	public String deleteUser(int id) {
		userService.deleteUser(id);
		return "redirect:/listUser";
	}
}

3.写完了服务端代码,现在考虑前端的实现

3.1.先将前端的目录结构展示下:

从零开始学SpringBoot-增删改查实现_第2张图片

3.2.将效果图和对应的代码进行粘贴

  • listUser.jsp 数据展示界面

从零开始学SpringBoot-增删改查实现_第3张图片

<%@ page language="java" contentType="text/html; charset=UTF-8"
         pageEncoding="UTF-8"%>

<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>

用户列表

添加
id name password age operate
${s.id} ${s.name} ${s.password} ${s.age} 删除 修改

其中

1)添加,会调用controller层的@RequestMapping("/toAdd")注解下的方法,通过跳转到addUser.jsp界面。

2)删除,会调用controller层的@RequestMapping("/delete")注解下的方法,删除后直接指向listUser.jsp界面。

3)修改,会调用controller层的@RequestMapping("/toUpdate")注解下的方法,通过跳转到updateUser.jsp界面。

  • addUser.jsp用户添加界面

从零开始学SpringBoot-增删改查实现_第4张图片

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>




Insert title here


	
      name:       age:       password:          

在完成数据的录入后,当进行提交的时候,使用form的action="/add",调用controller层的@RequestMapping("/add")注解下的方法,实现数据的新增,然后直接指向listUser.jsp界面。

  • updateUser.jsp用户修改界面


<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>




Insert title here


	
id: name: password: age:

在完成数据的录入后,当进行提交的时候,使用form的action="/update",调用controller层的@RequestMapping("/update")注解下的方法,实现数据的修改,然后直接指向listUser.jsp界面。

根据上面的代码,大家可以直接来验证功能,通过查询MySQL数据库来看数据的变化情况,涉及到的表结构和数据。

从零开始学SpringBoot-增删改查实现_第5张图片


从零开始学SpringBoot-增删改查实现_第6张图片

扫描关注:全栈工程师成长记



你可能感兴趣的:(Spring,Boot)