java 邮箱模板_Java:Spring同时集成JPA与Mybatis
阅读本文前,请您先点击上面的蓝色字体,再点击“关注”,这样您就可以继续免费收到最新文章了。每天都有分享。完全是免费订阅,请放心关注。注:本文转载自网络,不代表本平台立场,仅供读者参考,著作权属归原创者所有。我们分享此文出于传播更多资讯之目的。如有侵权,请在后台留言联系我们进行删除,谢谢!
"
目录
ORM
Spring ORM
Spring ORM 同时集成JPA与Mybatis一、创建一个SpringBoot项目二、建立用户信息登记表三、Web应用项目集成mysql四、添加Spring Data JPA和Mybatis依赖五、添加数据表映射实体类六、创建数据接口层6.1 声明JPA接口6.2 声明MyBatis接口七、创建业务服务层八、创建控制器九、设计视图模板9.1 设计一个用户列表的视图模板9.2 设计一个提交用户信息的表单模板9.3 设计一个用户模糊查找页面模板十、运行应用10.1用户列表10.2增加用户10.3查找用户
ORM
ORM的出现,使得关系型数据库映射成了对象;简单来说,有了ORM之后,JAVA程序员从面向JDBC编程转化成面向JAVA对象编程。
Spring ORM
Spring对ORM的解决方案主要体现在以下方面:统一的资源管理方式与异常管理:Spring使用各种ORM框架,资源管理及使用方式都是统一的;同时Spring会将各个ORM框架的异常转移到Spring异常体系下。统一的事务管理:Spring通过IoC和AOP技术,形成了事务管理抽象层,接管了各种ORM框架下的数据访问的事务管理。
随着版本的升级,Spring核心包中对ORM的各种解决方案也越来越精炼。本文我们重点将介绍同时集成Spring Data JPA和Mybatis两个ORM框架。
Spring ORM 同时集成JPA与Mybatis
在同一个项目中一般只会单独集成Spring Data JPA,或者单独集成Mybatis。但两者也可以混合使用(一般没这个必要),本文为了更加深入探索Spring ,将通过一个DEMO应用两者的并展示相似点与不同之处。
一、创建一个SpringBoot项目
在IntelliJ IDEA中创建新项目
通过地址https://start.spring.io/初始化项目;
指定项目通用信息:
选择项目依赖Starter:
生成的项目结构:
二、建立用户信息登记表
根据用户信息模型类,设计用户信息登录表
DROP DATABASE IF EXISTS user_info;
CREATE DATABASE user_infotDEFAULT CHARACTER SET utf8tDEFAULT 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
增加依赖
mysqlmysql-connector-java5.1.47runtime
com.alibabadruid-spring-boot-starter1.1.10
Spring数据源配置
###数据源配置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依赖
ttorg.springframework.bootspring-boot-starter-data-jpa
org.mybatis.spring.bootmybatis-spring-boot-starter1.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一-龥]+@[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接口
借助Spring Data JPA,我们可以通过继承CrudRepository接口,快速定义应用的数据层。CrudRepository定义并实现了很多用于crud(创建、读取、更新、删除)操作的方法,我们根本就不用编写实现类!当应用启动的时候,Spring Data JPA会在运行期自动生成实现类。
/** * 基于SpringMVC框架开发web应用--数据操作层 */public interface UserRepository extends CrudRepository {}
CrudRepository的一些默认实现
public interface CrudRepository extends Repository { S save(S var1); Iterable saveAll(Iterable var1); Optional findById(ID var1); boolean existsById(ID var1); Iterable findAll(); Iterable findAllById(Iterable var1); long count(); void deleteById(ID var1); void delete(T var1); void deleteAll(Iterable extends T> var1); void deleteAll();}
6.2 声明MyBatis接口
虽然强大的Spring Data JPA已经帮我们封装了多种数据操作,但由于业务逻辑的复杂度及自定义 SQL的需求,我们仍然可以运用MyBatis框架完成ORM的处理。
/** * mybatis数据层接口 * */@Repositorypublic interface UserMapper {
// 自定义添加通过用户名称模糊查找用户信息 List findByName(String name);}
Mybatis Mapper映射
<?xml version="1.0" encoding="UTF-8" ?>br /> PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
t select * from user where name like concat('%',#{name},'%')
Spring添加MyBatis配置
修改application.yml配置文件:定位mapper文件扫描路径
#MyBatis扫描mapper文件配置mybatis: mapper-locations: classpath:mapper/*Mapper.xml
在启动类里加上注解用于给出需要扫描的mapper文件路径
@SpringBootApplication@MapperScan(basePackages = "com.example.demo.register")public class DemoApplication {
public static void main(String[] args) { SpringApplication.run(DemoApplication.class, args); }}
七、创建业务服务层
创建UserService服务层直接调用由Spring Data JPA及Mybatis接口各自提供的数据操作方法,以实现用户信息的增删改查。
/** * 调用Spring Data JPA和Mybatis接口进行业务处理 */@Servicepublic 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); }}
八、创建控制器
控制器的主要职责是处理HTTP请求传递给视图以便于渲染浏览器展现。
SpirngMVC的请求注解
注解描述@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 设计一个用户列表的视图模板
Thymeleaf提供了一个属性th:each,它会迭代一个元素集合,为集合中的每个条目渲染HTML,我们可以利用这个属性,设计出用户的列表视图。
xmlns:layout="http://www.ultrag.net.nz/thymeleaf/layout">
用户列表
ID | 邮箱 | 名称 | 操作 |
没有用户信息! | |||
修改 删除 |
9.2 设计一个提交用户信息的表单模板
用户通过这个视图,录入名称与邮箱地址,提交保存新用户的信息。
xmlns:layout="http://www.ultrag.net.nz/thymeleaf/layout">
登记用户
名称:
邮箱:
9.3 设计一个用户模糊查找页面模板
Title
查找用户
名称:
十、运行应用
到目前为止,我们已经开发了User用户类、JPA数据接口、Mybatis数据接口、UserService用户服务类、UserController控制器、用户列表视图模板、用户登记视图模板、用户模糊查找页面模板,接下来我们尝试启动程序,并进行操作测试。
10.1用户列表
10.2增加用户
点击页面上的创建用户,登记新用户,并提交
10.3查找用户
"
java 邮箱模板_Java:Spring同时集成JPA与Mybatis相关推荐
- spring jpa 多数据源_Spring同时集成JPA与Mybatis
ORM ORM的出现,使得关系型数据库映射成了对象:简单来说,有了ORM之后,JAVA程序员从面向JDBC编程转化成面向JAVA对象编程. Spring ORM Spring对ORM的解决方案主要体现 ...
- Spring Boot集成JPA的Column注解命名字段无效的问题
偶然发现,Spring Boot集成jpa编写实体类的时候,默认使用的命名策略是下划线分隔的字段命名. Spring Boot版本:1.5.4.release 数据表: id int, userNam ...
- Jpa第一话 -- Springboot集成Jpa和Mybatis以及Jpa的最全使用
本文主要记录spring-boot-starter-data-jpa的详细使用. 在做一些小型无并发的项目时,说实话第一个想到的就是Jpa,一个Entity走天下. 1.Spring Jpa的使用 基 ...
- java beetl模板引擎_Spring Boot集成beetl模板引擎 个人总结
1. Spring boot快速集成beetl模板引擎 查看官方文档:http://ibeetl.com/guide/#beetl 可参看官方文档 4.6. Spring Boot集成 增加beetl ...
- java注释模板_Java注释模板设置
Java注释模板设置 eclipse中设置Java注释模板 eclipse设置注释模板的入口: Window->Preference->Java->Code Style->Co ...
- java邮件模板_java创建邮件模板
一直在整发送邮件,由于发送的邮件格式比较固定,是一个固定的表格,我就想能不能做一个邮件的模板,这样在发送邮件的时候只需要将内容填充上去,而不需要像之前一样,每次都要重新拼邮件的内容. 下面先来看一下邮 ...
- java 持久化线程_java – Spring Hibernate Envers多线程 – 会话关...
我们使用Hibernate(使用JPA)和Hibernate Envers来持久化对象的历史. Web应用程序运行许多线程,其中一些是通过其他应用程序的RMI方法调用创建的,其中一些是由应用程序本身创 ...
- java包含关系图_Java——Spring框架完整依赖关系图!再复习了解加工一下吧?
因为spring-core依赖了commons-logging,而其他模块都依赖了spring-core,所以整个spring框架都依赖了commons-logging,如果有自己的日志实现如log4 ...
- java 微信模板_java开发微信模板消息推送
概述 微信公众平台开始支持前端网页,大家可能看到很多网页上都有分享到朋友圈,关注微信等按钮,点击它们都会弹出一个窗口让你分享和关注,这个是怎么实现的呢?今天就给大家讲解下如何在微信公众平台前端网页上添 ...
- java邮箱发送_java邮箱发送报错
展开全部 package com.gpt.util.email; import java.io.FileOutputStream; import java.util.List; import java ...
最新文章
- 「翻译」SAP零售预测和补货–简要概述
- web.py——运行错误【AttributeError: ‘StaticApp‘ object has no attribute ‘directory‘】
- oracle fnd file.log,OracleEBSWIP模块DebugLog收集方法
- ILP32和LP64数据模型
- PAT乙级 1013 数素数
- python2020未来前景_2020年Python发展前景如何呢?
- 【vue开发问题-解决方法】(五)vue Element UI 日期选择器获取日期格式问题 t.getTime is not a function
- python伪装浏览器https_Python3 伪装浏览器的方法示例
- Java集合——TreeMap源码详解
- linux将数字转为科学计数法,Linux下科学计数法(e)转化为数字的方法
- Mac教程——创建txt文件、设置新建txt的快捷键方法
- 用js把数字转化成为大写金额
- linux+3d建模软件,拿走不谢!10款最适合初学者和高级用户的3D设计软件
- 360浏览器如何设置默认极速模式
- 如何导出计算机硬盘重数据,硬盘对拷教程,100%保存原硬盘数据
- 第3章-2 查验身份证
- 使用ffmpeg合成哔哩哔哩m4s格式的音视频流为mp4
- 基于机器学习的车牌识别系统(Python实现基于SVM支持向量机的车牌分类)
- php 实现保留两位小数
- #c语言计算某年某月的天数