• SpringBoot实践


    关于springBoot是个神马东西以及优缺点,请自行搜索了解。

    LZ看到很多关于SpringBoot的Demo,单看一篇总是没法整合SpringBoot与Mysql。没法子,还是自己操刀来一发为妙。

    本文将叙述关于SpringBoot与mysql整合实践。

    1.Eclipse 整合SpringBoot插件。(此步骤非常耗时,LZ本身尝试了多次。请在网络环境优情况下下进行操作)

      a.Eclipse 安装STS插件:

       eclipse->help->Eclipse Marketplace

      b.检测是否安装成功

        安装成功后提示重启eclipse,重启后新建Project 出现如图

      

    2.新建SpringBoot Project

      

    -->next

    -->next (选择您需要的依赖,Finish后会在pom.xml中出现对应jar依赖) 

    -->Finish

    项目结构如下:

    package com.example;
    
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RestController;
    
    /** 
    * @ClassName: SpringBootDemoHelloApplication 
    * @Description:
    * SpringBootDemoHelloApplication.java 是SpringBoot应用程序入口,或者叫主程序。
    * 注解@SpringBootApplication 标注他是一个SpringBoot应用,main方法使他成为一个主程序,将在应用启动时首先被执行。
    * 注解@RestController 标注这也是一个控制器。
    * @author mengfanzhu
    * @date 2017年2月20日 下午6:36:42 
    */
    @SpringBootApplication
    @RestController
    public class SpringBootDemoHelloApplication {
    
        @RequestMapping("/")
        public String hello(){
            return "hello boot";
        }
        
        public static void main(String[] args) {
            SpringApplication.run(SpringBootDemoHelloApplication.class, args);
        }
    }

      3.启动SpringBoot应用

        方式1:选择项目->右键

      

      方式2: eclipse->Windows->Show View

      

      启动成功后:

      

      附加:

      1.需要改动端口号:将resources下 application.properties 改为application.yml (个人爱好,可不改)

      输入

    server:
      port: 9090
      tomcat:
        uri-encoding: UTF-8  

     浏览器访问

      

    3.代码结构

       

    4.代码示例

      application.yml

    server:
      port: 9090
      tomcat:
        uri-encoding: UTF-8  
      
    spring:
      datasource:
        url: jdbc:mysql://localhost:3307/test?characterEncoding=UTF-8
        username: test1
        password: test1
        driver-class-name: com.mysql.jdbc.Driver
      jpa:
        database: MYSQL
        show-sql: true
        hibernate:
          ddl-auto: update
          naming-strategy: org.hibernate.cfg.ImprovedNamingStrategy
        properties:
          hibernate:
            dialect: org.hibernate.dialect.MySQL5Dialect

      pom.xml

    <?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>
    
        <groupId>com.example</groupId>
        <artifactId>demo</artifactId>
        <version>0.0.1-SNAPSHOT</version>
        <packaging>war</packaging>
    
        <name>spring_boot_demo_hello</name>
        <description>Demo project for Spring Boot</description>
    
        <parent>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-parent</artifactId>
            <version>1.5.1.RELEASE</version>
            <relativePath/> <!-- lookup parent from repository -->
        </parent>
    
        <properties>
            <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
            <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
            <java.version>1.8</java.version>
        </properties>
    
        <dependencies>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-aop</artifactId>
            </dependency>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-cache</artifactId>
            </dependency>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-data-redis</artifactId>
            </dependency>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-web</artifactId>
            </dependency>
    
            <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>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-data-jpa</artifactId>
            </dependency>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>
                    spring-boot-starter-data-elasticsearch
                </artifactId>
            </dependency>
            <!-- https://mvnrepository.com/artifact/com.sun.jna/jna -->
            <dependency>
                <groupId>com.sun.jna</groupId>
                <artifactId>jna</artifactId>
                <version>3.0.9</version>
            </dependency>
            <!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-batch -->
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-batch</artifactId>
            </dependency>
            <!-- springboot 热部署 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
            <optional>true</optional><!-- optional=true,依赖不会传递,该项目依赖devtools;之后依赖myboot项目的项目如果想要使用devtools,需要重新引入 -->
        </dependency>  
        </dependencies>
    
        <build>
            <plugins>
                <plugin>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-maven-plugin</artifactId>
                </plugin>
            </plugins>
        </build>
    
    
    </project>

    User.java

    package com.example.entity;
    
    import java.io.Serializable;
    import java.util.Date;
    import java.util.List;
    
    import javax.persistence.Column;
    import javax.persistence.Entity;
    import javax.persistence.FetchType;
    import javax.persistence.GeneratedValue;
    import javax.persistence.GenerationType;
    import javax.persistence.Id;
    import javax.persistence.JoinColumn;
    import javax.persistence.JoinTable;
    import javax.persistence.ManyToMany;
    import javax.persistence.ManyToOne;
    import javax.persistence.Table;
    
    import org.springframework.format.annotation.DateTimeFormat;
    
    import com.fasterxml.jackson.annotation.JsonBackReference;
    
    
    @Entity
    @Table(name="boot_user")
    public class User implements Serializable {
        
        /** 
        * @Fields serialVersionUID : TODO
        */ 
        private static final long serialVersionUID = -6550777752269466791L;
    
        @Id
        @GeneratedValue(strategy = GenerationType.IDENTITY)
        private Long id;
        
        @Column(length=50,nullable=false)
        private String name;
        
        private String loginName;
        
        private String password;
        
        @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
        private Date createdate;
        
        @ManyToOne
        @JoinColumn(name = "did")
        @JsonBackReference
        private Department department;
        
        @ManyToMany(cascade={},fetch = FetchType.EAGER)
        @JoinTable(name = "user_role",
            joinColumns={@JoinColumn(name="user_id")},
            inverseJoinColumns = {@JoinColumn(name="roles_id")})
        private List<Role> roleList;
    
        public Long getId() {
            return id;
        }
    
        public void setId(Long id) {
            this.id = id;
        }
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        public Date getCreatedate() {
            return createdate;
        }
    
        public void setCreatedate(Date createdate) {
            this.createdate = createdate;
        }
    
        public String getLoginName() {
            return loginName;
        }
    
        public void setLoginName(String loginName) {
            this.loginName = loginName;
        }
    
        public String getPassword() {
            return password;
        }
    
        public void setPassword(String password) {
            this.password = password;
        }
    
        public Department getDepartment() {
            return department;
        }
    
        public void setDepartment(Department department) {
            this.department = department;
        }
    
        public List<Role> getRoleList() {
            return roleList;
        }
    
        public void setRoleList(List<Role> roleList) {
            this.roleList = roleList;
        }
    
        public User() {
            super();
            // TODO Auto-generated constructor stub
        }
    
        public User(Long id, String name, String loginName, String password,
                Date createdate, Department department, List<Role> roleList) {
            super();
            this.id = id;
            this.name = name;
            this.loginName = loginName;
            this.password = password;
            this.createdate = createdate;
            this.department = department;
            this.roleList = roleList;
        }
    
        
    }

    Department.java,Role.java 代码参照User.java代码即可

    UserDao.java

    package com.example.dao;
    
    import java.util.Date;
    import java.util.List;
    
    import org.springframework.data.jpa.repository.JpaRepository;
    import org.springframework.stereotype.Repository;
    
    import com.example.entity.User;
    @Repository
    public interface UserDao extends JpaRepository<User, Long> {
        
        User findByLoginNameLike(String name);
    
        User readByLoginName(String name);
    
        List<User> getByCreatedateLessThan(Date star);
    }

    DepartmentDao.java,RoleDao.java参考UserDao.java 即可,这样就实现了分页、增删改查等功能。很便捷有木有!那为什么呢?看下JpaRepository接口,方法命名规则及相关问题后续重点介绍.

    UserController.java

    package com.example.controller;
    
    import java.util.HashMap;
    import java.util.Map;
    
    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.util.Assert;
    import org.springframework.web.bind.annotation.PathVariable;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.ResponseBody;
    import org.springframework.web.bind.annotation.RestController;
    
    import com.example.entity.User;
    import com.example.service.DataService;
    import com.example.service.UserService;
    
    /** 
    * @ClassName: UserController 
    * @Description: User控制器
    * @author mengfanzhu
    * @date 2017年2月20日 下午5:58:19 
    */
    @RestController
    @RequestMapping("/user")
    public class UserController {
        
        protected static Logger logger=LoggerFactory.getLogger(UserController.class);  
        @Autowired
        private UserService userService;
        @Autowired
        private DataService dataService;
        
        @RequestMapping("/demo/{name}")
        @ResponseBody
        public String demoShowName(@PathVariable String name){
             logger.debug("访问getUserByName,Name={}",name);  
             return "name is " + name;
        }
        /** 
         * @Title: UserController
         * @Description: 数据初始化
         * @author mengfanzhu
         * @throws 
         */
        @RequestMapping("/initdata")
        @ResponseBody
        public String initData(){
            dataService.initData();
            return "success";
        }
        
        /** 
         * @Title: UserController
         * @Description: 由loginName获取user
         * @param loginName
         * @author mengfanzhu
         * @throws 
         */
        @RequestMapping("/getUserByLoginName/{loginName}")
        @ResponseBody
        public Map<String,Object> getUserByName(@PathVariable String loginName){
            Map<String,Object> result = new HashMap<String, Object>();
            User user = userService.readByLoginName(loginName);
            Assert.notNull(user);
            result.put("name", user.getName());
            result.put("loginName", user.getLoginName());
            result.put("departmentName",user.getDepartment().getName());
            result.put("roleName", user.getRoleList().get(0).getName());
            return result;
        }
    }

      JpaConfiguration.java

    package com.example;
    
    import org.springframework.boot.autoconfigure.domain.EntityScan;
    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Configuration;
    import org.springframework.core.Ordered;
    import org.springframework.core.annotation.Order;
    import org.springframework.dao.annotation.PersistenceExceptionTranslationPostProcessor;
    import org.springframework.data.jpa.repository.config.EnableJpaRepositories;
    import org.springframework.transaction.annotation.EnableTransactionManagement;
    
    
    /** 
    * @ClassName: JpaConfiguration 
    * @Description: Jpa的配置类。
    * @EnableTransactionManagement 启用了JPA 的事务管理
    * @EnableJpaRepositories 启用了JPA资源库并指定了上面定义的接口资源库的位置
    * @EntityScan 指定了定义实体的位置
    * @author mengfanzhu
    * @date 2017年2月20日 下午7:21:39 
    */
    @Order(Ordered.HIGHEST_PRECEDENCE)
    @Configuration
    @EnableTransactionManagement(proxyTargetClass = true)
    @EnableJpaRepositories(basePackages = "com.example.dao")
    @EntityScan(basePackages = "com.example.entity")
    public class JpaConfiguration {
    
        @Bean
        PersistenceExceptionTranslationPostProcessor persistenceExceptionTranslationPostProcessor(){
            return new PersistenceExceptionTranslationPostProcessor();
        }
    }

     DataServiceImpl.java

    package com.example.service;
    
    import java.util.Date;
    import java.util.List;
    
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.stereotype.Service;
    import org.springframework.util.Assert;
    
    import com.example.dao.DepartmentDao;
    import com.example.dao.RoleDao;
    import com.example.dao.UserDao;
    import com.example.entity.Department;
    import com.example.entity.Role;
    import com.example.entity.User;
    
    @Service
    public class DataServiceImpl implements DataService{
        
        @Autowired
        private UserDao userDao;
        @Autowired
        private RoleDao roleDao;
        @Autowired
        private DepartmentDao departmentDao;
        
        public void initData(){
            userDao.deleteAll();
            departmentDao.deleteAll();
            roleDao.deleteAll();
            
            Department department = new Department();
            department.setName("财务部");
            department.setCreatedate(new Date());
            
            departmentDao.save(department);
            Assert.notNull(department.getId(),"部门ID不能为空!");
            
            Role role = new Role();
            role.setName("管理员");
            role.setCreatedate(new Date());
            
            roleDao.save(role);
            Assert.notNull(role.getId(),"角色ID不能为空");
            
            User user = new User();
            user.setName("管理员");
            user.setLoginName("admin");
            user.setDepartment(department);
            List<Role> roleList = roleDao.findAll();
            Assert.notNull(roleList,"角色列表不能为空!");
            user.setRoleList(roleList);
            user.setPassword("admin");
            
            userDao.save(user);
            Assert.notNull(user.getId(),"用户ID不能为空!");
        }
    }

    UserServiceImpl.java

    package com.example.service;
    
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.stereotype.Service;
    
    import com.example.dao.UserDao;
    import com.example.entity.User;
    
    @Service
    public class UserServiceImpl implements UserService {
    
        @Autowired
        private UserDao userDao;
        @Override
        public User readByLoginName(String name) {
            return userDao.readByLoginName(name);
        }
    
    }

    5.运行+SpringBoot热部署 

    <!-- springboot 热部署 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
            <optional>true</optional><!-- optional=true,依赖不会传递,该项目依赖devtools;之后依赖myboot项目的项目如果想要使用devtools,需要重新引入 -->
        </dependency>  

    至于如何访问就不用过多介绍了吧。参照SpringMVC 即可。

    代码已上传至 Github ,https://github.com/fzmeng/spring_boot_demo_hello

    后续将介绍 SpringBoot 实践系列,敬请期待~~~

  • 相关阅读:
    Azkaban的架构(三)
    Azkaban的功能特点(二)
    Hadoop工作流不足(六)
    Hadoop工作流--JobControl(五)
    ruby on rails创建的页面訪问很慢
    C#实现树的双亲表示法
    SetCapture ReleaseCapture
    HDU 4923 Room and Moor
    Spring概述
    WinMM.dll 函数汇总
  • 原文地址:https://www.cnblogs.com/cnmenglang/p/6420940.html
Copyright © 2020-2023  润新知