1、技术概述,描述这个技术是做什么?学习该技术的原因,技术的难点在哪里。
Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程。本人在项目中负责后端开发,学习这个能快速有效地建立实体类,关联更改数据库,
难点在于需要掌握一定地spring基础。
2、技术详述,描述你是如何实现和使用该技术的,要求配合代码和流程图详细描述。可以再细分多个点,分开描述各个部分。
这次由于本人负责后端的开发,且于几个组员共同进行,所以任务相对没那么重,主要使用spring boot写了数据库在后端代码中的实体类于对应字段,实现了对数据库的增删改查等一系列操作,同时使用
一些算法实现了前端所要求的部分功能,并用了一些算法进行改进。spring boot的一大优势就是能够快速实现数据库的操作,只要提前关联好数据库,定义实体类对应数据库中的表,使实体类中的相应元素与数据库表中
的对应字段相对于就可以通过对实体类的操作,快速更改变动数据库中的对应表和字段。
比如数据库里有一个用户表,那么可以先写一个用户实体类UserEntity,代码如下:
@Entity
@Table(name = "user", schema = "", catalog = "pinezone")
public class UserEntity implements Comparable{
private int id;
private String name;
private String password;
private int sex;
private Timestamp date;
private String phone;
private String sno;
private String profile;
private int level;
private Long pid;
private int state;
······
}
类中的元素id,name等分别一一对应数据库user表中的id,name等字段
然后用定义接口Userdao,利用jpa,将实体对象持久化到数据库表中:
package com.sgxqwyh.pinezone.dao;
import com.sgxqwyh.pinezone.pojo.UserEntity;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
import org.springframework.stereotype.Repository;
import java.util.List;
@Repository
public interface UserDAO extends JpaRepository {
//章权
@Query(value = "SELECT sex,count(id) FROM pinezone.user group by sex;", nativeQuery = true)
public List
里面可以快速定义查找方法,如通过电话号码查询某一个用户findByPhone();findby+查询条件(可以有多个),实现快速查找,这些框架会自动实现,无需加上复杂的
sql语句实现
接下来便可利用UserDao类实现数据库操作了:
//查询一个用户
@GetMapping(value = "/user")
public UserEntity userSelect(@RequestParam("id") Integer id) {
return userDAO.findById(id).get();
}
因为根据主键查找会自动生成函数和实现,所以这里只需要利用findByid就可以查询某一个id号的用户
下面为一个完整的流程图:
3、技术使用中遇到的问题和解决过程。
再删除或改动某一个数据库某一个表的组件时,由于另一个或多个表中的外键是该表的主键,所以要一起更改,加入一个个对应地改,比较麻烦
解决方法:利用数据表的联级进行删除或修改数据
比如有两个表User表和Role表,User表中有一个role_id的字段表示角色id号,与Role表中的id(主键)字段对应,这里可以采取下面的解决方法:
Role代码:
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id")
private Integer id;
@Column(name = "name")
private String name;
@OneToMany(cascade = {CascadeType.REMOVE},mappedBy = "role")
private Set userSet = new HashSet<>();
User表代码:
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id")
private Long id;
@Column(name = "name")
private String name;
@Column(name = "role_id",insertable = false,updatable = false)
private Integer role_id;
@ManyToOne(cascade = CascadeType.PERSIST)
@JoinColumn(name = "role_id")
private Role role;
利用一对多和多对一关系,这样的话,假如要删除Role表中某一个id为xx的记录,那么User表中所有role_id为xx的记录都将会被删除。
4、进行总结。
spring boot是对spring框架的延伸,其中一个很好的地方就是能简化数据库操作,当然还有很多方便的地方,因为我只是用它服务我所要的领域,所以有些细节的地方我还
不是很懂。但总体而言,这个技术很适合后端开发者学习和利用。
5、参考的文献、博客(标题、作者、链接)。
SpringBoot 零基础教学——以东以南
Spring Boot -01- 快速入门篇(图文教程)——肖朋伟
jpa OneToMany级联操作详解之级联删除——eddle