SpringBoot基本操作(三)——SpringBoot整合SpringDataJpa(有demo)

SpringBoot2.0笔记

(一)SpringBoot基本操作——环境搭建及项目创建(有demo)

(二)SpringBoot基本操作——使用IDEA打war包发布及测试

(三)SpringBoot基本操作——SpringBoot整合SpringDataJpa(有demo)

(四)SpringBoot基本操作——SpringBoot使用RedisTemplate整合Redis(有demo)

(五)SpringBoot基本操作——SpringBoot使用Jedis整合Redis(有demo)

(六)SpringBoot基本操作——SpringBoot使用Junit4单元测试(有demo)

(七)SpringBoot基本操作——SpringBoot整合Shiro权限管理(完整demo+界面)

 

注:本篇完成对用户对象的表生成,以及最基本的CRUD(增删改查)操作,demo可直接下载按照readme给出的链接测试

本文使用idea工具构建Springboot2.0+SpringMvc+Thymeleaf+SpringDataJPA+MySql项目

GitHub地址:https://github.com/jwwam/springbootJpa.git

一、编写整合代码

1.新建User实体,生成用户表

由于我们引入了lombok,所以直接使用@Data注解会自动帮我们生成对应的get/set以及toString方法,无需再手动编写。编写BaseEntity是基本操作,通过继承方便我们使用公共字段。

User.java

package com.springboot.demo.entity;

import lombok.Data;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Table;

/**
 * @ClassName: User
 * @Auther: zhangyingqi
 * @Date: 2018/8/27 17:17
 * @Description:
 */
@Entity
@Table(name = "user")
@Data
public class User extends BaseEntity{
    @Column(name = "name", length = 100)
    private String name;

    @Column(name = "age")
    private int age;
}

BaseEntity.java

package com.springboot.demo.entity;

import java.util.Date;

import javax.persistence.Column;
import javax.persistence.Id;
import javax.persistence.MappedSuperclass;

import org.hibernate.annotations.GenericGenerator;

@MappedSuperclass
public class BaseEntity {
    @Id
    //@GeneratedValue(strategy = GenerationType.AUTO)
    @GenericGenerator(name = "uuid", strategy = "uuid")
    protected String id;

    @Column(name= "create_date") //创建时间
    Date createDate = new Date();

    @Column(name= "update_date")//修改时间
    Date updateDate;

    public Date getCreateDate() {
        return createDate;
    }

    public void setCreateDate(Date createDate) {
        this.createDate = createDate;
    }

    public Date getUpdateDate() {
        return updateDate;
    }

    public void setUpdateDate(Date updateDate) {
        this.updateDate = updateDate;
    }

	public String getId() {
		return id;
	}

	public void setId(String id) {
		this.id = id;
	}



}

2.编写service接口及实现

UserService.java

其中包含增删改查部分的接口

package com.springboot.demo.service;

import com.springboot.demo.entity.User;

import java.util.List;

public interface UserService {
    User save(User user);

    User findById(String id);

    void delete(User user);

    List findAll();
}

UserServiceImpl.java

package com.springboot.demo.service.impl;

import com.springboot.demo.dao.UserDao;
import com.springboot.demo.entity.User;
import com.springboot.demo.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

/**
 * @ClassName: UserServiceImpl
 * @Auther: zhangyingqi
 * @Date: 2018/8/27 17:26
 * @Description:
 */
@Service(value = "userService")
public class UserServiceImpl implements UserService{
    @Autowired
    UserDao userDao;

    @Override
    public User save(User user) {
        return userDao.save(user);
    }

    @Override
    public User findById(String id) {
        return userDao.findById(id);
    }

    public void delete(User user) {
        userDao.delete(user);
    }

    @Override
    public List findAll() {
        return userDao.findAll();
    }
}

3.编写具体的持久化Dao层操作

UserDao.java

由于jpa会自动解析方法名,因此像通过id查找对象只需写明findById,表示通过id去检索数据,其他字段一样。

另外我们通过继承jpa原生接口可以获取很多方法,无需再自己去编写具体的SQL语句

package com.springboot.demo.dao;

import com.springboot.demo.entity.User;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
import org.springframework.data.repository.PagingAndSortingRepository;
import org.springframework.transaction.annotation.Transactional;

@Transactional
public interface UserDao extends PagingAndSortingRepository,JpaSpecificationExecutor,JpaRepository {
    User findById(String id);
}

4.编写业务逻辑Controller层代码

UserController.java

package com.springboot.demo.controller;

import com.springboot.demo.base.controller.BaseController;
import com.springboot.demo.base.utils.StateParameter;
import com.springboot.demo.entity.User;
import com.springboot.demo.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;

import javax.servlet.http.HttpServletRequest;
import java.util.Date;
import java.util.List;

/**
 * @ClassName: UserController
 * @Auther: zhangyingqi
 * @Date: 2018/8/27 17:30
 * @Description:
 */
@Controller
@RequestMapping(value="/user")
public class UserController extends BaseController{
    @Autowired
    UserService userService;

    /**
     * @auther: zhangyingqi
     * @date: 17:37 2018/8/27
     * @param: [request, user]
     * @return: org.springframework.ui.ModelMap
     * @Description: 用户保存&更新
     */
    @RequestMapping(value="/add", method = RequestMethod.POST)
    @ResponseBody
    public ModelMap add(User user){
        try {
            if(StringUtils.isEmpty(user.getId())){
                user.setId(getUuid());
            }else{
                user.setUpdateDate(new Date());
            }
            userService.save(user);
            logger.info("保存成功");
            return getModelMap(StateParameter.SUCCESS, user, "保存成功");
        } catch (Exception e) {
            e.printStackTrace();
            return getModelMap(StateParameter.FAULT, null, "保存失败");
        }
    }

    /**
     * @auther: zhangyingqi
     * @date: 17:47 2018/8/27
     * @param: [id]
     * @return: org.springframework.ui.ModelMap
     * @Description: 删除用户
     */
    @RequestMapping(value="/delete", method = RequestMethod.GET)
    @ResponseBody
    public ModelMap delete(String id){
        try {
            User user = userService.findById(id);
            if(user==null){
                return getModelMap(StateParameter.FAULT, user, "找不到该用户");
            }
            userService.delete(user);
            logger.info("删除成功");
            return getModelMap(StateParameter.SUCCESS, null, "删除成功");
        } catch (Exception e) {
            e.printStackTrace();
            return getModelMap(StateParameter.FAULT, null, "删除失败");
        }
    }

    /**
     * @auther: zhangyingqi
     * @date: 17:47 2018/8/27
     * @param: [request]
     * @return: java.lang.String
     * @Description: 查询用户列表
     */
    @RequestMapping(value="/list")
    public String view(HttpServletRequest request){
        List list = userService.findAll();
        request.setAttribute("list", list);
        logger.info("返回列表页面");
        return "/demoPage/listPage";
    }

}

到此看下目录结构,还差一个列表界面

SpringBoot基本操作(三)——SpringBoot整合SpringDataJpa(有demo)_第1张图片

5.添加查看列表页面

listPage.html




    
    用户列表


    
用户名称 年龄 创建时间

至此所有的准备工作完成,接下来我们测试一下。

二、启动测试

1.添加&更新数据

发送post请求:http://localhost:8080/user/add?name=老王&age=25

其实这里实质还是get请求只为了方便测试,为了不使用明文传参,实际当中我们基本都是通过form表单或者Ajax使用Post请求来提交数据,所以后台我使用Post接收。

返回保存成功,查看数据库新增了一条数据。

SpringBoot基本操作(三)——SpringBoot整合SpringDataJpa(有demo)_第2张图片

2.数据更新

我们直接上传已经存在的记录,jpa就会更新而不会重新添加,很方便,下面的记录显示了更新时间说明数据被更新成功了,

name字段值由“老王”更新为“老王的儿子”。

SpringBoot基本操作(三)——SpringBoot整合SpringDataJpa(有demo)_第3张图片

3.数据删除

SpringBoot基本操作(三)——SpringBoot整合SpringDataJpa(有demo)_第4张图片

4.查看数据列表

暂时不包含分页,具体的分页我会在后续的文章中详细介绍请关注。查询列表:http://localhost:8080/user/list

SpringBoot基本操作(三)——SpringBoot整合SpringDataJpa(有demo)_第5张图片

补一个pom包



	4.0.0

	com.springboot
	springbootJpa
	0.0.1-SNAPSHOT
	war

	springbootJpa
	Demo project for Spring Boot

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

	
		UTF-8
		UTF-8
		1.8
	

	
		
			org.springframework.boot
			spring-boot-starter-tomcat
			
		
		
			org.springframework.boot
			spring-boot-starter-data-jpa
			
				
					org.hibernate
					hibernate-entitymanager
				
				
					org.hibernate
					hibernate-core
				
			
		
		
			org.hibernate
			hibernate-core
			5.2.10.Final
		
		
			org.springframework.boot
			spring-boot-starter-data-redis
		
		
			org.springframework.boot
			spring-boot-starter-mail
		
		
			org.springframework.boot
			spring-boot-starter-thymeleaf
		
		
			org.springframework.boot
			spring-boot-starter-web
		

		
			mysql
			mysql-connector-java
			runtime
		
		
			org.projectlombok
			lombok
			true
		
		
			org.springframework.boot
			spring-boot-starter-test
			test
		
	

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



全文完,2018/8/28

写博文不易,转载请注明出处。

 

 

 

你可能感兴趣的:(SpringBoot)