SpringBoot实践

来源:互联网 发布:java开发常见问题 编辑:程序博客网 时间:2024/06/11 01:34

关于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@RestControllerpublic 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;@Repositorypublic 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;@Servicepublic 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;@Servicepublic 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 即可。

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

0 0
原创粉丝点击