目录
1.前言
学校安排两周的项目实践学习,所以学了一段时间的SpringBoot,因为SpringMvc还没有学完,如果单独学起来SpringBoot并且做项目的话很难,还好在项目实践老师的带领下多多少少领会点了东西,尤其对于基于注解开发的整个流程框架的步骤以及逻辑实现原理。其次学到了不少JavaScript,的知识。以及前端框架的灵活运用。在此次系统中运用了SpringBoot框架集成Maven依赖,以及前端框架Bootstrap开发,很多东西直接调用,大大减少了代码量。
2.系统内容
2.1 登录页面、
登录页面首先搭建前端页面,然后根据后端数据库表中相关信息做出判断。并且附有注册的超链接。
2.2 注册页面
注册页面也是先搭建前端页面,在这里用到了一个阿里云功能,就是根据邮箱发验证码然后根据验证码进行注册,有点符合日常系统的使用规范性。注册成功后则将数据写进后端数据库表中。
2.3 系统首页
系统首页没有太多的后端逻辑功能,就是在用户登录成功后通过后端将管理员的名字保存到本地浏览器中,然后在前端中获取,最后展示到页面中。
2.4 服务列表
服务列表页面中包含的前后端知识,比较多。当在页面刷新完成时,数据就会显示在页面这是利用Jquery里面的一些知识完成的我也没有深入研究。其次对于页面中的分页,要实现前后端逻辑功能,并且在页面中附有模糊查询的搜索框,也需要后端的支持。
2.5 服务修改
服务修改在后端要发两次请求,首先是查询该id的对象信息,输出到页面中,当做出修改后,再次发出保存的请求。
2.6 会员管理
会员管理等同于服务列表页面,只不过增加了批量删除,会员录入的功能。
2.7 会员录入
录入修改信息,写到了一块,首先前端通过输入手机号等相关信息,然后后端通过手机信息查询是否有该对象,如果没有则执行录入新会员功能,如果有的话则执行修改功能。
3.部分代码
3.1 实体类
3.11 admin
package tech.aistar.model.pojo;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.Table;
import java.io.Serializable;
@NoArgsConstructor
@AllArgsConstructor
@Data
@Entity
@Table(name="t_admin")
public class Admin implements Serializable {
@Id
@GeneratedValue
private Integer id;
private String username;
private String password;
private String email;
}
3.12 item
package tech.aistar.model.pojo;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.Table;
@NoArgsConstructor
@AllArgsConstructor
@Data
@Entity
@Table(name="t_item")
public class Item {
@Id
@GeneratedValue
private Integer id;
private String iname;//项目名称
private Integer price;//项目价格
private String itime;//项目时间
private String location;//项目所在楼层
}
3.13 member
package tech.aistar.model.pojo;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.springframework.stereotype.Component;
import javax.persistence.*;
import java.util.Date;
@Component
@NoArgsConstructor
@AllArgsConstructor
@Data
@Entity //实体类
@Table(name="t_member")
public class Member {
@Id
@GeneratedValue
private Integer id;
private String name;
private Integer age;//
private String gender;
private String tel;
private String money;//消费
private String items;//服务
@Column(columnDefinition = "datetime")
@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
private Date createDate;
}
3.14 resultreturn
package tech.aistar.model.pojo;
import java.io.Serializable;
public class ResultReturn implements Serializable {
private String code;
private String msg;
private Object data;
public ResultReturn() {
}
public ResultReturn(String code, String msg) {
this.code = code;
this.msg = msg;
}
public ResultReturn(String code, String msg, Object data) {
this.code = code;
this.msg = msg;
this.data = data;
}
public String getCode() {
return code;
}
public void setCode(String code) {
this.code = code;
}
public String getMsg() {
return msg;
}
public void setMsg(String msg) {
this.msg = msg;
}
public Object getData() {
return data;
}
public void setData(Object data) {
this.data = data;
}
@Override
public String toString() {
return "ResultReturn{" +
"code='" + code + '\'' +
", msg='" + msg + '\'' +
", data=" + data +
'}';
}
}
3.2 Dao层
3.2.1 admindao
package tech.aistar.dao;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
import tech.aistar.model.pojo.Admin;
import javax.transaction.Transactional;
@Transactional
public interface IAdminDao extends JpaRepository<Admin,Integer> {
//判断用户是否存在
@Query(value = "select * from t_admin where username=?1",nativeQuery = true)
Admin loadByUsername(String username);
}
3.2.2 itemdao
package tech.aistar.dao;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Modifying;
import org.springframework.data.jpa.repository.Query;
import tech.aistar.model.pojo.Admin;
import tech.aistar.model.pojo.Item;
import javax.transaction.Transactional;
import java.util.List;
@Transactional
public interface IItemDao extends JpaRepository<Item,Integer> {
//分页
Page<Item> findById(Integer id, Pageable pageable);
//修改
//根据id查询相关信息
@Query(value = "select * from t_item where id=?1",nativeQuery = true)
Item loadById(Integer id);
//
Item saveAndFlush(Item item);
//模糊查询
//@Modifying
@Query(value = "select * from t_item where iname like %?1%",nativeQuery = true)
Page<Item> findByNamelike(String name,Pageable pageable);
}
3.2.3 memberdao
package tech.aistar.dao;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Modifying;
import org.springframework.data.jpa.repository.Query;
import tech.aistar.model.pojo.Admin;
import tech.aistar.model.pojo.Item;
import tech.aistar.model.pojo.Member;
import javax.transaction.Transactional;
import java.util.List;
@Transactional
public interface IMemberDao extends JpaRepository<Member,Integer>{
@Modifying
@Query("delete from Member where id=?1")
int delById(Integer id);
@Query(value = "select * from t_member where name=?1" ,nativeQuery = true)
Member loadByName(String name);
@Query(value = "select * from t_member where id=?1" ,nativeQuery = true)
Member loadById(Integer id);
@Query(value = "select * from t_member where tel=?1" ,nativeQuery = true)
Member loadByTel(String tel);
}
3.3 Controller 层
3.3.1 admincontroller
package tech.aistar.controller;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.mail.SimpleMailMessage;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import tech.aistar.model.pojo.Admin;
import tech.aistar.model.pojo.ResultReturn;
import tech.aistar.service.IAdminService;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
@RestController
@RequestMapping("admin")
public class AdminCoutroller {
@Autowired
private IAdminService adminService;
@Autowired
private JavaMailSender sender;
//登录
@PostMapping("login")
public ResultReturn login(HttpServletRequest request,String user,String password){
//调用Service中根据用户名查找用户的方法
Admin admin=adminService.loadByUsername(user);
//判断该admin是否为null
if(admin==null){
return new ResultReturn("404","sory,用户不存在!");
}
else {
System.out.println(admin.getPassword());
if(password.equals(admin.getPassword())){
return new ResultReturn("200","登录成功!",admin.getUsername());
}
else{
return new ResultReturn("5xx","登录失败!");
}
}
}
//向邮箱发送验证码
@GetMapping("sendCode")
public ResultReturn sendCode( HttpServletRequest request ,String email) {
//发送验证码到email中去.
SimpleMailMessage msg=new SimpleMailMessage();
//设置发送⽅ - application-dev.yml => username
msg.setFrom("[email protected]");
msg.setSubject("阿⾥云验证码");
//随机⼀个6位数
int codeInt = (int) (Math.random()*100000+900000);
String code = String.valueOf(codeInt);//int类型=>String类型
msg.setText(code);
msg.setTo(email);
//发送
sender.send(msg);
//将刚刚生成的验证码存储到session中
HttpSession session=request.getSession();
session.setAttribute("Code",code);
return new ResultReturn("200","查收邮件!查看验证码!");
}
//注册
@PostMapping("register")
public ResultReturn register(HttpServletRequest request,String username,String pwd,String pwd2,String email, String code){
//判断输入的用户名是否存在
Admin admin=adminService.loadByUsername(username);
if(admin!=null){
return new ResultReturn("404","sorry,该用户存在!");
}
else{
HttpSession session=request.getSession();
String codeSession=(String) session.getAttribute("Code");
System.out.println(codeSession);
if (null==codeSession){
return new ResultReturn("500","sorry,请先发送验证码!");
}
//验证码的比较
if (codeSession.equals(code)&&pwd.equals(pwd2)){
//往表中添加相关信息
Admin admin1=new Admin();
admin1.setUsername(username);
admin1.setPassword(pwd);
admin1.setEmail(email);
//保存
adminService.save(admin1);
return new ResultReturn("200","注册成功!");
}
else {
return new ResultReturn("402","密码不一致!或验证码错误");
}
//return new ResultReturn("5xx","注册失败!");
}
}
}
3.3.2 itemcontroller
package tech.aistar.controller;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.web.bind.annotation.*;
import tech.aistar.model.pojo.Item;
import tech.aistar.model.pojo.ResultReturn;
import tech.aistar.service.IItemService;
import java.util.List;
@RestController
@RequestMapping("item")
public class ItemController {
@Autowired
private IItemService itemService;
@GetMapping("index")
public ResultReturn index(String name, @RequestParam(defaultValue = "1") Integer
pageNum,@RequestParam(defaultValue = "4") Integer pageSize) {
//System.out.println("status:"+status);
//查询所有的信息
Page<Item> page = itemService.loadAll(name, pageNum, pageSize);
//将这个数据返回到前端
//@ResponseBody=>jackson⼯具=>java对象转换成json字符串
//需要对⽇期进⾏进⼀步处理
return new ResultReturn("200", "所有核酸样本信息", page);
}
@GetMapping("update")
public ResultReturn update(Integer id){
Item item=itemService.loadById(id);
return new ResultReturn("200","查询成功",item);
}
@PostMapping("update2")
public ResultReturn update2(String name,Integer price,String time,String location,Integer id){
Item item=itemService.loadById(id);
//修改属性
item.setIname(name);
item.setPrice(price);
item.setItime(time);
item.setLocation(location);
item.setId(id);
//保存
itemService.saveAndflush(item);
return new ResultReturn("200","修改成功!");
}
}
3.3.3 membercontroller
package tech.aistar.controller;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.web.bind.annotation.*;
import tech.aistar.dao.IMemberDao;
import tech.aistar.model.pojo.Item;
import tech.aistar.model.pojo.Member;
import tech.aistar.model.pojo.ResultReturn;
import tech.aistar.service.IMemberService;
import java.util.Date;
@RestController
@RequestMapping("member") //根据模块先定义一个路径
public class MemberController {
@Autowired
private IMemberService memberService;
@Autowired
private IMemberDao memberDao;
@GetMapping("index")
public ResultReturn index(@RequestParam(defaultValue = "1") Integer pageNum, @RequestParam(defaultValue = "4") Integer pageSize){
//查询所有的信息
Page<Member> page = memberService.loadAll(pageNum,pageSize);
//将这个数据返回到前端
//@ResponseBody=>jackson⼯具=>java对象转换成json字符串
//需要对⽇期进⾏进⼀步处理
return new ResultReturn("200","所有会员信息",page);
}
@GetMapping("search")
public ResultReturn search(String tel){
//查询所有的信息
Member member = memberService.loadBytel(tel);
if(member==null){
return new ResultReturn("404","会员不存在");
}
//将这个数据返回到前端
//@ResponseBody=>jackson⼯具=>java对象转换成json字符串
//需要对⽇期进⾏进⼀步处理
return new ResultReturn("200","查询成功",member);
}
@PostMapping("del")
public ResultReturn del(Integer id){
int count = memberService.delById(id);
if(count!=0)
return new ResultReturn("200","删除成功!");
return new ResultReturn("500","删除失败!");
}
@PostMapping("delMore")
public ResultReturn delMore(String sids){
//字符串处理
if(null!=sids && sids.length()>0){
//切割
String[] arr = sids.split(":");
for (String id : arr) {
//corejava - 基操
//String类型转成Integer类型[包装类型]
memberService.delById(Integer.valueOf(id));
}
}
return new ResultReturn("200","删除成功!");
}
@PostMapping("add")
public ResultReturn add(Member member){
System.out.println("tel:"+member.getTel()+"money:"+member.getMoney());
if(member.getMoney().equals("")||member.getTel().equals("")){
return new ResultReturn("500","新会员录⼊失败!");
}
Member member1 = memberDao.loadByTel(member.getTel());
if(member1==null){
// if(member.getMoney()==null||member.getTel()==null){
// return new ResultReturn("500","新会员录⼊失败!");
// }
//添加功能
member.setCreateDate(new Date());
//member.setMoney(100);
memberService.save(member);
return new ResultReturn("200","新会员录⼊成功!");
}else {
//修改功能
member1.setName(member.getName());
member1.setAge(member.getAge());
member1.setGender(member.getGender());
member1.setTel(member.getTel());
member1.setCreateDate(new Date());
member1.setMoney(member.getMoney());
member1.setItems(member.getItems());
memberDao.saveAndFlush(member1);
return new ResultReturn("404","会员信息修改成功!");
}
// //查询数据--修改功能
// Member member2 =memberDao.loadByTel(member.getTel()).get();
// member2.setName(member.getName());
// member2.setAge(member.getAge());
// member2.setGender(member.getGender());
// member2.setTel(member.getTel());
// member2.setCreateDate(new Date());
// member2.setMoney(member.getMoney());
// member2.setItems(member.getItems());
// memberDao.saveAndFlush(member2);
// return new ResultReturn("404","会员信息修改成功!");
}
}
其他代码就不一一上传了,ctrl+c,ctrl+v其实也挺累的,有兴趣的一起交流吧。