Spring Boot入门篇二: spring-data-jp

作者: 水念 | 来源:发表于2017-12-15 17:15 被阅读95次

    写在前面

    • 传送门 Spring Boot入门篇一
    • 遇到问题先百度,没有什么百度解决不了的问题,如果没有,就谷歌。
    • 上回我们谈到如果使用 Spring Boot 构建一个简单的 JSP 项目,这里是官方提供的 spring-boot-sample-tomcat-jsp ,不清楚的可以移步到这里。
    • 这回,我们沿用上回搭建好的框架继续往里面添加东西。

    本篇目标

    • 集成 mysql 数据库
    • 集成 spring-data-jpa
    • 创建 User 类
    • 创建 UserDao 类
    • 创建 UserService 接口及其实现类
    • 创建 UserController 类
    • 并且,前端通过 ajax 实现一个简单的查询功能

    实现步骤

    1. 集成 mysql 数据库

    这个很简单,只需要在我们的 pom.xml 文件中,增加 mysql 的依赖,代码如下:

    <!-- mysql connection dependency -->
    <dependency>
      <groupId>mysql</groupId>
      <artifactId>mysql-connector-java</artifactId>
    </dependency>
    

    然后,配置我们的数据源,哪里配置? 对了,在我们的 application.properties 文件中,不知道的同学可以看下第一篇讲的。下面是我的配置:

    # mysql connection config
    spring.datasource.url=jdbc\:mysql\://localhost\:3306/archer?useUnicode\=true&characterEncoding\=utf8
    spring.datasource.username=admin
    spring.datasource.password=123
    spring.datasource.driver-class-name=com.mysql.jdbc.Driver
    

    至此,我们 mysql 的集成已经告一段落了,

    2. Spring Data JPA 集成

    下面是 spring-data-jpa 的集成。同样,你也需求在 pom.xml 中增加相关依赖:

    <!-- spring-data-jpa dependency -->
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-data-jpa</artifactId>
    </dependency>
    

    application.properties 中增加 JPA 的相关配置:

    # JPA
    spring.jpa.open-in-view=true
    spring.jpa.hibernate.ddl-auto=update
    

    这里需要说下这两个配置的作用:

    • spring.jpa.open-in-view=true
      • 官方解释:Register OpenEntityManagerInViewInterceptor. Binds a JPA EntityManager to the thread for the entire processing of the request. 翻译一下就是说:注册 OpenEntityManagerInViewInterceptor 拦截器。将JPA EntityManager 绑定到整个请求处理的线程。
    • spring.jpa.hibernate.ddl-auto=update
      • 当我们创建好实体类,启动项目,这个配置会帮我们自动创建表。

    3. 创建 User 类

    完整的代码如下:

    package com.example.domain;
    
    import java.io.Serializable;
    
    import javax.persistence.Column;
    import javax.persistence.Entity;
    import javax.persistence.GeneratedValue;
    import javax.persistence.Id;
    import javax.persistence.SequenceGenerator;
    import javax.persistence.Table;
    
    @Entity
    @Table(name = "user")
    public class User implements Serializable {
        private static final long serialVersionUID = -2248190721476487645L;
    
        @Id
        @SequenceGenerator(name = "user_generator", sequenceName = "user_generator", initialValue = 23)
        @GeneratedValue(generator = "user_generator")
        @Column(name = "id")
        private Long id;
    
        @Column(name = "name", nullable = false)
        private String name;
    
        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;
        }
    }
    

    4. 创建 UserDao 类

    完成的代码如下:

    package com.example.dao;
    
    import java.util.List;
    
    import org.springframework.data.domain.Page;
    import org.springframework.data.domain.Pageable;
    import org.springframework.data.jpa.repository.Query;
    import org.springframework.data.repository.PagingAndSortingRepository;
    
    import com.example.domain.User;
    
    public interface UserDao extends PagingAndSortingRepository<User, Long> {
    
        Page<User> findAll(Pageable pageable);
        
        @Query("from User as u")
        List<User> findUsers();
        
        User findByName(String name);
    }
    

    5. 创建 UserService 接口及其实现类

    以下是 UserService 接口的完整代码:

    package com.example.service;
    
    import java.util.List;
    
    import com.example.domain.User;
    
    public interface UserService {
        
        List<User> findUser();
    
    }
    

    我这里只定义了一个查询接口,主要是为了演示。下面是它的实现类的完整代码,即 UserServiceImpl 类:

    package com.example.service;
    
    import java.util.List;
    
    import org.springframework.stereotype.Component;
    import org.springframework.transaction.annotation.Transactional;
    
    import com.example.dao.UserDao;
    import com.example.domain.User;
    
    @Component("userService")
    @Transactional 
    public class UserServiceImpl implements UserService {
        
        private final UserDao userDao;
        
        public UserServiceImpl(UserDao userDao) {
            this.userDao = userDao;
        }
    
        @Override
        public List<User> findUser() {
            return this.userDao.findUsers();
        }
    
    }
    

    6. 创建 UserController 类

    完整的代码如下:

    package com.example.web;
    
    import java.util.List;
    
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.stereotype.Controller;
    import org.springframework.transaction.annotation.Transactional;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.ResponseBody;
    
    import com.example.domain.User;
    import com.example.service.UserService;
    
    @Controller
    public class UserController {
    
        @Autowired
        private UserService userService;
        
        @RequestMapping("/user/list")
        @ResponseBody
        @Transactional(readOnly = true)
        public List<User> getUsers() {
            return userService.findUser();
        }
    }
    

    所有的后台代码都已经编写完成,下面我们来测试一下。

    7. 使用 Ajax 测试后端 Restful API 接口

    • 首先,我们需要在 index.jsp 中引入 jQuery 工具库和我们自定义的 js 文件:
    <body>
      <script src="../statics/assets/jquery/jquery-2.0.3.min.js"></script>
      <script src="../statics/js/main.js"></script>
    </body>
    
    • 其次,我们需要在 main.js 中增加如下代码:
    ;(function($) {
      // 声明严格模式
      'use strict';
      
      // DOM 加载完成执行
      $(function () {
        // 异步加载数据
        $.ajax({
          url: './user/list',
          type: 'POST',
          dataType: 'JSON',
          success: function (data) {
            console.log(data); // [{id:1, name:"zs"},{id:2, name:"李思"}]
          }
        });
      });
    
    })(jQuery)
    

    当我们访问 localhost:8080F12 启用 chrome 浏览器控制台可以看到:

    image.png

    好了,感谢你的阅读,Enjoy it~

    相关资源

    相关文章

      网友评论

        本文标题:Spring Boot入门篇二: spring-data-jp

        本文链接:https://www.haomeiwen.com/subject/vpsdwxtx.html