zoukankan      html  css  js  c++  java
  • Spring Boot微信点餐——实战开发DAO层

    0. 修改grade镜像,使用阿里云地址,以便于快速加载依赖
    参照大佬博客 =====> 阿里云maven镜像
     
    # 项目目录下的build.gradle
    
    repositories {
            maven {url 'http://maven.aliyun.com/nexus/content/groups/public/'}
            mavenLocal()
            mavenCentral()
     }
    # 或者找到GRADLE_HOME/init.d/   或者是 GRADLE_HOME/init.d/  
    # .gradle目录下新建init.gradle文件
    
    allprojects{
        repositories {
            def REPOSITORY_URL = 'http://maven.aliyun.com/nexus/content/groups/public/'
            all { ArtifactRepository repo ->
                if(repo instanceof MavenArtifactRepository){
                    def url = repo.url.toString()
                    if (url.startsWith('https://repo1.maven.org/maven2') || url.startsWith('https://jcenter.bintray.com/')) {
                        project.logger.lifecycle "Repository ${repo.url} replaced by $REPOSITORY_URL."
                        remove repo
                    }
                }
            }
            maven {
                url REPOSITORY_URL
            }
        }
    }
     
    1. 添加mysql依赖,添加JPA依赖
    参照大神博客 =====>  mysql依赖
     
    # 项目build.gradle
    
    buildscript {
        ext {
            springBootVersion = '1.5.9.RELEASE'
        }
        repositories {
            mavenLocal()
            mavenCentral()
            maven { url 'http://repo.spring.io/plugins-release' }
        }
        dependencies {
            classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}")
        }
    }
    
    apply plugin: 'java'
    apply plugin: 'eclipse'
    apply plugin: 'org.springframework.boot'
    
    group = 'com.dante.imooc'
    version = '0.0.1-SNAPSHOT'
    sourceCompatibility = 1.8
    
    repositories {
        mavenCentral()
    }
    
    dependencies {
        runtime('mysql:mysql-connector-java')
        compile('org.springframework.boot:spring-boot-starter-data-jpa')
        compile('org.springframework.boot:spring-boot-starter-web')
        compile('org.projectlombok:lombok')
        testCompile('org.springframework.boot:spring-boot-starter-test')
    }
     
    然后在resources目录下新建application.yml下新增mysql的连接信息
    # application.yml
    spring:
      datasource:
        driver-class-name: com.mysql.jdbc.Driver
        username: root
        password: 123456
        url: jdbc:mysq:10.14.207.135/sell?characterEncoding=utf-8&useSSL=false
      jpa:
        show-sql: true
        database: mysql
    server:
      context-path: /sell
    #logging:
    #  pattern:
    ##    console: "%d - %msg%n" # 指定控制到输出格式,但日志文件可以看到详细信息
    ##  path: /var/log/tomcat/   # 指定输出路径
    #  file: /var/log/tomcat/sell.log  #指定输出文件
    #  level: debug #指定日志级别
    #  level:
    #    com.dante.imooc.sell.LoggerTest: debug #指定某一类的日志级别
    3.创建实体类
    首先新建一个 dataobject目录存放所有的实体类,然后新建一个跟数据库表名对应的类。JPA会把驼峰命名法的类名,映射成数据库的 "_" 以此来完成映射。我们也可以使用@Table(name="")来完成映射。
    步骤1. 新建实体类及属性名,对应数据的字段
    步骤2. 通过Entity注解声明实体
    步骤3. 通过Id声明属性为主键,通过GeneratedValue注明生成策略
    步骤4. alt + insert 插入setter and getter
    package com.dante.imooc.sell.dataobject;
    
    import javax.persistence.Entity;
    import javax.persistence.GeneratedValue;
    import javax.persistence.Id;
    import javax.persistence.Table;
    
    /**
     * @Author: Dante
     * @Desciption: 类目表
     * @Date: Created in 2018/1/17 0017 17:30
     * @Nodified By:      in 2018/1/17 0017 17:30
     *
     */
    @Table(name="product_category")
    @Entity
    public class ProductCategory {
        /** 类目id。*/
        @Id
        @GeneratedValue
        private Integer categoryId;
    
        /**类目名字。*/
        private String categoryName;
    
        /**类目类型。*/
        private Integer category_type;
    
        /**类目描述。*/
        private String category_desc;
    
        public Integer getCategoryId() {
            return categoryId;
        }
    
        public void setCategoryId(Integer categoryId) {
            this.categoryId = categoryId;
        }
    
        public String getCategoryName() {
            return categoryName;
        }
    
        public void setCategoryName(String categoryName) {
            this.categoryName = categoryName;
        }
    
        public Integer getCategory_type() {
            return category_type;
        }
    
        public void setCategory_type(Integer category_type) {
            this.category_type = category_type;
        }
    
        public String getCategory_desc() {
            return category_desc;
        }
    
        public void setCategory_desc(String category_desc) {
            this.category_desc = category_desc;
        }
    }
    参考链接:springBoot常用注解
    优化方案:利用lombok插件完成简单的getter,setter,toString方法,然后重写构造方法,注意一定要有一个无参的构造方法。
    引入lombok: 
    # build.gradle
    compile('org.projectlombok:lombok')
    //    lombok插件,需要导入,然后IDEA安装Lombok Plugin
    在实体类中使用@Data注解: 
    package com.dante.imooc.sell.dataobject;
    
    import lombok.Data;
    import org.hibernate.annotations.DynamicUpdate;
    
    import javax.persistence.Entity;
    import javax.persistence.GeneratedValue;
    import javax.persistence.Id;
    import javax.persistence.Table;
    import java.util.Date;
    
    /**
     * @Author: Dante
     * @Desciption: 类目表
     * @Date: Created in 2018/1/17 0017 17:30
     * @Nodified By:      in 2018/1/17 0017 17:30
     *
     */
    @Table(name="product_category")
    @Entity
    @DynamicUpdate  //动态更新
    @Data           //包含生成getter,setter,和toString
    public class ProductCategory {
        /** 类目id。*/
        @Id
        @GeneratedValue
        private Integer categoryId;
    
        /**类目名字。*/
        private String categoryName;
    
        /**类目类型。*/
        private Integer categoryType;
    
        /**类目描述。*/
        private String categoryDesc;
    
        /**创建时间。*/
        private Date createTime;
    
        /**更新时间。*/
        private Date updateTime;
    
        public ProductCategory(String categoryName, Integer categoryType, String categoryDesc) {
            this.categoryName = categoryName;
            this.categoryType = categoryType;
            this.categoryDesc = categoryDesc;
        };
    
        public ProductCategory() {
        }
    }
     
    4.利用JPA快速构建DAO类,实现对数据库的基本操作
    package com.dante.imooc.sell.dataobject;
    
    import lombok.Data;
    import org.hibernate.annotations.DynamicUpdate;
    
    import javax.persistence.Entity;
    import javax.persistence.GeneratedValue;
    import javax.persistence.Id;
    import javax.persistence.Table;
    import java.util.Date;
    
    /**
     * @Author: Dante
     * @Desciption: 类目表
     * @Date: Created in 2018/1/17 0017 17:30
     * @Nodified By:      in 2018/1/17 0017 17:30
     *
     */
    @Table(name="product_category")
    @Entity
    @DynamicUpdate  //动态更新
    @Data           //包含生成getter,setter,和toString
    public class ProductCategory {
        /** 类目id。*/
        @Id
        @GeneratedValue
        private Integer categoryId;
    
        /**类目名字。*/
        private String categoryName;
    
        /**类目类型。*/
        private Integer categoryType;
    
        /**类目描述。*/
        private String categoryDesc;
    
        /**创建时间。*/
        private Date createTime;
    
        /**更新时间。*/
        private Date updateTime;
    
        public ProductCategory(String categoryName, Integer categoryType, String categoryDesc) {
            this.categoryName = categoryName;
            this.categoryType = categoryType;
            this.categoryDesc = categoryDesc;
        };
    
        public ProductCategory() {
        }
    }
     
    5.完成对DAO层的单元测试
    package com.dante.imooc.sell.dao;
    
    import com.dante.imooc.sell.dataobject.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 javax.transaction.Transactional;
    
    import java.util.Arrays;
    import java.util.List;
    
    import static org.junit.Assert.*;
    
    /**
     * productCategory接口测试
     * @Author: Dante
     * @Desciption: 测试接口
     * @Date: Created in 2018/1/18 0018 17:18
     * @Nodified By:      in 2018/1/18 0018 17:18
     */
    @RunWith(SpringRunner.class)
    @SpringBootTest
    
    public class ProductCategoryDaoTest {
        @Autowired
        private ProductCategoryDao dao;
    
        @Test
        @Transactional
        public void saveTest() {
            ProductCategory productCategory = new ProductCategory("尿素", 2, "尿素,又称碳酰胺(carbamide),是由碳、氮、氧、氢组成的有机化合物是一种白色晶体。最简单的有机化合物之一,是哺乳动物和某些鱼类体内蛋白质代谢分解的主要含氮终产物。也是目前含氮量最高的氮肥。
    " +
                    "作为一种中性肥料,尿素适用于各种土壤和植物。它易保存,使用方便,对土壤的破坏作用小,是目前使用量较大的一种化学氮肥。工业上用氨气和二氧化碳在一定条件下合成尿素。");
            ProductCategory result = dao.save(productCategory);
            Assert.assertNotEquals(null, result);
        }
        @Test
        public void modifyTest() {
            ProductCategory productCategory = new ProductCategory();
            productCategory.setCategoryId(1);
            productCategory.setCategoryName("复合肥");
            productCategory.setCategoryType(1);
            productCategory.setCategoryDesc("复合肥料是指含有两种或两种以上营养元素的化肥,复合肥具有养分含量高、副成分少且物理性状好等优点,对于平衡施肥,提高肥料利用率,促进作物的高产稳产有着十分重要的作用。
    " +
                    "但它也有一些缺点,比如它的养分比例总是固定的,而不同土壤、不同作物所需的营养元素种类、数量和比例是多样的。因此,使用前最好进行测土,了解田间土壤的质地和营养状况,另外也要注意和单元肥料配合施用,才能得到更好的效果。");
            dao.save(productCategory);
        }
        @Test
        public void findOneTest() {
            ProductCategory productCategory = dao.findOne(1);
            System.out.println(productCategory.toString());
        }
        @Test
        public void findByCategoryTypeInTest() {
            List<Integer> list = Arrays.asList(1,2);
            List<ProductCategory> result = dao.findByCategoryTypeIn(list);
            Assert.assertNotNull(result);
        }
    
    }
     

    <wiz_tmp_tag id="wiz-table-range-border" contenteditable="false" style="display: none;">





  • 相关阅读:
    Security and Cryptography in Python
    Security and Cryptography in Python
    Security and Cryptography in Python
    Security and Cryptography in Python
    Security and Cryptography in Python
    Security and Cryptography in Python
    Security and Cryptography in Python
    《EffectiveJava中文第二版》 高清PDF下载
    《MoreEffectiveC++中文版》 pdf 下载
    《啊哈c语言》 高清 PDF 下载
  • 原文地址:https://www.cnblogs.com/DDante/p/a37bb4bf4f537e28085a88614045a68b.html
Copyright © 2011-2022 走看看