美文网首页
eclipse下第一个spring-boot

eclipse下第一个spring-boot

作者: liangxifeng833 | 来源:发表于2018-01-22 20:21 被阅读810次

    eclipse下创建spring-boot参考文章http://blog.csdn.net/clementad/article/details/51334064

    1. 按着以上文章创建好后, 目录结构如下:


      image.png
    2. 以上HelloController.java是自己创建的内容是:
    package com.lxf;
    
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RequestMethod;
    import org.springframework.web.bind.annotation.RestController;
    
    @RestController
    public class HelloController {
        @RequestMapping(value="/hello", method=RequestMethod.GET)
        public String say()
        {
            return "spring boot hello world";
        }
    }
    
    1. 在MyfirstSpringBootApplication文件中main方法右键->run as -> Spring Boot App,就可以把spring-boot启动, 也就意味着spring-boot中的tomcate会自动启动, 默认端口是8080, 注意如果有占用会启动失败;
    2. 启动成功后,在控制前会看到类似以下的提示,代表8080端口已启用
      image.png
      5.访问地址: http://localhost:8080/hello
      image.png

    spring-boot的启动方式

    1. 在MyfirstSpringBootApplication文件中main方法右键->run as -> Spring Boot App. 关闭spring-boot,在控制前右上侧有红色的关闭按钮;
    2. 进入项目目录
    cd ~/workspaceEE/myfirst-spring-boot/ 
    mvn spring-boot:run
    
    1. 进入项目目录
    cd ~/workspaceEE/myfirst-spring-boot/ 
    mvn install
    cd target
    

    后会看到在target目录下多了一个 myfirst-spring-boot-0.0.1-SNAPSHOT.jar, 然后使用java命令启动

    java -jar myfirst-spring-boot-0.0.1-SNAPSHOT.jar
    

    属性配置

    • 目录存放src/main/resources/application.yml, 配置说明如下:
    server: 
      port: 8089
      context-path: /gril
    cupSize: B
    age: 19
    content: "cupSize = ${cupSize}, age = ${age}" //在配置文件中引用配置文件自身的属性
    
    girl:  //定义公有属性,该配置需要新建 GirlProgerties.java类配合使用
      age: 199
      heigh: 19.99  
    
    • GirlProgerties.java 类配合属性girl的子属性使用
    package com.lxf;
    import org.springframework.boot.context.properties.ConfigurationProperties;
    import org.springframework.stereotype.Component;
    @Component
    @ConfigurationProperties(prefix = "girl") //该配置对应application.yml配置文件中的girl属性
    public class GirlProgerties {
        private Integer age;
        private float height;
        public Integer getAge() {
            return age;
        }
        public void setAge(Integer age) {
            this.age = age;
        }
        public float getHeight() {
            return height;
        }
        public void setHeight(float height) {
            this.height = height;
        }   
    }
    
    • 在Controller中获取application.yml配置文件的属性
    package com.lxf;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.beans.factory.annotation.Value;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RequestMethod;
    import org.springframework.web.bind.annotation.RestController;
    /**
     * 获取application.yml属性内容
     * @author lxf
     */
    @RestController
    public class HelloController {
        @Value("${cupSize}")
        private String cupSize;
        @Value("${age}")
        private int age;
        @Value("${content}")
        private String content;
        @Autowired
        private GirlProgerties girlProgerties;
        @RequestMapping(value="/hello", method=RequestMethod.GET)
        public String say()
        {
            return cupSize + " " +age + content + girlProgerties.getAge();
        }
    }
    
    • 开发环境 配置 application-develop.yml, 注意,服务器端口配置为8088
    server: 
      port: 8088
      context-path: /gril
    cupSize: A
    age: 18
    content: "cupSize = ${cupSize}, age = ${age}"
    
    girl:
      age: 188
      heigh: 18.8  
    
    • 生产环境 配置 application-develop.yml, 注意,服务器端口配置为8089
    • 公共配置 application.yml, 调用 开发环境 的配置
    spring: 
      profiles:
        active: develop
    
    • 根据以上第一种启动spring-boot方式启动, 开启8088端口开发环境
    • 感觉以上第三种启动方式, java -jar 带启动参数的方式启动,参数为生产环境配置
    java -jar myfirst-spring-boot-0.0.1-SNAPSHOT.jar --spring.profiles.active=production
    
    • 以上两步分别启动了 开发环境8088, 和生产环境8089端口
    • 可以分别访问
    http://localhost:8088/gril/hello
    http://localhost:8089/gril/hello
    

    Controller的使用

    • 常用注解


      image.png
    • 使用模板解析配合@Controller注解 使用
      控制器

    package com.lxf;
    import org.springframework.stereotype.Controller;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RequestMethod;
    import org.springframework.web.bind.annotation.RestController;
    @Controller
    public class HelloController {
        @RequestMapping(value="/hello", method=RequestMethod.GET)
        public String say()
        {
            return "index";
        }
    }
    

    pom.xml添加依赖

            <!-- 配置模板 -->
            <dependency>
              <groupId>org.springframework.boot</groupId>
              <artifactId>spring-boot-starter-thymeleaf</artifactId>
            </dependency>
    

    在src/main/resources/templates中新增index.html

    <h1>Hello Spring Boot</h1>
    

    启动后访问: http://localhost:8088/gril/hello

    配置两个url指向同一个控制器方法

        @RequestMapping(value={"/hello", "hi"}, method=RequestMethod.GET)
        public String say()
        {
            return cupSize + " " +age + content + girlProgerties.getAge();
        }
    

    以上配置http://localhost:8088/gril/hellohttp://localhost:8088/gril/hi等效
    同时@RequestMapping也可以作用在控制器上与springMvc用法一致

    获取URL参数的注解

    image.png
    • 接收参数一
        @RequestMapping(value="/hello/{id}", method=RequestMethod.GET)
        public String say(@PathVariable("id") Integer id)
        {
            return "id="+id;
        }
    

    访问: http://localhost:8088/gril/hello/12, 输出结果 id=12

    • 接收参数二
        @RequestMapping(value="/hello", method=RequestMethod.GET)
        public String say(@RequestParam(value="id", required=false, defaultValue="0") Integer myId)
        {
            return "id="+myId;
    

    访问: http://localhost:8088/gril/hello/hello?id=123 , 输出: id=123

    @RequestMapping(value="/hello", method=RequestMethod.GET)
    @GetMapping(value="/hello") 和以上一行等效
    

    使用数据库

    • pom.xml配置添加依赖
            <!-- 配置使用数据库 -->
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-data-jpa</artifactId>
            </dependency>
    
            <dependency>
                <groupId>mysql</groupId>
                <artifactId>mysql-connector-java</artifactId>
                <version>5.1.27</version>
            </dependency>
    
    • application.properties
    server.port=8099
    #DB Configuration:
    spring.datasource.driver-class-name=com.mysql.jdbc.Driver
    spring.datasource.url=jdbc:mysql://127.0.0.1:3306/test
    spring.datasource.username=root
    spring.datasource.password=123456
    
    
    #JPA Configuration:
    spring.jpa.hibernate.ddl-auto=create
    spring.jpa.show-sql=true
    
    • Girl实体类
    package com.lxf.model;
    
    import javax.persistence.Entity;
    import javax.persistence.GeneratedValue;
    import javax.persistence.GenerationType;
    import javax.persistence.Id;
    import javax.persistence.Table;
    
    import org.springframework.stereotype.Component;
    
    /**
     * gril实体类, 对应girl数据库
     * @author lxf
     */
    @Entity
    @Table(name="t_girl")
    public class Girl {
        @Id
        @GeneratedValue(strategy = GenerationType.AUTO)
        private Integer id;
        
        private Integer age;
        
        private String curSize;
        
        public Girl(){}
    
        public Integer getId() {
            return id;
        }
    
        public void setId(Integer id) {
            this.id = id;
        }
    
        public Integer getAge() {
            return age;
        }
    
        public void setAge(Integer age) {
            this.age = age;
        }
    
        public String getCurSize() {
            return curSize;
        }
    
        public void setCurSize(String curSize) {
            this.curSize = curSize;
        }   
    }
    
    • 启动spring-boot会在数据库中自动创建 t_girl
    • 将application.properties配置
    spring.jpa.hibernate.ddl-auto=update
    
    • 新建 GirlRepository接口操作数据库,相当与Dao
    package com.lxf;
    
    import com.lxf.model.Girl;
    import org.springframework.data.jpa.repository.JpaRepository;
    
    import java.util.List;
    
    public interface GirlRepository extends JpaRepository<Girl,Integer> {
        /**
         * 自定根据年龄查询列表
         * @param age
         * @return
         */
        public List<Girl> findByAge(Integer age);
    }
    
    • 新建GirlService
    package com.lxf;
    
    import com.lxf.model.Girl;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.stereotype.Service;
    
    import javax.transaction.Transactional;
    
    @Service
    public class GirlService {
        @Autowired GirlRepository girlRepository;
    
        /**
         * 使用@Transactional事务注解
         */
        @Transactional
        public void insertTwo()
        {
            Girl girlA = new Girl();
            girlA.setAge(36);
            girlA.setCurSize("A");
    
    
            girlRepository.save(girlA);
    
            Girl girlB = new Girl();
            girlB.setAge(38);
            girlB.setCurSize("BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBb");
            girlRepository.save(girlB);
        }
    }
    
    • 新建GirlController控制器
    package com.lxf;
    
    import com.lxf.model.Girl;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.web.bind.annotation.*;
    
    import java.util.List;
    
    /**
     * 请求controller
     */
    @RestController
    public class GirlController {
        @Autowired
        private GirlRepository girlRepository;
        @Autowired GirlService girlService;
    
        /**
         * 查询女孩列表
         * @return
         */
        @GetMapping(value="/girls")
        public List<Girl> girlList()
        {
    
            return girlRepository.findAll();
        }
        @GetMapping(value = "/girls/{id}")
        public Girl girlFindOne(@PathVariable("id") Integer id)
        {
            return girlRepository.findOne(id);
        }
        /**
         * 新增女生
         */
        @PostMapping(value = "/girls")
        public Girl girlAdd(@RequestParam("cupSize") String cupSize,
                              @RequestParam("age") Integer age)
        {
            Girl girl = new Girl();
            girl.setAge(age);
            girl.setCurSize(cupSize);
            return girlRepository.save(girl);
        }
    
        /**
         * 更新女孩信息
         * @param id
         * @param cupSize
         * @param age
         * @return
         */
        @PutMapping(value = "/girls/{id}")
        public Girl girlUpdate(@PathVariable("id") Integer id,
                               @RequestParam("age") Integer age,
                               @RequestParam("cupSize") String cupSize
                               ){
            Girl girl = new Girl();
            girl.setId(id);
            girl.setCurSize(cupSize);
            girl.setAge(age);
            return girlRepository.save(girl);
        }
    
        /**
         * 删除女生信息
         * @param id
         */
        @DeleteMapping(value = "/girls/{id}")
        public void girlDel(@PathVariable("id") Integer id)
        {
            girlRepository.delete(id);
        }
    
        /**
         * 通过年龄查询列表
         * @param age
         * @return
         */
        @GetMapping(value = "/girls/age/{age}")
        public List<Girl> girlListByAge(@PathVariable("age") Integer age)
        {
            return girlRepository.findByAge(age);
        }
    
        /**
         * 调用事务同时添加两条记录
         */
        @PostMapping(value = "/girls/two")
        public void girlAddTwo()
        {
            girlService.insertTwo();
        }
    }
    

    相关文章

      网友评论

          本文标题:eclipse下第一个spring-boot

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