美文网首页
微信点餐系统01-项目的搭建

微信点餐系统01-项目的搭建

作者: 伊泽瑞额 | 来源:发表于2019-03-16 17:37 被阅读0次

自己闭门造车,不如让老司机带着飞

1. 创建数据库设计表
<!--- 商品表--->
CREATE TABLE `sell`.`product_info` (
    `product_id` VARCHAR(32)  NOT NULL,
    `product_name` VARCHAR(64) NOT NULL  COMMENT '商品名称',
    `product_price` DECIMAL(8,2) NOT NULL COMMENT '单价',
    `product_description` VARCHAR(64) NOT NULL COMMENT '描述',
    `product_icon` VARCHAR (512)COMMENT '小图',
    `category_type` INT(8) NOT NULL COMMENT '类目编号',
    `product_stock` INT(128) NOT NULL COMMENT '库存',
    `create_time` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
    `update_time` TIMESTAMP NOT NULL ON UPDATE CURRENT_TIMESTAMP DEFAULT CURRENT_TIMESTAMP  COMMENT '修改时间',
    PRIMARY KEY (`product_id`)
)COMMENT '商品表';

<!--- 类目表--->
CREATE TABLE `sell`.`product_category` (
    `category_id` INT NOT NULL AUTO_INCREMENT,
    `category_name` VARCHAR(64) NOT NULL COMMENT '类目名字',
    `category_type` INT(12) NOT NULL COMMENT '类目编号',
    `create_time` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
    `update_time` TIMESTAMP NOT NULL ON UPDATE CURRENT_TIMESTAMP DEFAULT CURRENT_TIMESTAMP  COMMENT '修改时间',
    PRIMARY KEY (`category_id`),
    UNIQUE KEY `uqe_category_type` (`category_type`)
)  COMMENT '类目表';


<!--- 订单表--->
CREATE TABLE `sell`.`order_master`(
    `order_id` VARCHAR(32) NOT NULL,
    `buyer_name` VARCHAR (32) NOT NULL COMMENT '买家名字',
    `buyer_phone` VARCHAR(32) NOT NULL COMMENT '买家电话',
    `buyer_address` VARCHAR(128) NOT NULL COMMENT '买家地址',
    `buyer_openid` VARCHAR(64) NOT NULL COMMENT "买家微信openid",
    `order_amount` DECIMAL(8,2) NOT NULL COMMENT '订单总额',
    `order_status` TINYINT(3) NOT NULL DEFAULT '0' COMMENT '订单状态 默认0新下单',
    `pay_status` TINYINT(3) NOT NULL DEFAULT '0' COMMENT '订单状态 默认0未支付',
    `create_time` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
    `update_time` TIMESTAMP NOT NULL ON UPDATE CURRENT_TIMESTAMP DEFAULT CURRENT_TIMESTAMP  COMMENT '修改时间',
    PRIMARY KEY(`order_id`),
    KEY `idx_buyer_openid` (`buyer_openid`)
) COMMENT '订单表';

<!---订单详情表--->
CREATE TABLE `sell`.`order_detail`(
    `detail_id` VARCHAR(32) NOT NULL,
    `order_id` VARCHAR(32) NOT NULL,
    `product_id` VARCHAR(32) NOT NULL,
    `product_name` VARCHAR(64) NOT NULL COMMENT '商品名称',
    `product_price` DECIMAL(8,2) NOT NULL COMMENT '单价',
    `product_icon` VARCHAR (512)COMMENT '小图',
    `product_quantity` INT NOT NULL COMMENT '商品数量',
    
    `create_time` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
    `update_time` TIMESTAMP NOT NULL ON UPDATE CURRENT_TIMESTAMP DEFAULT CURRENT_TIMESTAMP  COMMENT '修改时间',
    
    PRIMARY KEY (`detail_id`),
    KEY `idx_order_id`(`order_id`)
    
) COMMENT '订单详情表';
2. 创建springboot 项目
  1. 修改application.yml文件 配置数据库 连接池 内容如下
spring:
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    username: root
    password: 123456
    url: jdbc:mysql://127.0.0.1:3306/sell?useUnicode=true&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=UTC
  # 连接池配置
    connectionProperties=druid:
      stat:
        mergeSql=true;druid:
          stat:
            slowSqlMillis=5000:
  jpa:
    show-sql: true

2.maven配置

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.1.3.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.amn</groupId>
    <artifactId>sell</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>sell</name>
    <description>Demo project for Spring Boot</description>

    <properties>
        <java.version>1.8</java.version>
    </properties>

    <dependencies>
        #jpa
        <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>
      #mysql数据库
        <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>com.alibaba</groupId>
            <artifactId>druid</artifactId>
            <version>1.0.29</version>
        </dependency>
        <dependency>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
            <version>1.2.16</version>
            <scope>compile</scope>
        </dependency>

    # lombok 依赖和安装lombok插件可以省区set/get toString 方法
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.18.6</version>
            <scope>provided</scope>
        </dependency>


    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>

3.创建和表名对应的实体类 jpa 允许将下划线设置成驼峰式写法
JPA 定义:Java Persistence API定义了一种定义,可以将常规的普
通Java对象(有时被称作POJO)映射到数据库。这些普通Java对象被称作Entity Bean。
除了是用Java Persistence元数据将其映射到数据库外,Entity Bean与其他Java类没有任何区别。
事实上,创建一个Entity Bean对象相当于新建一条记录,删除一个Entity Bean会同时从数据库中删除对应记录,修改一个Entity Bean时,容器会自动将Entity Bean的状态和数据库同步。

@DynamicUpdate 注解用于数据库更新时间
@data:这个注解可以让我们不用写get/set方法。它会在打包的时候自动帮我们生成get/set代码很方便,但是需要额外引入lombok的jar包,第一次使用的话编译器还要安装相应的插件,
@Entity:告诉框架这个实体是对应数据库的某张表的,我这里的表名和类名是驼峰式一一对应的,如果你的表名和类名不同那么你可以加一个注解@Table(name="数据库表名");
@Id:声明这个参数对应数据库的主键;
@GeneratedValue:主键是自增的;
package com.amn.sell.bean;

import lombok.Data;
import org.hibernate.annotations.DynamicUpdate;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import java.util.Date;

@Entity
@DynamicUpdate
@Data
public class ProductCategory {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    /**
     * id
     */
    private Integer categoryId;
    /**
     * 类目名字
     */
    private String categoryName;
    /**
     * 类目编号
     */
    private Integer categoryType;
    /**
     * 创建时间
     */
    private Date createTime;
    /**
     * 更新时间
     */
    private Date updateTime;

}

4.编写dao层

package com.amn.sell.dao;

import com.amn.sell.bean.ProductCategory;
import org.springframework.data.jpa.repository.JpaRepository;

import java.util.List;

public interface ProductDao  extends JpaRepository<ProductCategory,Integer> {

    List<ProductCategory> findByCategoryTypeIn(List<Integer> CategoryTypeList);
}
dao层非常简单只要继承一下 JpaRepository<T, Serializable> 就好了 T:写的是dao操作对应的实体 ,Serializable:是主键的类型。dao中可以声明自己的方法,如上的findByCategoryTypeIn方法。

5.测试

@Transactional 注解 不影响数据的数据,测试中用
package com.amn.sell.dao;

import com.amn.sell.bean.ProductCategory;
import org.junit.Assert;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;

import java.util.Arrays;
import java.util.List;
import java.util.Optional;

import static org.junit.Assert.*;

@RunWith(SpringRunner.class)
@SpringBootTest
public class ProductDaoTest {

    @Autowired
    private ProductDao productDao;

  @Test
  @Transactional
  public void findOneTest(){

        ProductCategory one = productDao.findById(1).orElse(null);
        System.out.println(one);
    }

    @Test

    public void saveTest(){
        ProductCategory productCategory = new ProductCategory();
        productCategory.setCategoryName("男生最爱");
        productCategory.setCategoryType(3);
        productDao.save(productCategory);
    }
    
    /**
     * 更新
     */
    @Test
    public void updateTest(){
        ProductCategory productCategory = new ProductCategory();
        productCategory.setCategoryId(2);
        productCategory.setCategoryName("bbb");
        productCategory.setCategoryType(3);
        productDao.save(productCategory);
    }



    @Test
    public void testFindByCategoryType(){
        List<Integer> list = Arrays.asList(2,3,4);
        List<ProductCategory> categories = productDao.findByCategoryTypeIn(list);
        Assert.assertNotEquals(0, categories.size());
    }

}

相关文章

网友评论

      本文标题:微信点餐系统01-项目的搭建

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