美文网首页
spring boot 实例之 连接数据库

spring boot 实例之 连接数据库

作者: 碧波之心 | 来源:发表于2018-06-04 21:38 被阅读629次

    前面的体验告一段落了。这里开始,做些实际业务的服务。一般情况,服务是需要连接数据库的。我们先从数据库连接开始。选择MySQL数据库

    新建模块

    在前面的bhparent下面建立一个模块


    选择类型
    模块名称

    先来个用户管理的服务,命名为bh-user。


    选择
    填写信息
    稍微调整下目录
    目录

    pom.xml文件内容

    <?xml version="1.0"?>
    <project
        xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"
        xmlns="http://maven.apache.org/POM/4.0.0"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
        <modelVersion>4.0.0</modelVersion>
        
        <parent>
            <groupId>com.biboheart.demos</groupId>
            <artifactId>bhparent</artifactId>
            <version>1.0.0-SNAPSHOT</version>
        </parent>
        
        <artifactId>bh-user</artifactId>
        <name>bh-user</name>
        <url>http://maven.apache.org</url>
        
        <properties>
            <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        </properties>
        
        <dependencies>
        </dependencies>
    </project>
    

    在父项目的pom.xml或本项目的pom.xml中加入bh-brick组件,代码中用到比较多。我是加到bhparent中了。

    <dependency>
        <groupId>com.biboheart</groupId>
        <artifactId>bh-brick</artifactId>
        <version>0.0.1</version>
    </dependency>
    

    引入组件

    要连接数据,需要用到两个组件。spring data jpa和mysql连接器
    完成后的pom.xml

    <?xml version="1.0"?>
    <project
        xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"
        xmlns="http://maven.apache.org/POM/4.0.0"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
        <modelVersion>4.0.0</modelVersion>
        
        <parent>
            <groupId>com.biboheart.demos</groupId>
            <artifactId>bhparent</artifactId>
            <version>1.0.0-SNAPSHOT</version>
        </parent>
        
        <artifactId>bh-user</artifactId>
        <name>bh-user</name>
        <url>http://maven.apache.org</url>
        
        <properties>
            <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        </properties>
        
        <dependencies>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-data-jpa</artifactId>
            </dependency>
            
            <dependency>
                <groupId>mysql</groupId>
                <artifactId>mysql-connector-java</artifactId>
            </dependency>
        </dependencies>
    </project>
    

    配置文件

    在src/main目录下建立resources文件夹,创建文件application.yml
    内容如下:

    server:
      # 服务端口号
      port: 8080
    spring:
      datasource:
        # MYSQL数据库驱动
        driver-class-name: com.mysql.jdbc.Driver
        # 数据库地址
        url: jdbc:mysql://localhost:3306/bhdemos?useUnicode=true&characterEncoding=utf8&useSSL=false&autoReconnect=true&createDatabaseIfNotExist=true
        # 数据库用户名
        username: root
        # 数据库密码
        password: root
      jpa:
        database: default
        # 开发时显示sql,部署到生产环境时设为false
        show-sql: true
        # 使用mysql方言
        database-platform: org.hibernate.dialect.MySQL5Dialect
        hibernate:
          # 下面两个配置对应hibernate的属性
          ddl-auto: update
        properties:
          hibernate:
            # 格式化sql 语句
            format_sql: true
          
    # LOGGING
    logging:
      level:
        root: info
    

    创建spring boot入口文件

    创建文件:UserApplication.class

    package com.biboheart.demo.user;
    
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    
    @SpringBootApplication
    public class UserApplication {
        public static void main(String[] args) {
            SpringApplication.run(UserApplication.class, args);
        }
    }
    

    到此,目录结构如下:


    目录结构

    数据库连接

    建立一个包:com.biboheart.demo.user.domain,这个包下放数据模型
    创建类文件User

    package com.biboheart.demo.user.domain;
    
    import javax.persistence.Entity;
    import javax.persistence.GeneratedValue;
    import javax.persistence.Id;
    import javax.persistence.Table;
    
    import lombok.Data;
    
    @Data
    @Entity
    @Table(name = "bh_user_user")
    public class User {
        @Id
        @GeneratedValue
        private Long id; // 用户ID
        private String name; // 用户名称
        private String phone; // 电话号码
        private Long birthday; // 生日
        private Long createTime; // 创建时间
        private Long updateTime; // 最后修改时间
    }
    

    先简单建立些字段,用到时再加入。
    前面在创建父工程的时候在pom中已经引入了lombok组件,在这里可以用@Data来代替setter getter。
    建立包:com.biboheart.demo.user.repository 在这个包下放数据库连接的类,即jpa的接口
    创建 interface:com.biboheart.demo.user.repository.UserRepository
    内容如下:

    package com.biboheart.demo.user.repository;
    
    import org.springframework.data.jpa.repository.JpaRepository;
    import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
    
    import com.biboheart.demo.user.domain.User;
    
    public interface UserRepository extends JpaRepository<User, Long>, JpaSpecificationExecutor<User> {
    
    }
    

    数据库连接就完成了

    服务开发

    建立包:com.biboheart.demo.user.service,这个包下面存放服务类
    创建用户服务接口:interface UserService

    package com.biboheart.demo.user.service;
    
    import java.util.List;
    
    import com.biboheart.brick.exception.BhException;
    import com.biboheart.demo.user.domain.User;
    
    public interface UserService {
        /**
         * 保存用户信息
         * 
         * @param user
         *            用户信息对象
         * @return 保存成功后的用户信息或null
         * @throws BhException 参数异常捕获
         */
        public User save(User user) throws BhException;
    
        /**
         * 删除用户
         * 
         * @param id
         *            用户ID
         * @return 返回删除成功的用户信息或null
         */
        public User delete(Long id);
    
        /**
         * 查询用户信息
         * 
         * @param id
         *            用户ID
         * @return 用户信息或null
         */
        public User load(Long id);
    
        /**
         * 用户列表
         * 
         * @return 返回用户对象列表
         */
        public List<User> list();
    }
    

    创建包:com.biboheart.demo.user.service.impl,存放服务的实现
    创建实例类:UserServiceImpl 实例 UserService

    package com.biboheart.demo.user.service.impl;
    
    import java.util.List;
    
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.stereotype.Service;
    
    import com.biboheart.brick.exception.BhException;
    import com.biboheart.brick.utils.CheckUtils;
    import com.biboheart.brick.utils.TimeUtils;
    import com.biboheart.demo.user.domain.User;
    import com.biboheart.demo.user.repository.UserRepository;
    import com.biboheart.demo.user.service.UserService;
    
    @Service
    public class UserServiceImpl implements UserService {
        @Autowired
        private UserRepository userRepository;
    
        @Override
        public User save(User user) throws BhException {
            if (null == user.getId()) {
                user.setId(0L);
            }
            // 以下用到了 com.biboheart.brick 中的BhException,CheckUtils.isEmpty,TimeUtils.getCurrentTimeInMillis
            if (CheckUtils.isEmpty(user.getName())) {
                throw new BhException("用户名称不能为空");
            }
            Long now = TimeUtils.getCurrentTimeInMillis(); // 取当前时间戳
            if (CheckUtils.isEmpty(user.getCreateTime())) {
                user.setCreateTime(now);
            }
            user.setUpdateTime(now);
            user = userRepository.save(user);
            return user;
        }
    
        @Override
        public User delete(Long id) {
            if (CheckUtils.isEmpty(id)) {
                return null;
            }
            User user = userRepository.findById(id).get();
            if (null != user) {
                userRepository.delete(user);
            }
            return user;
        }
    
        @Override
        public User load(Long id) {
            if (CheckUtils.isEmpty(id)) {
                return null;
            }
            User user = userRepository.findById(id).get();
            return user;
        }
    
        @Override
        public List<User> list() {
            List<User> users = userRepository.findAll();
            return users;
        }
    
    }
    

    开放接口

    创建包:com.biboheart.demo.user.controller,用于存放控制器类
    创建类:UserController

    package com.biboheart.demo.user.controller;
    
    import java.util.List;
    
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RequestMethod;
    import org.springframework.web.bind.annotation.RestController;
    
    import com.biboheart.brick.exception.BhException;
    import com.biboheart.brick.model.BhResponseResult;
    import com.biboheart.demo.user.domain.User;
    import com.biboheart.demo.user.service.UserService;
    
    @RestController
    public class UserController {
        @Autowired
        private UserService userService;
        
        /**
         * 保存用户信息
         * @param user 用户信息对象
         * @return
         * @throws BhException
         */
        @RequestMapping(value = "/userapi/user/save", method = {RequestMethod.POST})
        public BhResponseResult<?> save(User user) throws BhException {
            user = userService.save(user);
            return new BhResponseResult<>(0, "success", user);
        }
        
        /**
         * 删除用户
         * @param id
         * @return
         */
        @RequestMapping(value = "/userapi/user/delete", method = {RequestMethod.POST, RequestMethod.GET})
        public BhResponseResult<?> delete(Long id) {
            User user = userService.delete(id);
            return new BhResponseResult<>(0, "success", user);
        }
        
        /**
         * 查询用户
         * @param id
         * @return
         */
        @RequestMapping(value = "/userapi/user/load", method = {RequestMethod.POST, RequestMethod.GET})
        public BhResponseResult<?> load(Long id) {
            User user = userService.load(id);
            return new BhResponseResult<>(0, "success", user);
        }
        
        /**
         * 用户列表
         * @return
         */
        @RequestMapping(value = "/userapi/user/list", method = {RequestMethod.POST, RequestMethod.GET})
        public BhResponseResult<?> list() {
            List<User> users = userService.list();
            return new BhResponseResult<>(0, "success", users);
        }
    }
    

    测试

    用API工具测试下


    保存

    如果name为空,报错


    错误
    再添加一个,用于测试删除
    删除
    查询
    列表

    测试了每个API,一切正常。

    总结

    一个简单的数据增删查就完成了。修改的话也是save接口,只要把id字段传进去就是修改。这里只考虑了name不能为空的情况做测试。
    可能有人不明白为什么没有讲到去数据库操作。这里用了hibernate自动建库建表的功能。从头到尾都不用操作数据库的。

    1. 配置文件
    2. 数据库连接
    3. 服务开发
    4. 开放接口

    相关文章

      网友评论

          本文标题:spring boot 实例之 连接数据库

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