SpringBoot 整合SpringDataJPA

一、引言

  • 什么是SpringDataJPA?
    Spring Data JPA能干什么
    可以极大的简化JPA的写法,可以在几乎不用写实现的情况下,实现对数据的访问和操作。除了CRUD外,还包括如分页、排序等一些常用的功能。
    首先我们需要清楚的是Spring Data是一个开源框架,在这个框架中Spring Data JPA只是这个框架中的一个模块,所以名称才叫Spring Data JPA。如果单独使用JPA开发,你会发现这个代码量和使用JDBC开发一样有点烦人,所以Spring Data JPA的出现就是为了简化JPA的写法,让你只需要编写一个接口继承一个类就能实现CRUD操作了。
  • JPA/Hibernate关系?
    JPA是一种规范,而Hibernate是它的一种实现。除了Hibernate,还有EclipseLink(曾经的toplink),OpenJPA等可供选择,所以使用Jpa的一个好处是,可以更换实现而不必改动太多代码。

二、Demo实现

(1) 依赖引入,这里使用 druid 数据源
<dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-jpa</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <scope>runtime</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-tomcat</artifactId>
            <version>1.4.1.RELEASE</version>
        </dependency>

        <!-- https://mvnrepository.com/artifact/com.alibaba/druid -->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid</artifactId>
            <version>1.0.29</version>
        </dependency>
(2)包结构如下
目录结构
(3)配置
server:
  port: 9090
spring:
  datasource:
    type: com.alibaba.druid.pool.DruidDataSource
    username: root
    password: root
    driver-class-name: com.mysql.jdbc.Driver
    url: jdbc:mysql://127.0.0.1:3308/user_test?useUnicode=true&useSSL=false&amp;characterEncoding=UTF-8

    #配置监控统计拦截的 filters,去掉后监控界面sql无法统计,'wall'用于防火墙
    filters: stat, wall
    #最大活跃数
    maxActive: 20
    #初始化数量
    initialSize: 1
    #最大连接等待超时时间
    maxWait: 60000
    #打开PSCache,并且指定每个连接PSCache的大小
    poolPreparedStatements: true
    maxPoolPreparedStatementPerConnectionSize: 20
    #通过connectionProperties属性来打开mergeSql功能;慢SQL记录
    #connectionProperties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000
    minIdle: 1
    timeBetweenEvictionRunsMillis: 60000
    minEvictableIdleTimeMillis: 300000
    validationQuery: select 1 from dual
    testWhileIdle: true
    testOnBorrow: false
    testOnReturn: false

jpa:
  # Specify the DBMS
  database: MySQL
  # Show or not log for each sql query
  show-sql: true
  format_sql: true
  hibernate:
  # Hibernate ddl auto (create, create-drop, update)
   ddl-auto: update
  # Naming strategy
  #[org.hibernate.cfg.ImprovedNamingStrategy  #org.hibernate.cfg.DefaultNamingStrategy]
   naming_strategy: org.hibernate.cfg.ImprovedNamingStrategy
  # stripped before adding them to the entity manager)
   dialect: org.hibernate.dialect.MySQL5Dialect
(3)配置

repository接口层

public interface UserDao extends
        JpaRepository<User,Long>,
        JpaSpecificationExecutor<User>,
        Serializable {
}

service层

/**
 * @author liyao
 * @createTime 2018/8/13
 * @description
 */
@Service
@Transactional
public class UserService {

    @Autowired
    private UserDao userDao;

    /**
     * 保存数据
     * @param user
     */
    public User save(User user){
        return userDao.save(user);
    }

    /**
     * 删除数据
     * @param id
     * @return
     */
    public  List<User> delete(Long id){
        userDao.deleteById(id);
        return userDao.findAll();
    }

    /**
     * 查询数据
     * @return
     */
    public List<User> list(){
        return userDao.findAll();
    }
}

controller层

@RestController
@RequestMapping("/user")
public class UserController {

    @Autowired
    private UserService userService;

    /**
     * 查询用户列表
     * @return
     */
    @GetMapping(value = "/list")
    public List<User> list(){
        return userService.list();
    }

    /**
     * 添加、更新用户的方法
     * @param entity
     * @return
     */
    @GetMapping(value = "/save")
    public User save(User entity){
        return userService.save(entity);
    }

    /**
     * 删除用户
     * @param id
     * @return
     */
    @GetMapping(value = "/delete")
    public List<User> delete(Long id){
        userService.delete(id);
        return userService.list();
    }

}
(4)测试

1、新增
添加

2、查询
查询

3、删除id=2
删除

删除之后查询
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Boot 参考指南 介绍 转载自:https://www.gitbook.com/book/qbgb...
    毛宇鹏阅读 46,992评论 6 342
  • 1、通过CocoaPods安装项目名称项目信息 AFNetworking网络请求组件 FMDB本地数据库组件 SD...
    阳明AI阅读 16,025评论 3 119
  • 宫雨 二嘎娘接二嘎放学回到家,嘎娃说:“我都出汗了。” 嘎娘说:“出汗,还非得穿你爸的长裤?” 嘎娃:“不是天热,...
    a宫雨阅读 192评论 0 2
  • 爱情有时甜蜜,有时又痛苦,只有在经历过重重困苦才能走向未来的幸福。 爱情有时像在等公交车,不想坐的公交车接二连三频...
    梦之黎明阅读 678评论 0 1
  • 本文章转载于搜狗测试 应用管理 所有应用 系统应用 第三方应用 包名包含某字符串的应用 查看应用列表 安装 APK...
    夜境阅读 2,876评论 0 1