SpringBoot + Maven + Hibernate ( 简单实现CRUD功能 )
工具:idea、mariadb数据库
创建一个项目 ( student )
........(使用idea创建一个springboot项目,这里我就不多说了)
Maven 中的依赖
<?xml version="1.0" encoding="UTF-8"?>
<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/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion> <!-- 父模块 -->
<!-- 包含了自动配置、日志....... -->
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.4.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent> <groupId>com.demo</groupId>
<artifactId>student</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>student</name>
<description>Demo project for Spring Boot</description> <properties>
<java.version>1.8</java.version>
</properties> <dependencies> <!-- springboot 自动配置 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency> <!-- 测试框架 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency> <!-- web -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<version>2.1.3.RELEASE</version>
</dependency> <!-- jap 只是一个规范 -->
<!-- SpringDataJpa 是 jap规范 再次抽象封装,底层还是使用 Hibernate的JPA技术实现 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
<version>2.1.3.RELEASE</version>
</dependency> <!-- mariaDB 数据库 -->
<dependency>
<groupId>org.mariadb.jdbc</groupId>
<artifactId>mariadb-java-client</artifactId>
<version>2.3.0</version>
</dependency> </dependencies> <build>
<plugins>
<!-- maven 插件 -->
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build> </project>
创建 entity、dao、service、(service包还有一个impl包)、 controller 包

数据库

create table student(
stu_id int primary key auto_increment,
stu_number varchar(20) not null,
stu_name varchar(10) not null,
stu_age int not null,
stu_sex varchar(2) not null
)default charset=utf8; insert into student(stu_number,stu_name,stu_age,stu_sex) values
('A1001','欧可乐',19,'男'),
('B2001','啦啦啦',18,'女'),
('C3001','舞舞舞',18,'女'),
('D4001','飞飞飞',20,'男'),
('E5001','哒哒哒',19,'男');
配置application.yml 文件
yml格式
spring:
datasource:
driver-class-name: org.mariadb.jdbc.Driver
url: jdbc:mariadb://localhost:3306/test
username: oukele
password: oukele
jpa:
hibernate:
# 每次运行程序更新数据
ddl-auto: none
# 是否显示sql语句
show-sql: true
# 格式化sql语句
properties:
hibernate:
format_sql: true
# 设置数据库方言
database-platform: org.hibernate.dialect.MySQL5Dialect #mysql数据库
#spring:
# datasource:
# driver-class-name: com.mysql.cj.jdbc.Driver
# url: jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=UTF-8&useSSL=true
# username:
# password:
# jpa:
# hibernate:
# ddl-auto: none
# show-sql: true
# properties:
# hibernate:
# format_sql: true
# database-platform: org.hibernate.dialect.MySQL5Dialect
properties格式
spring.datasource.driver-class-name=org.mariadb.jdbc.Driver
spring.datasource.url=jdbc:mariadb://localhost:3306/test
spring.datasource.username=oukele
spring.datasource.password=oukele spring.jpa.hibernate.ddl-auto=none
spring.jpa.show-sql=true
spring.jpa.properties.hibernate.format_sql=true
spring.jpa.database-platform=org.hibernate.dialect.MySQL5Dialect
在entity包中新建一个Studen类
package com.demo.student.entity; import javax.persistence.*; /**
* 学生实体类
*
* @author OUKELE
* @create 2019-04-13 16:18
*/ //实体类的标志
@Entity
//对应的数据库表名
@Table(name = "student")
public class Student { @Id
@GeneratedValue(strategy = GenerationType.IDENTITY)//自增长主键
private int stuId; // 数据库字段名 不区分大小写
// 数据库名列为stu_number Hibernate 会按照驼峰命名规范帮我们转换成 stuNumber
//@Column(name = "stu_number")
private String stuNumber; private String stuName;
private int stuAge;
private String stuSex; public int getStuId() {
return stuId;
} public void setStuId(int stuId) {
this.stuId = stuId;
} public String getStuNumber() {
return stuNumber;
} public void setStuNumber(String stuNumber) {
this.stuNumber = stuNumber;
} public String getStuName() {
return stuName;
} public void setStuName(String stuName) {
this.stuName = stuName;
} public int getStuAge() {
return stuAge;
} public void setStuAge(int stuAge) {
this.stuAge = stuAge;
} public String getStuSex() {
return stuSex;
} public void setStuSex(String stuSex) {
this.stuSex = stuSex;
} @Override
public String toString() {
return "Student{" +
"stuId=" + stuId +
", stuNumber='" + stuNumber + '\'' +
", stuName='" + stuName + '\'' +
", stuAge=" + stuAge +
", stuSex='" + stuSex + '\'' +
'}';
}
}
在dao包中新建一个StudentDao接口,并继承 CrudRepository 接口
CrudRepository 着简单crud方法,默认滴
package com.demo.student.dao; import com.demo.student.entity.Student;
import org.springframework.data.repository.CrudRepository; public interface StudentDao extends CrudRepository<Student,Integer> { }
新建一个dao包,用于测试studentDao接口

package com.demo.student.dao; import com.demo.student.entity.Student;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner; import java.util.List; /**
* 测试接口
*
* @author OUKELE
* @create 2019-04-13 16:43
*/ @RunWith(SpringRunner.class)
@SpringBootTest
public class StudentDaoTest { @Autowired
private StudentDao studentDao; // 测试 查询 student 表中所有的数据
@Test
public void getList(){
List<Student> list = (List<Student>) studentDao.findAll();
System.out.println(list);
} // 测试 向 student 表 新增一条记录
//......... }
接口测试

在service包新建一个我们的接口(StudentService)
package com.demo.student.service;
import com.demo.student.entity.Student;
import java.util.List;
public interface StudentService {
List<Student> listAll();
int save(Student student);
int delete(int stuId);
int update(Student student);
}
在service包新建一个impl包 ,然后在impl包新建一个StudentServiceImpl类,并实现StudentSerice接口
package com.demo.student.service.Impl; import com.demo.student.dao.StudentDao;
import com.demo.student.entity.Student;
import com.demo.student.service.StudentService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import java.util.List; /**
* @author OUKELE
* @create 2019-04-13 18:24
*/ @Service
public class StudentServiceImpl implements StudentService { @Autowired
private StudentDao studentDao; @Override
public List<Student> listAll() {
return (List<Student>) studentDao.findAll();
} @Override
public int save(Student student) {
return studentDao.save(student)!= null ? 1:0;
} @Override
public int delete(int stuId) {
int i = 0;
try {
studentDao.deleteById(stuId);
i = 1;
} catch (Exception e) {
e.printStackTrace();
i = 0;
}
return i;
} @Override
public int update(Student student) {
return studentDao.save(student) !=null ? 1:0;
}
}
在controller包新建一个StudentController类
package com.demo.student.controller; import com.demo.student.entity.Student;
import com.demo.student.service.StudentService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*; import java.util.List; /**
* @author OUKELE
* @create 2019-04-14 17:24
*/ @RestController
@RequestMapping("/student")
public class StudentController { @Autowired
private StudentService studentService; @GetMapping("/list")
public Object list(){
List<Student> list = studentService.listAll();
if( list == null ) return "{\"msg\":\"无数据\"}";
return studentService.listAll();
} @PostMapping("/insert")
public String insert(Student student){
int save = studentService.save(student);
if (save>0)return "{\"msg\":\"新增成功\"}";
return "{\"msg\":\"新增失败\"}";
} @PostMapping("/update")
public String update(Student student){
int save = studentService.save(student);
if (save>0)return "{\"msg\":\"更新成功\"}";
return "{\"msg\":\"更新失败\"}";
} @GetMapping("/delete")
public String delete(@RequestParam int stuId){
int delete = studentService.delete(stuId);
if(delete >0)return "{\"msg\":\"删除成功\"}";
return "{\"msg\":\"删除失败\"}";
} }
启动项目,进行访问

演示项目源码:https://github.com/oukele/SpringBoot-Hibernate-demo1
SpringBoot + Maven + Hibernate ( 简单实现CRUD功能 )的更多相关文章
- SpringBoot整合Redis使用Restful风格实现CRUD功能
前言 本篇文章主要介绍的是SpringBoot整合Redis,使用Restful风格实现的CRUD功能. Redis 介绍 Redis 是完全开源免费的,遵守BSD协议,是一个高性能的key-valu ...
- 使用springboot实现一个简单的restful crud——01、项目简介以及创建项目
前言 之前一段时间学习了一些springboot的一些基础使用方法和敲了一些例子,是时候写一个简单的crud来将之前学的东西做一个整合了 -- 一个员工列表的增删改查. 使用 restful api ...
- 构建Springboot项目、实现简单的输出功能、将项目打包成可以执行的JAR包(详细图解过程)
1.构建SpringBoot项目 大致流程 1.新建工程 2.选择环境配置.jdk版本 3.选择 依赖(可省略.后续要手动在pom文件写) 4.项目名 1.1 图解建立过程 1.2 项目结构 友情提示 ...
- springboot + mybatis 的项目,实现简单的CRUD
以前都是用Springboot+jdbcTemplate实现CRUD 但是趋势是用mybatis,今天稍微修改,创建springboot + mybatis 的项目,实现简单的CRUD 上图是项目的 ...
- 【SSH三大框架】Hibernate基础第五篇:利用Hibernate完毕简单的CRUD操作
这里利用Hibernate操作数据库完毕简单的CRUD操作. 首先,我们须要先写一个javabean: package cn.itcast.domain; import java.util.Date; ...
- Springboot项目搭建(1)-创建,整合mysql/oracle,druid配置,简单的CRUD
源码地址:https://github.com/VioletSY/article-base 1:创建一个基本项目:https://blog.csdn.net/mousede/article/detai ...
- java框架之SpringBoot(6)-Restful风格的CRUD示例
准备 环境 IDE:Idea SpringBoot版本:1.5.19 UI:BootStrap 4 模板引擎:thymeleaf 3 效果:Restful 风格 CRUD 功能的 Demo 依赖 &l ...
- 使用Struts2+Hibernate开发学生信息管理功能1
第一章:Struts2与Hibernate整合 1.课程简介 2.界面原型演示 3.Struts2与Hibernate整合 4.创建实体类 5.生成实体映射文件 6.生成表结构 1.课程简介 Stru ...
- SpringBoot基础学习(一) SpringBoot概念、简单案例实现、单元测试及热部署讲解
SpringBoot概念 Spring优缺点分析 Spring优点 Spring是Java企业版(Java Enterprise Edition,JEE,也称J2EE)的轻量级代替品,无需开发重量级的 ...
随机推荐
- 洛谷 题解 P2280 【[HNOI2003]激光炸弹】
一道很好的二维前缀和模板题. 什么是二维前缀和? 从这张图可以看出前缀和的求法: Map[i][j]=Map[i-1][j]+Map[i][j-1]-Map[i-1][j-1]+Map[i][j]; ...
- POJ 1161 Walls【floyd 以面为点建图】
题目链接:http://poj.org/problem?id=1161 题目大意: 1.给出m个区域,n个俱乐部点.接下来是n个俱乐部点以及各个区域由什么点围成.求一个区域到各个俱乐部点的距离之和最小 ...
- [转帖]ubuntu 修改 apt源的方法
https://www.cnblogs.com/dadonggg/p/11129973.html ubuntu 和 centos 是不一样的 ubunut 里面 用deb开头 放置到 /etc/apt ...
- # OpenGL常用函数详解(持续更新)
OpenGL常用函数详解(持续更新) 初始化 void glutInit(int* argc,char** argv)初始化GULT库,对应main函数的两个参数 void gultInitWindo ...
- Thinkphp5+Layui上传图片
ThinkPHP是一个免费开源的,快速.简单的面向对象的轻量级PHP开发框架,是为了敏捷WEB应用开发和简化企业应用开发而诞生的.ThinkPHP从诞生以来一直秉承简洁实用的设计原则,在保持出色的性能 ...
- 宝塔面板liunx开启ssl域名后无法访问解决方法
不打开宝塔面板的ssl会不安全,打开了就会提示ssl证书不能使用的错误 如下所示: 您的连接不是私密连接 攻击者可能会试图从 你的ip 窃取您的信息(例如:密码.通讯内容或信用卡信息).了解详情 NE ...
- S02_CH15_ AXI_OLED 实验
S02_CH15_ AXI_OLED 实验 在上一个例子中,主要是以软件功能为主,采用了软件模拟SPI时序进行控制OLED.这样做的好处是灵活,但是牺牲了效率.本章采用的方式是让SPI驱动由Veril ...
- 并不对劲的CF1236D&E:Alice&Doll&UnfairGame
CF1236D Alice&Doll 题目描述 有一个机器人在一个\(n\times m\)的有\(k\)个障碍网格上移动,上北下南左西右东. 它一开始在第一行第一列,面朝东边.它在每个格子上 ...
- 分布式session一致性问题
1.分布式session一致性 :指服务器集群情况下session共享的问题. 2.session的作用:保存服务器(tomcat)与客户端(浏览器)整个通讯的会话基本信息. 3.session应用场 ...
- java方法可变参数研究
1 问题引出 (1)缘由 最近在研究如何在项目中引入Redis缓存,于是遇到可变参数这个疑惑点,之前没有好好研究过,为了避免项目后期出现问题. (2)项目相关技术 SpringBoot Redis K ...