zoukankan      html  css  js  c++  java
  • SpingBoot二——引入MySql数据库

      ◆版权声明:本文出自胖喵~的博客,转载必须注明出处。

      转载请注明出处:https://www.cnblogs.com/by-dream/p/10486117.html 

    搭起一个简单的服务后,接下来我们加入数据库,通过服务去读取DB中的数据进行显示。顺便将模块划分再清晰一些。

    不说太多了,直接说代码吧。

    1、pom.xml的dependencies中入依赖

            <!-- mybatis 数据库 -->
            <dependency>
                <groupId>org.mybatis.spring.boot</groupId>
                <artifactId>mybatis-spring-boot-starter</artifactId>
                <version>1.3.2</version>
            </dependency>
    
            <!-- mysql 驱动 -->
            <dependency>
                <groupId>mysql</groupId>
                <artifactId>mysql-connector-java</artifactId>
            </dependency>        

    注意这里我们引入mybatis,所有和数据库之间的操作都借助它来完成。

    2、resource中加入数据库配置和mapper的配置:

    # 数据库配置
    spring.datasource.url=jdbc:mysql://**.**.**.**:3306/rap?useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull&allowMultiQueries=true
    spring.datasource.username=root
    spring.datasource.password=123456
    spring.datasource.driver-class-name=com.mysql.jdbc.Driver
    
    # mybatis 配置.xml文件路径
    mybatis.mapper-locations=classpath:mapper/*.xml

    第一列需要配置你的ip地址和端口,3306后面的第一个斜线后跟数据库名(也就是这里的rap)

    这里需要提前登录到服务上进行了建表:

    mysql -u root -p 后输入密码进入,创建数据库:

    create DATABASE rap;  

     然后建表:

    create table user (
        id bigint unsigned  not null auto_increment comment '主键',
        gmt_create datetime  not null comment '创建时间',
        gmt_modified datetime  not null comment '修改时间',
        nick varchar(1024)  not null comment '名字',
        age bigint unsigned  not null comment '年龄',
        primary key (id)
    ) default charset=utf8 comment='这是一张用户表';

    插入一条数据:

    insert into user (nick, age) values ("bryan", 27);

    建表完成后。我们还需要开启数据库远程链接。首先运行:

    GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '123456'  ;
    这里的123456为你给新增权限用户设置的密码,%代表所有主机,也可以具体到你的主机ip地址
    接着运行  flush privileges;  这一步不可获取,否则不会成功。此时我们在本地远程登录到服务器上看下是否可行。

     3、在resource中加入创建mapper:

    **-mapper.xml 里面的内容有点像写sql一样,这里我们先实现一个findById的方法

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE mapper PUBLIC "-//ibatis.apache.org//DTD Mapper 3.0//EN" "http://ibatis.apache.org/dtd/ibatis-3-mapper.dtd">
    <mapper namespace="com.bryan.demo.dal.dao.UserMapper">
        <resultMap id="userMap" type="com.bryan.demo.dal.entity.UserDO">
            <result property="id" column="id"/>
            <result property="nick" column="nick"/>
            <result property="age" column="age"/>
        </resultMap>
    
        <sql id="columns" >
            id, nick, age
        </sql>
    
        <select id="findById" parameterType="java.lang.Long" resultMap="userMap">
            SELECT
            <include refid="columns" />
            FROM user
            WHERE id = #{id}
        </select>
    </mapper>

    4、对应的我们需要建一个mapper的类和其对应的数据类do类:

    package com.bryan.demo.dal.dao;
    
    import com.bryan.demo.dal.entity.UserDO;
    import org.apache.ibatis.annotations.Mapper;
    
    @Mapper
    public interface UserMapper {
    
        public UserDO findById(Long id);
    }
    package com.bryan.demo.dal.entity;
    
    import java.io.Serializable;
    
    public class UserDO implements Serializable {
    
        /**
         * 主键
         */
        private Long id;
    
        private String nick;
        private int age;
    
        public String getNick() {
            return nick;
        }
    
        public void setNick(String nick) {
            this.nick = nick;
        }
    
        public int getAge() {
            return age;
        }
    
        public void setAge(int age) {
            this.age = age;
        }
    }

    UserMapper类的作用就是提供数据库操作的方法,UserDO类的作用就是将数据库中的数据转化为Java数据类型;

    5、接下来Service层的实现:

    定义接口:

    package com.bryan.demo.service;
    
    import com.bryan.demo.dal.entity.UserDO;
    
    public interface UserService {
        UserDO findById(Long id);
    }

    接口的实现:

    package com.bryan.demo.service.impl;
    
    import com.bryan.demo.dal.dao.UserMapper;
    import com.bryan.demo.dal.entity.UserDO;
    import com.bryan.demo.service.UserService;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.stereotype.Service;
    
    @Service
    public class UserServiceImpl implements UserService {
    
        @Autowired
        public UserMapper userMapper;
        
        @Override
        public UserDO findById(Long id) {
    
            UserDO userDO = userMapper.findById(1L);
            return userDO;
        }
    }

    6、最终Controller层直接调用service的接口返回:

    @RestController
    public class MachineInfoController {
    
        @Autowired
        UserService userService;
    
        @RequestMapping("/")
        String homePage() {
            UserDO userDO = userService.findById(1L);
            return "name:"+userDO.getNick() + " age:"+userDO.getAge();
        }
    }

    此时我们在浏览器情况,查看:

     好,看下整体的目录结构:

    由于本节只说数据库,所以整体的服务端的架构还没有特别的完善,下一节我会针对整体服务端架构进行分层,然后详细说明。

    代码我传到git上:https://github.com/bryanfeng/springboot-demo.git

       

  • 相关阅读:
    饿汉模式单例模板
    QT高级01----自定义日志工具
    QT基础01----添加应用程序图标
    QML博客转载
    QML---自定义滚动条
    Mycat的做分库正确步骤
    Spring Cloud sentinel使用总结
    SpringCloud之Gateway原理解析(二)--调用过程
    SpringCloud之Gateway原理解析(一)--准备
    SpringCloud之Feign注解@EnableFeignClients
  • 原文地址:https://www.cnblogs.com/by-dream/p/10486117.html
Copyright © 2011-2022 走看看