今天继续和crud杠
刚学ssm时候觉得ssm好用,现在学springboot又觉得springboot强无敌,只需要一个配置文件,而且配置文件里也不需要写那么多东西,对新手是真的友好。
下面就直接放代码了:
数据库:
CREATE TABLE `user` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(255) NOT NULL,
`age` int(11) NOT NULL,
`sex` varchar(255) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8;
包结构:
pom.xml
<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/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.cm</groupId>
<artifactId>springboot</artifactId>
<packaging>war</packaging>
<version>0.0.1-SNAPSHOT</version>
<name>springboot Maven Webapp</name>
<url>http://maven.apache.org</url>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
<!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-parent -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.9.RELEASE</version>
<type>pom</type>
</dependency>
<!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-web -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<version>2.0.4.RELEASE</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-tomcat -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
<version>2.1.2.RELEASE</version>
</dependency>
<!-- servlet依赖. -->
<!-- https://mvnrepository.com/artifact/javax.servlet/javax.servlet-api -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
<scope>provided</scope>
</dependency>
<!-- https://mvnrepository.com/artifact/javax.servlet/jstl -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.apache.tomcat.embed/tomcat-embed-jasper -->
<dependency>
<groupId>org.apache.tomcat.embed</groupId>
<artifactId>tomcat-embed-jasper</artifactId>
<version>8.5.42</version>
</dependency>
<!-- mysql-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.21</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-data-jpa -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
<version>2.1.4.RELEASE</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.mybatis.spring.boot/mybatis-spring-boot-starter -->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.0.0</version>
</dependency>
</dependencies>
<build>
<finalName>springboot</finalName>
</build>
</project>
配置文件:
application.properties
spring.mvc.view.prefix=/WEB-INF/jsp/
spring.mvc.view.suffix=.jsp
server.port=8080
server.servlet.context-path=/
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/smbms?characterEncoding=UTF-8
spring.datasource.username=root
spring.datasource.password=123456
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.jpa.properties.hibernate.hbm2ddl.auto=update
实体类:
package com.cm.entity;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;
@Entity
@Table(name="user")
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name="id")
private int id;
@Column(name="name")
private String name;
@Column(name="age")
private int age;
@Column(name="sex")
private String sex;
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 int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
}
持久层:
UserDao.java
package com.cm.dao;
import org.springframework.data.jpa.repository.JpaRepository;
import com.cm.entity.User;
public interface UserDao extends JpaRepository<User, Integer>{
}
jpa这东西真的是深得我心,一点代码就解决了所有增删改查,而且jpa默认的是Hibernate,不需要写什么注解、xml什么的直接就能用了,看着就很清爽,而且,在单表crud方面,无敌!
service层
UserService.java
package com.cm.service;
import org.springframework.data.domain.Page;
import com.cm.entity.User;
public interface UserService {
Page<User> list(int start,int size);
void add(User user);
void delete(int id);
void update(User user);
User get(int id);
}
UserServiceImpl.java
package com.cm.service;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Pageable;
import org.springframework.data.domain.Sort;
import org.springframework.stereotype.Service;
import com.cm.dao.UserDao;
import com.cm.entity.User;
@Service
public class UserServiceImpl implements UserService{
@Autowired
UserDao userDao;
@Override
public Page<User> list(int start,int size) {
start=start<0?0:start;
Sort sort=new Sort(Sort.Direction.ASC,"id");
Pageable pageable=PageRequest.of(start, size,sort);
return userDao.findAll(pageable);
}
@Override
public void add(User user) {
// TODO Auto-generated method stub
userDao.save(user);
}
@Override
public void delete(int id) {
// TODO Auto-generated method stub
userDao.deleteById(id);
}
@Override
public void update(User user) {
// TODO Auto-generated method stub
userDao.save(user);
}
@Override
public User get(int id) {
// TODO Auto-generated method stub
return userDao.getOne(id);
}
}
控制层
UserController.java
package com.cm.controller;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import com.cm.entity.User;
import com.cm.service.UserService;
@Controller
public class UserController {
@Autowired
UserService userService;
@RequestMapping("/list")
public String list(Model model,@RequestParam(value="start",defaultValue="0")int start,
@RequestParam(value="size",defaultValue="3")int size) {
Page<User> page=userService.list(start, size);
model.addAttribute("page",page);
return "list";
}
@RequestMapping("/add")
public String add(User user) {
userService.add(user);
return "redirect:list";
}
@RequestMapping("/update")
public String update(User user) {
userService.update(user);
return "redirect:list";
}
@RequestMapping("/delete")
public String delete(int id) {
userService.delete(id);
return "redirect:list";
}
@RequestMapping("/edit")
public String get(Model model,int id) {
User user=userService.get(id);
model.addAttribute("user",user);
return "edit";
}
}
最后还有一个启动类,springboot启动方式也是挺有意思的了,让我想起来当年在控制台输出hello word的感觉,哈哈
SpringbootApplication.java
package com.cm;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class SpringbootApplication {
public static void main(String[] args) {
SpringApplication.run(SpringbootApplication.class, args);
}
}
最后是两个jsp
list.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<div align="center">
</div>
<div style="width:500px;margin:20px auto;text-align: center">
<table align='center' border='1' cellspacing='0'>
<tr>
<td>编号</td>
<td>姓名</td>
<td>年龄</td>
<td>性别</td>
<td>编辑</td>
<td>删除</td>
</tr>
<c:forEach items="${page.content}" var="c">
<tr>
<td>${c.id}</td>
<td>${c.name}</td>
<td>${c.age}</td>
<td>${c.sex}</td>
<td><a href="edit?id=${c.id}">编辑</a></td>
<td><a href="delete?id=${c.id}">删除</a></td>
</tr>
</c:forEach>
</table>
<br>
<div>
<a href="?start=0">[首 页]</a>
<a href="?start=${page.number-1}">[上一页]</a>
<c:if test="${page.number<page.totalPages-1}">
<a href="?start=${page.number+1}">[下一页]</a>
</c:if>
<a href="?start=${page.totalPages-1}">[末 页]</a>
</div>
<br>
<form action="add" method="post">
姓名 <input name="name"> <br>
年龄<input name="age"> <br>
性别 <input name="sex"> <br>
<button type="submit">提交</button>
</form>
</div>
edit.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8" isELIgnored="false"%>
<div style="margin:0px auto; width:500px">
<form action="/update" method="post">
姓名: <input name="name" value="${user.name}"> <br>
年龄: <input name="age" value="${user.age}"> <br>
性别: <input name="sex" value="${user.sex}"> <br>
<input name="id" type="hidden" value="${user.id}">
<button type="submit">提交</button>
</form>
</div>
以上就是全部代码了,因为springboot是在how2j上学的,所以很多地方都是借鉴了站长的写法
运行效果如下:
edit
写的时候也是有许许多多小错误,就是这些小错误搞得我改bug花的时间比敲代码的时间还长,还好最后运行成功了,不然非得难受死。代码这东西不多敲敲永远不知道它会报多少奇形怪状的错误。