SpringData及SpringData JPA的理解和简单应用
SpringData是一个用于简化数据库访问,并支持云服务的开源框架。其主要目标是使得
数据库的访问变得方便快捷,并支持map-reduce框架和云计算数据服务。此外,它还支持
基于关系型数据库的数据服务,如Oracle RAC等。对于拥有海量数据的项目,可以用SpringData
来简化项目的开发,就如SpringFrameWork对JDBC、ORM的支持一样,SpringData会让数据的访问
变得更加方便。 Spring Data JPA: 可以极大的简化JPA的写法,可以在几乎不用写实现的情况下,实现对数据
的访问和操作。除了CRUD外,还包括如分页、排序等一些常用功能。 首先,我们需要知道的情况是Spring Data是一个开源框架,在这个框架中Spring Data JPA
只是这个框架中的一个模块,所以名字才叫Spring Data JPA。如果单独使用JPA开发,你会发现
和使用JDBC开发一样很繁琐。所以Spring Data JPA 的出现就是为了简化JPA的写法,让你只需要
编写一个接口继承一个类就能实现CRUD操作了。 步骤一:在pom文件中添加依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency> 步骤二:
application.properties中的配置: server.port=8080 spring.datasource.url=jdbc:mysql://localhost:3306/y2156
spring.datasource.username=root
spring.datasource.password=55163
spring.datasource.driverClassName=com.mysql.jdbc.Driver
spring.datasource.max-active = 20
spring.datasource.max-idle = 8
spring.datasource.min-idle=8
spring.datasource.initial-sixe=10 ######Spring jpa的配置信息
spring.jpa.database=MYSQL
spring.jpa.show-sql=true
spring.jpa.hibernate.ddl-auto=update
spring.jpa.hibernate.naming-strategy=org.hibernate.cfg.ImprovedNamingStrategy
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL5Dialect 步骤三:
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id; //EmpInfo是一个可以持久化的类
@Entity
public class EmpInfo {
@Id
@GeneratedValue //主键的生成策略 mysql 自增 支持序列的数据库 序列
private Integer empno;
private String empname;
private Integer deptno; public Integer getEmpno() {
return empno;
} public void setEmpno(Integer empno) {
this.empno = empno;
} public String getEmpname() {
return empname;
} public void setEmpname(String empname) {
this.empname = empname;
} public Integer getDeptno() {
return deptno;
} public void setDeptno(Integer deptno) {
this.deptno = deptno;
}
} 步骤四:dao层
import cn.happy.entity.EmpInfo;
import org.springframework.data.repository.CrudRepository; public interface IEmpInfoDAO extends CrudRepository<EmpInfo,Integer> {
} 步骤五:service层及service实现类
import cn.happy.entity.EmpInfo;
import java.util.List;
public interface IEmpInfoService {
public void save(EmpInfo empInfo);
public List<EmpInfo> findAll();
} import cn.happy.dao.IEmpInfoDAO;
import cn.happy.entity.EmpInfo;
import cn.happy.service.IEmpInfoService;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
import java.util.List; @Service("empInfoService")
public class EmpInfoServiceImpl implements IEmpInfoService {
//注入一个dao的接口
@Resource(name="IEmpInfoDAO")
private IEmpInfoDAO empInfoDAO; @Override
@Transactional
public void save(EmpInfo empInfo) {
empInfoDAO.save(empInfo);
} @Override
public List<EmpInfo> findAll() {
return (List<EmpInfo>) empInfoDAO.findAll();
}
} 步骤六:controller类
import cn.happy.entity.EmpInfo;
import cn.happy.service.IEmpInfoService;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import javax.annotation.Resource;
import java.util.List;
@Controller
@RequestMapping("/second")
public class EmpInfoController {
//注入service
@Resource(name="empInfoService")
private IEmpInfoService empInfoService; //添加记录
@RequestMapping("/save")
@ResponseBody
public String save(){
EmpInfo info = new EmpInfo();
info.setEmpname("微冷的雨");
info.setDeptno(5);
empInfoService.save(info);
return "add ok!";
} //查询所有记录
@RequestMapping("/findAll")
@ResponseBody
public Object findAll(){
List<EmpInfo> list =empInfoService.findAll();
return list;
}
} CrudRepository介绍
是一个接口,继承Repository
Repository不提供任何方法,是一个标志接口
如果我们定义的接口继承了Repository,则该接口会被IOC容器识别为一个Repository Bean
纳入IOC容器中,进而可以在该接口中定义满足一定规范的方法。
查询方法以find|read|get开头
涉及查询条件时,条件的属性用条件关键字连接,要注意的是条件属性以首字母大写
使用@Query注解可以自定义JPQL语句实现更灵活的查询
SpringData及SpringData JPA的理解和简单应用的更多相关文章
- JPA原理理解
从前面一篇<JPA使用入门>了解了JPA的简单使用.要想继续深入的使用JPA,可能了解一点原理对于学习JPA会比较有益处. 这里从JPA的功能来简单阐述JPA的原理. 从<初步了解J ...
- 【repost】让你一句话理解闭包(简单易懂)
接触javascript很久了,每次理解闭包都似是而非,最近在找Web前端的工作,所以需要把基础夯实一下. 本文是参照了joy_lee的博客 闭包 在她这篇博客的基础上以批注的形式力争把我的理解阐述出 ...
- Map集合遍历的四种方式理解和简单使用-----不能for循环遍历
Map集合遍历的四种方式理解和简单使用 ~Map集合是键值对形式存储值的,所以遍历Map集合无非就是获取键和值,根据实际需求,进行获取键和值 1:无非就是通过map.keySet()获取到值,然后 ...
- javascript javascript面向对象的理解及简单的示例
javascript面向对象的理解及简单的示例 零.本节重点: 1.封装: 2.继承: 壹.下面理解: 一. javascript面向对象概念: 为了说明 JavaScript 是一门彻底的面向对象的 ...
- 理解Promise简单实现的背后原理
在写javascript时我们往往离不开异步操作,过去我们往往通过回调函数多层嵌套来解决后一个异步操作依赖前一个异步操作,然后为了解决回调地域的痛点,出现了一些解决方案比如事件订阅/发布的.事件监听的 ...
- zTree理解和简单Demo(转)
zTree是利用 jQuery 的核心代码,实现一套能完成大部分常用功能的 Tree 插件.整个zTree的页面显示核心 代码是. <span style="font-family:V ...
- python 类和元类(metaclass)的理解和简单运用
(一) python中的类 首先这里讨论的python类,都基于继承于object的新式类进行讨论. 首先在python中,所有东西都是对象.这句话非常重要要理解元类我要重新来理解一下python中的 ...
- 机器学习入门 一、理解机器学习+简单感知机(JAVA实现)
首先先来讲讲闲话 如果让你现在去搞机器学习,你会去吗?不会的话是因为你对这方面不感兴趣,还是因为你觉得这东西太难了,自己肯定学不来?如果你觉的太难了,很好,相信看完这篇文章,你就会有胆量踏入机器学习这 ...
- html-css-js基本理解和简单总结
目录 一.对于网页的基本理解 1.网页是一种数据展示和信息交互的载体 2.网页组成部分 3.支撑一个网页的技术模块 二.html的理解和技术笔记 1.html理解 2.html技术笔记-html标签 ...
随机推荐
- PARTITION RANGE ALL 的优化
建议如下: 检查数据库的cpu 消耗 ,Sql_id :***** 消耗过多资源,这个新上线sql, 20号才上线,是对log 进行分析,平均每次执行时间300s.,使用的是PARTITION RAN ...
- 类加载机制 + Classloader.loadClass(String name)和Class.forName(String name)
Classloader.loadClass(String name)和Class.forName(String name)的区别 Java的类在jvm中的加载大致分为加载,链接或者叫link(里面包含 ...
- HTML <form> 标签的 enctype
form的enctype有三种 application/x-www-form-urlencoded 在发送前编码所有字符(默认) multipart/form-data 不对字符编码. 在使用包含文件 ...
- vue.js2.0实战填坑记录
访https://github.com/bailicangdu/vue2-elm的PC商城 在创建的 router 对象中,如果不配置 mode,就会使用默认的 hash 模式,该模式下会将路径格式化 ...
- vue使用props动态传值给子组件里的函数用,每次更新,呼叫函数
父组件 <template> <div id="app"> <div>详情内容</div> <button v-on:clic ...
- CF1025C Plasticine zebra
思路: 不要被骗了,这个操作实际上tm是在循环移位. 实现: #include <bits/stdc++.h> using namespace std; int main() { stri ...
- iOS 常用手势
UIGestureRecognizer 对iOS的各种手势进行了封装,完全满足了用户对手势的需求. 以下是对各种手势的详细应用和说明,希望能对大家有帮助.^_^ - (void)viewDidLoad ...
- vuex存取token,http简单封装、模拟登入权限校验操作、路由懒加载的几种方式、vue单页设置title
1.config index.js下面的跨域代理设置: proxyTable: { '/api': { target: 'http://xxxx', //要访问的后端接口 changeOrigin: ...
- COGS 2280. [HZOI 2015]树白黑
★★ 输入文件:B_Tree.in 输出文件:B_Tree.out 简单对比时间限制:2 s 内存限制:512 MB [题目描述] 给定一棵有根树,树根为1,一开始这棵树所有节点均为白 ...
- CNNs 在图像分割中应用简史: 从R-CNN到Mask R-CNN
作者:嫩芽33出处:http://www.cnblogs.com/nenya33/p/6756024.html 版权:本文版权归作者和博客园共有 转载:欢迎转载,但未经作者同意,必须保留此段声明:必须 ...