目录
本文章向大家介绍Spring同时集成JPA与Mybatis,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
Spring ORM
Spring ORM 同时集成JPA与Mybatis
二、建立用户信息登记表
- DROP DATABASE IF EXISTS user_info;
-
- CREATE DATABASE user_info
- DEFAULT CHARACTER SET utf8
- DEFAULT COLLATE utf8_general_ci;
-
- use user_info;
-
- SET NAMES utf8mb4;
- SET FOREIGN_KEY_CHECKS = 0;
-
- -- ----------------------------
- -- Table structure for user
- -- ----------------------------
- DROP TABLE IF EXISTS `user`;
- CREATE TABLE `user` (
- `id` bigint(20) NOT NULL AUTO_INCREMENT,
- `name` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
- `email` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
- PRIMARY KEY (`id`) USING BTREE
- ) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;
-
- SET FOREIGN_KEY_CHECKS = 1;
三、Web应用项目集成mysql
-
-
-
mysql -
mysql-connector-java -
5.1.47 -
runtime -
-
-
-
com.alibaba -
druid-spring-boot-starter -
1.1.10 -
- ###数据源配置
- spring:
- datasource:
- type: com.alibaba.druid.pool.DruidDataSource
- username: root
- password: root
- driver-class-name: net.sf.log4jdbc.sql.jdbcapi.DriverSpy
- url: jdbc:log4jdbc:mysql://localhost:3306/user_info?serverTimezone=Asia/Shanghai&characterEncoding=utf8&useSSL=false&allowPublicKeyRetrieval=true
四、添加Spring Data JPA和Mybatis依赖
-
-
-
org.springframework.boot -
spring-boot-starter-data-jpa -
-
-
-
org.mybatis.spring.boot -
mybatis-spring-boot-starter -
1.3.2 -
五、添加数据表映射实体类
- /**
- * 用户类--映射表user
- *
- * @author zhuhuix
- */
- @Entity
- @Table(name="user_info")
- public class User implements Serializable {
- // 用户id
- @Id
- @GeneratedValue(strategy = GenerationType.IDENTITY)
- private Long id;
- // 用户名
- @NotBlank(message = "用户名称不能为空")
- @Column(name="name")
- private String name;
- // 邮箱
- @Column(name="email")
- @Pattern(message ="邮箱格式不符", regexp = "^[A-Za-z0-9\u4e00-\u9fa5]+@[a-zA-Z0-9_-]+(\.[a-zA-Z0-9_-]+)+$")
- private String email;
-
- public User(Long id, String name, String email) {
- this.id = id;
- this.name = name;
- this.email = email;
- }
-
- public Long getId() {
- return id;
- }
-
- public void setId(Long id) {
- this.id = id;
- }
-
- public String getName() {
- return name;
- }
-
- public void setName(String name) {
- this.name = name;
- }
-
- public String getEmail() {
- return email;
- }
-
- public void setEmail(String email) {
- this.email = email;
- }
- }
六、创建数据接口层
6.1 声明JPA接口
- /**
- * 基于SpringMVC框架开发web应用--数据操作层
- */
- public interface UserRepository extends CrudRepository<User,Long> {
-
- }
- public interface CrudRepository<T, ID> extends Repository<T, ID> {
- <S extends T> S save(S var1);
-
- <S extends T> Iterable<S> saveAll(Iterable<S> var1);
-
- Optional<T> findById(ID var1);
-
- boolean existsById(ID var1);
-
- Iterable<T> findAll();
-
- Iterable<T> findAllById(Iterable<ID> var1);
-
- long count();
-
- void deleteById(ID var1);
-
- void delete(T var1);
-
- void deleteAll(Iterable<? extends T> var1);
-
- void deleteAll();
- }
6.2 声明MyBatis接口
- /**
- * mybatis数据层接口
- *
- */
- @Repository
- public interface UserMapper {
-
- // 自定义添加通过用户名称模糊查找用户信息
- List<User> findByName(String name);
-
- }
- "1.0" encoding="UTF-8" ?>
- mapper
- PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
- "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
- <mapper namespace="com.example.demo.mybatis.UserMapper">
-
- <select id="findByName" resultType="com.example.demo.register.User">
- select * from user where name like concat('%',#{name},'%')
- select>
-
- mapper>
- #MyBatis扫描mapper文件配置
- mybatis:
- mapper-locations: classpath:mapper/*Mapper.xml
- @SpringBootApplication
- @MapperScan(basePackages = "com.example.demo.register")
- public class DemoApplication {
-
- public static void main(String[] args) {
- SpringApplication.run(DemoApplication.class, args);
- }
- }
七、创建业务服务层
- /**
- * 调用Spring Data JPA和Mybatis接口进行业务处理
- */
- @Service
- public class UserService {
-
- // Spring Data JPA
- @Autowired
- private UserRepository userRepository;
- // Mybatis
- @Autowired
- private UserMapper userMapper;
-
- // 返回所有的用户
- public List
listUsers() { - return (List
) userRepository.findAll(); - }
-
- // 保存用户
- public User saveUser(User user) {
- return userRepository.save(user);
- }
-
- // 删除用户
- public void deleteUser(Long id) {
- userRepository.deleteById(id);
- }
-
- // 查找用户
- public User findUser(Long id) {
- return userRepository.findById(id).get();
- }
-
- // 根据名称查找用户--Mybatis
- public List
searchUser(String name) { - return userMapper.findByName(name);
- }
-
- }
八、创建控制器
注解 | 描述 |
---|---|
@RequestMapping | 通用的请求 |
@GetMapping | 处理HTTP GET请示 |
@PostMapping | 处理HTTP POST请示 |
@PutMapping | 处理HTTP PUT请示 |
@DeleteMapping | 处理HTTP DELETE请示 |
- /**
- * 用户控制器
- */
- @RestController
- @RequestMapping("/user")
- public class UserController {
- @Autowired
- private UserService userService;
-
- // 保存用户并返回到用户列表页面
- @PostMapping
- public ModelAndView saveUser(@Valid User user, Errors errors, Model model) {
- if (errors.hasErrors()) {
- model.addAttribute("user", user);
- if (errors.getFieldError("name") != null) {
- model.addAttribute("nameError", errors.getFieldError("name").getDefaultMessage());
- }
- if (errors.getFieldError("email") != null) {
- model.addAttribute("emailError", errors.getFieldError("email").getDefaultMessage());
- }
- return new ModelAndView("register", "userModel", model);
- }
- userService.saveUser(user);
- //重定向到list页面
- return new ModelAndView("redirect:/user");
- }
-
- // 获取用户操作表单页面
- @GetMapping("/form")
- public ModelAndView createForm(Model model, @RequestParam(defaultValue = "0") Long id) {
- if (id > 0) {
- model.addAttribute("user", userService.findUser(id));
- } else {
- model.addAttribute("user", new User());
- }
- return new ModelAndView("register", "userModel", model);
- }
-
- // 获取用户列表显示页面
- @GetMapping
- public ModelAndView list(Model model) {
- model.addAttribute("userList", userService.listUsers());
- return new ModelAndView("userlist", "userModel", model);
- }
-
- // 模糊查找输入页面
- @GetMapping("/index")
- public ModelAndView index(Model model) {
- model.addAttribute("user", new User());
- return new ModelAndView("index", "userModel", model);
- }
-
- // 查找提交并跳转用户列表
- @PostMapping("/search")
- public ModelAndView search(@ModelAttribute User user, Model model) {
- model.addAttribute("userList", userService.searchUser(user.getName()));
- return new ModelAndView("userlist", "userModel", model);
- }
-
- // 删除用户
- @RequestMapping(path = "/del")
- public ModelAndView del(@RequestParam(name = "id") Long id) {
- userService.deleteUser(id);
- return new ModelAndView("redirect:/user");
- }
- }
九、设计视图模板
9.1 设计一个用户列表的视图模板
- "http://www.thymeleaf.org"
- xmlns:layout="http://www.ultrag.net.nz/thymeleaf/layout"
- >
- "UTF-8">
用户列表
"1">-
-
-
ID -
邮箱 -
名称 -
操作 -
-
-
-
if="${userModel.userList.size()} eq 0">-
"3">没有用户信息! -
-
"user:${userModel.userList}">-
"${user.id}"> -
"${user.email}"> -
"${user.name}"> -
-
9.2 设计一个提交用户信息的表单模板
- <!DOCTYPE html>
- <html xmlns:th="http://www.thymeleaf.org"
- xmlns:layout="http://www.ultrag.net.nz/thymeleaf/layout"
- >
- <head>
- <meta charset="UTF-8">
- </head>
- <body>
- <h3>登记用户</h3>
- <form action="/users" th:action="@{/user}" method="POST" th:object="${userModel.user}">
- <input type="hidden" name="id" th:value="*{id}">
- 名称:<br>
- <input type="text" name="name" th:value="*{name}">
- <br>
- 邮箱:<br>
- <input type="text" name="email" th:value="*{email}">
- <input type="submit" value="提交" >
- </form>
- </body>
- </html>
9.3 设计一个用户模糊查找页面模板
- <!-- index.html-->
- <!DOCTYPE html>
- <html xmlns:th="http://www.thymeleaf.org" >
- <head>
- <meta charset="UTF-8"/>
- <title>Title</title>
- </head>
- <body>
-
- <h3>查找用户</h3>
- <form action="/users" th:action="@{/user/search}" method="POST" th:object="${userModel.user}">
- 名称:<br>
- <input type="text" name="name" th:value="*{name}" >
- <br>
- <input type="submit" value="查询" >
- </form>
-
- </body>
- </html>
十、运行应用
10.1用户列表
10.2增加用户
10.3查找用户
该web应用一切运行正常。