转载

Java搭建简易服务器(二)

因为最近在做的这件事是以结果为导向的,所以用到的很多知识点都是知其然而不知其所以然,只是拿来用,不出错并且达到目的。毕竟真的是没有什么Java基础,所以细节处就不太追究了,打算先把东西做出来,再回头学习。

创建数据库

需要一个数据库的可视化工具,这里推荐 Navicat Premium ,同样需要破解,请自行百度。 然后根据自己的需求创建数据库,创建表。

我这里的需求是去请求一个三方的Open API ,请求拿到的都是封装好的数据,再加上本身数据库相关知识不是很扎实,所以我就先根据实际的业务数据的字段去建表了,通俗的说就是返回的数据有哪些字段,表里就添加哪些字段

  1. 新建连接 右键---新建连接----MySQL-----起个名字----输入数据库密码
Java搭建简易服务器(二)

数据库的命名规则,大概是小写加下划线吧(我猜的~),反正起啥名都行,主要是密码整对了就行

Java搭建简易服务器(二)
  1. 双击打开连接

  2. 新建数据库

  3. 新建表

因为都是比较简单的操作就不贴图了,需要注意字段类型和长度,string类型,数据库里对应选一个varchar吧;然后还有一个我遇到的问题 Incorrect column name ,就是字段名里后面可能手误加了个空格导致的,把空格删掉再保存就OK了

Spring集成MyBatis

MyBatis是个啥呢,准确来说我也不知道是个啥,还是那句话我们是以结果为导向的,这个东西呢 或者说是个框架,是可以帮助我们连接本地数据库,然后插入数据的,下面的操作我们就要用他了。

下面我以本地建的一个简单的表为例,记录一下插入数据库的操作:

Java搭建简易服务器(二)

基本配置

  1. 添加依赖

在pom.xml文件中加入spring和MyBatis的依赖,pom.xml中已经有一些依赖了,只要把下面这段代码加入dependencies中就可

<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-thymeleaf</artifactId>
        </dependency>

        <!--mysql驱动包-->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>

            <version>8.0.16</version>
        </dependency>

        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>1.3.0</version>
        </dependency>
复制代码

添加完之后是下面这样的:

Java搭建简易服务器(二)
  1. 创建实体类

根据我们数据库中的表,创建出对应的实体类

package com.ucarinc.umeng.entity;

public class DateCountInfo {
    private String date;
    private Integer count;
    private String name;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public  Integer getCount() {
        return  count;
    }

    public void setCount(Integer count) {
        this.count = count;
    }

    public String getDate() {
        return date;
    }

    public void setDate(String date) {
        this.date = date;
    }
}

复制代码
  1. service层

这个在上一篇文章里面我们已经创建过了controller并注入了service,这里我们就对应上面的实体类,创建相应的service,里面方法就根据具体需求来写,无非就是数据库的增删改查的操作

public interface DateCountInfoService {
    Boolean insertDateCountInfo(@Param("dateCountInfos") List<DateCountInfo> dateCountInfos);

    List<DateCountInfo> selectDateCountInfo(@Param("date") String date);

}

复制代码

@Param这个注解,先这么写吧,后面要用的,或者先不用这个也可,就是起个名字

  1. Dao层

这里要注意命名,都是根据实体类来的,后面跟上Mapper

@Mapper
public interface DateCountInfoMapper {
    int insertDateCountInfo(@Param("dateCountInfo") List<DateCountInfo> dateCountInfo);

    List<DateCountInfo> selectDateCountInfo(@Param("date") String date);

}
复制代码
  1. ServiceImpl

ServiceImpl看名字也可以知道就是service类的具体实现,还是需要注意一系列的注解

@Service
public class DateCountInfoServeImpl implements DateCountInfoService{

    @Autowired
    DateCountInfoMapper dateCountInfoMapper;
    @Override
    public Boolean insertDateCountInfo(List<DateCountInfo> dateCountInfos) {

        try{
            if(dateCountInfoMapper.insertDateCountInfo(dateCountInfos) > 0){
                return true;
            }else{
                return false;
            }
        }catch (Exception e){
            e.printStackTrace();
            System.out.println("数据入库异常");
            return false;
        }
    }
    @Override
    public List<DateCountInfo> selectDateCountInfo(String date) {
        try{
            List<DateCountInfo> dateCountInfos = dateCountInfoMapper.selectDateCountInfo(date);
            if(dateCountInfos.size() > 0){
                return dateCountInfos;
            }else{
                return null;
            }
        }catch (Exception e){
            e.printStackTrace();
            System.out.println("数据查找异常");
            return null;
        }
    }
}
复制代码
  1. mapper.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.example.dao.DateCountInfoMapper">

    <!-- 可根据自己的需求,是否要使用 -->
    <resultMap type="com.example.dao.entity.DateCountInfo" id="BaseResultMap">

<!--        <id column="id" property="id" jdbcType="VARCHAR"/>-->
        <result column="name" property="name" jdbcType="VARCHAR"/>
        <result column="count" property="count" jdbcType="INTEGER"/>
        <result column="date" property="date" jdbcType="VARCHAR"/>


    </resultMap>

    <!-- resultMap都是查询结果使用 -->
    <!-- 判断日期不用 is 用 = -->
    <select id="selectDateCountInfo" resultMap="BaseResultMap" parameterType="java.lang.String">
        select *
        from DateCountInfo
        where date = #{date}

    </select>

    <!-- 由外边进来的参数,只能自定义类型 -->
    <insert id="insertDateCountInfo" parameterType="java.util.List">
        insert into DateCountInfo (date, count ,name)
        values
        <foreach collection="dateCountInfo" item="event" separator=",">
            (#{event.date,jdbcType=VARCHAR}, #{event.count,jdbcType=INTEGER}, #{event.name,jdbcType=VARCHAR}
            )
        </foreach>


    </insert>


</mapper>
复制代码

namespace很重要,它是指定这个xml所对应的是哪个dao(mapper)接口

Java搭建简易服务器(二)
  1. 配置Application

还是使用注解

@SpringBootApplication
@ComponentScan({"com.*"})
@MapperScan({"com.example.dao"})
public class DemoApplication {

    public static void main(String[] args) {
        SpringApplication.run(DemoApplication.class, args);
    }

}
复制代码
  1. application.properties配置
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/my_test_sql_db?useSSL=false&characterEncoding=utf8&serverTimezone=Asia/Shanghai&zeroDateTimeBehavior=round&nullCatalogMeansCurrent=true&allowMultiQueries=true
spring.datasource.username=root
spring.datasource.password=root

mybatis.type-aliases-package=com.example.entity
mybatis.mapperLocations=classpath:mapper/*.xml
logging.level.root=info
logging.level.com.example.*=debug
复制代码
  1. 测试

controller中添加相关的测试代码,还是注入上面写好的service,然后路径,参数,直接调用service中的方法

  1. 检查数据库,表中数据是否插入成功

数据库有时候会有点儿“卡”,可以刷新一下或者关闭再重新打开就会看到更新

最后再记录一下,自己犯的一个小错误,给数据库加主键或者是联合主键,因为测试了很多次插入数据库,所以重复数据很多,想到要去重,就想到了添加主键和联合主键。千万注意清空表中已有数据再去设置,否则表中已有重复数据,主键是设置不成功的~

原文  https://juejin.im/post/5e69fa24f265da57360b9f1b
正文到此结束
Loading...