1、新建springboot工程,选中,JPA、JDBC、MYSQL;
2、在配置文件中配好相应的连接信息,以下是YML格式
spring:
datasource:
url: jdbc:mysql://10.0.75.1:3306/jpa?useUnicode=true&characterEncoding=UTF-8
driver-class-name: com.mysql.cj.jdbc.Driver
password: 123456
username: root
jpa:
hibernate:
# 策略是更新或创建数据表结构
ddl-auto: update
# 可以控制台显示SQL
show-sql: true
thymeleaf:
cache: false
3、建实体类,放在类路径下的“entity”目录下,配置好GET、SET方法,为使自动封装有效,需要配置好空的构造方法;
//使用JPA注解,配置映射关系
@Entity //告诉JPA这是一个实体类,和数据表映射
//使用以下注解来指定本实体类与哪个数据表对应,如果不指定name,则表名就是类的小写
@Table(name = "tbl_user")
public class user {
@Id //标注为这是一个主键
//以下标注为自增主键
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer id;
@Column(name = "last_name",length = 20) //这是数据表的一个字段
private String name;
//如name省略,则列名就是属性名
@Column(length = 50)
private String email;
4、建立实体类对应的repository
package com.backman.jpa.repository;
import com.backman.jpa.entity.user;
import org.springframework.data.jpa.repository.JpaRepository;
//以下泛型中,第一个是要操作的实体类名(与数据表对应的),第二个参数是表中主键的类型
//继承JpaRepository就有了CRUD和分页及排序功能
public interface UserRepository extends JpaRepository<user,Integer> {
}
5、建立Controller负责具体的数据操作
package com.backman.jpa.controller;
import com.backman.jpa.entity.user;
import com.backman.jpa.repository.UserRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Sort;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.*;
import java.util.List;
@Controller
public class UserController {
@Autowired
UserRepository userRepository;
String msg;
@GetMapping("/users")
public String getAll(Model model){
// List<user> users = userRepository.findAll();
List<user> users = userRepository.findAll(
new Sort(Sort.Direction.DESC,"id")
);
model.addAttribute("users",users);
model.addAttribute("msg",msg);
msg = "";
return "D_lists";
}
//添加用户
@GetMapping("/user")
public String toAddUser(Model model){
model.addAttribute("operator","add");
return "UserAdd";
}
@PostMapping("/user")
public String addUser(user user){
user save = userRepository.save(user);
msg = "用户【" + user.getName() + "】添加成功!";
return "redirect:/users";
}
//修改用户
@GetMapping("/user/{id}")
public String toEditUser(@PathVariable("id") Integer id,Model model){
user user = userRepository.getOne(id);
model.addAttribute("user",user);
model.addAttribute("operator","edit");
return "UserAdd";
}
@PutMapping("/user")
public String editUser(user user,Model model){
userRepository.saveAndFlush(user);
msg = "用户【" + user.getName() + "】修改完成";
return "redirect:/users";
}
//删除用户
@DeleteMapping("/user/{id}")
public String deleteUser(@PathVariable("id") Integer id){
user user = userRepository.getOne(id);
userRepository.deleteById(id);
msg = "用户【" + user.getName() + "】已被成功删除";
return "redirect:/users";
}
}
6、对应使用的前端是thymeleaf模板引擎
以下是users列表页
<div class="table-responsive">
<table class="table table-striped table-sm">
<thead>
<tr>
<th>ID号</th>
<th>用户名称</th>
<th>EMAIL</th>
<th>操作</th>
</tr>
</thead>
<tbody>
<tr th:each="user:${users}">
<td th:text="${user.id}"></td>
<td th:text="${user.name}"></td>
<td><a class="btn btn-sm btn-primary" th:href="@{/user/} + ${user.id}">修改</a>
<button th:attr="del_url=@{/user/} + ${user.id},del_user=${user.name}" class="btn btn-sm btn-danger del_btn" type="submit">删除</button>
</td>
</tr>
</tbody>
</table>
<form id="del_form" method="post">
<input type="hidden" name="_method" value="delete" />
</form>
</div>
<script>
$(".del_btn").click(function () {
if(confirm("确定要删除这个用户【"+ $(this).attr("del_user") +"】吗?"))
$("#del_form").attr("action",$(this).attr("del_url")).submit();
else
return false;
})
</script>
以下是user的新增和修改页
<div class="table-responsive">
<form th:action="@{/user}" method="post">
<input type="hidden" name="_method" value="put" th:if="${operator == 'edit'}" />
<input type="hidden" name="id" th:value="${user.id}" th:if="${operator == 'edit'}" />
<div class="form-group">
<label>用户名称</label>
<input type="text" class="form-control" name="name" th:value="${operator == 'edit' ? user.name : ''}" placeholder="用户名称">
</div>
<div class="form-group">
<label>EMAIL</label>
<input type="text" class="form-control" name="email" th:value="${operator == 'edit' ? user.email : ''}" placeholder="EMAIL">
</div>
<button class="btn btn-danger" type="submit" th:text="${operator == 'add' ? '添加' : '修改'}">提交</button>
</form>
</div>