SpringBoot实例

7player

7号球员 -- Show Time !跳至内容

基于SpringBoot + Mybatis实现SpringMVC Web项目【原创】

目录
[隐藏]
  • 1一、热身
  • 2二、实践
    • 2.11.预览:
    • 2.22.Maven配置
    • 2.33.主函数
    • 2.44.Controller
    • 2.55.Mybatis
  • 3三、总结
  • 4四、参阅
  • 5附录:
 

一、热身

一个现实的场景是:当我们开发一个Web工程时,架构师和开发工程师可能更关心项目技术结构上的设计。而几乎所有结构良好的软件(项目)都使用了分层设计。分层设计是将项目按技术职能分为几个内聚的部分,从而将技术或接口的实现细节隐藏起来。

 

 

 

从另一个角度上来看,结构上的分层往往也能促进了技术人员的分工,可以使开发人员更专注于某一层业务与功能的实现,比如前端工程师只关心页面的展示与交互效果(例如专注于HTML,JS等),而后端工程师只关心数据和业务逻辑的处理(专注于Java,Mysql等)。两者之间通过标准接口(协议)进行沟通。

在实现分层的过程中我们会使用一些框架,例如SpringMVC。但利用框架带来了一些使用方面的问题。我们经常要做的工作就是配置各种XML文件,然后还需要搭建配置Tomcat或者Jetty作为容器来运行这个工程。每次构建一个新项目,都要经历这个流程。更为不幸的是有时候前端人员为了能在本地调试或测试程序,也需要先配置这些环境,或者需要后端人员先实现一些服务功能。这就和刚才提到的“良好的分层结构”相冲突。

每一种技术和框架都有一定的学习曲线。开发人员需要了解具体细节,才知道如何把项目整合成一个完整的解决方案。事实上,一个整合良好的项目框架不仅仅能实现技术、业务的分离,还应该关注并满足开发人员的“隔离”。

为了解决此类问题,便产生了Spring Boot这一全新框架。Spring Boot就是用来简化Spring应用的搭建以及开发过程。该框架致力于实现免XML配置,提供便捷,独立的运行环境,实现“一键运行”满足快速应用开发的需求。

与此同时,一个完整的Web应用难免少不了数据库的支持。利用JDBC的API需要编写复杂重复且冗余的代码。而使用O/RM(例如Hibernate)工具需要基于一些假设和规则,例如最普遍的一个假设就是数据库被恰当的规范了。这些规范在现实项目中并非能完美实现。由此,诞生了一种混合型解决方案——Mybatis。Mybatis是一个持久层框架,它从各种数据库访问工具中汲取大量优秀的思想,适用于任何大小和用途的数据库。根据官方文档的描述:MyBatis 是支持定制化 SQL、存储过程以及高级映射的优秀的持久层框架。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以对配置和原生Map使用简单的 XML 或注解,将接口和 Java 的 POJOs(Plain Old Java Objects,普通的 Java对象)映射成数据库中的记录。

最后,再回到技术结构分层上,目前主流倡导的设计模式为MVC,即模型(model)-视图(view)-控制器(controller)。实现该设计模式的框架有很多,例如Struts。而前文提到的SpringMVC是另一个更为优秀,灵活易用的MVC框架。 SpringMVC是一种基于Java的以请求为驱动类型的轻量级Web框架,其目的是将Web层进行解耦,即使用“请求-响应”模型,从工程结构上实现良好的分层,区分职责,简化Web开发。

目前,对于如何把这些技术整合起来形成一个完整的解决方案,并没有相关的最佳实践。将Spring Boot和Mybatis两者整合使用的资料和案例较少。因此,本文提供(介绍)一个完整利用SpringBoot和Mybatis来构架Web项目的案例。该案例基于SpringMVC架构提供完整且简洁的实现Demo,便于开发人员根据不同需求和业务进行拓展。

补充提示,Spring Boot 推荐采用基于 Java 注解的配置方式,而不是传统的 XML。只需要在主配置 Java 类上添加“@EnableAutoConfiguration”注解就可以启用自动配置。Spring Boot 的自动配置功能是没有侵入性的,只是作为一种基本的默认实现。开发人员可以通过定义其他 bean 来替代自动配置所提供的功能,例如在配置本案例数据源(DataSource)时,可以体会到该用法。

 

二、实践

一些说明:

项目IDE采用Intellij(主要原因在于Intellij颜值完爆Eclipse,谁叫这是一个看脸的时代)

工程依赖管理采用个人比较熟悉的Maven(事实上SpringBoot与Groovy才是天生一对)

1.预览:

(1)github地址

 

https://github.com/djmpink/springboot-mybatis

 

git :  https://github.com/djmpink/springboot-mybatis.git

 

(2)完整项目结构

 

 

 

 

(3)数据库

数据库名:test 

【user.sql】

SET FOREIGN_KEY_CHECKS=0;
-- ----------------------------
-- Table structure for user
-- ----------------------------
DROP TABLE IF EXISTS `user`;
CREATE TABLE `user` (
  `id` int(11) NOT NULL,
  `name` varchar(255) DEFAULT NULL,
  `age` int(11) DEFAULT NULL,
  `password` varchar(255) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
-- ----------------------------
-- Records of user
-- ----------------------------
INSERT INTO `user` VALUES ('1', '7player', '18', '123456');

 

2.Maven配置

完整的【pom.xml】配置如下:

 



    4.0.0
    cn.7player.framework
    springboot-mybatis
    1.0-SNAPSHOT
    
        org.springframework.boot
        spring-boot-starter-parent
        1.2.5.RELEASE
    
    
        UTF-8
        1.7
    
    
        
            
        
            org.springframework.boot
            spring-boot-starter-web
        
        
        
            org.springframework.boot
            spring-boot-starter-thymeleaf
        
        
        
            org.springframework.boot
            spring-boot-starter-jdbc
        
        
        
            org.springframework.boot
            spring-boot-starter-actuator
        
        
        
            org.mybatis
            mybatis-spring
            1.2.2
        
        
            org.mybatis
            mybatis
            3.2.8
        
        
        
            org.apache.tomcat
            tomcat-jdbc
        
        
            mysql
            mysql-connector-java
        
        
        
            com.alibaba
            fastjson
            1.1.43
        
        
        
            com.mangofactory
            swagger-springmvc
            0.9.5
        
    
    
        
            
                org.springframework.boot
                spring-boot-maven-plugin
            
        
    
    
        
            spring-milestone
            https://repo.spring.io/libs-release
        
    
    
        
            spring-milestone
            https://repo.spring.io/libs-release
        
    

3.主函数

 

【Application.java】包含main函数,像普通java程序启动即可。

此外,该类中还包含和数据库相关的DataSource,SqlSeesion配置内容。

注:@MapperScan(“cn.no7player.mapper”) 表示Mybatis的映射路径(package路径)

package cn.no7player;
 
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.log4j.Logger;
import org.mybatis.spring.SqlSessionFactoryBean;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;
import org.springframework.transaction.PlatformTransactionManager;
 
import javax.sql.DataSource;
 
@EnableAutoConfiguration
@SpringBootApplication
@ComponentScan
@MapperScan("cn.no7player.mapper")
public class Application {
    private static Logger logger = Logger.getLogger(Application.class);
 
    //DataSource配置
    @Bean
    @ConfigurationProperties(prefix="spring.datasource")
    public DataSource dataSource() {
        return new org.apache.tomcat.jdbc.pool.DataSource();
    }
 
    //提供SqlSeesion
    @Bean
    public SqlSessionFactory sqlSessionFactoryBean() throws Exception {
 
        SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean();
        sqlSessionFactoryBean.setDataSource(dataSource());
 
        PathMatchingResourcePatternResolver resolver = new PathMatchingResourcePatternResolver();
 
        sqlSessionFactoryBean.setMapperLocations(resolver.getResources("classpath:/mybatis/*.xml"));
 
        return sqlSessionFactoryBean.getObject();
    }
 
    @Bean
    public PlatformTransactionManager transactionManager() {
        return new DataSourceTransactionManager(dataSource());
    }
 
    /**
     * Main Start
     */
    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
        logger.info("============= SpringBoot Start Success =============");
    }
 
}

4.Controller

 

请求入口Controller部分提供三种接口样例:视图模板,Json,restful风格

(1)视图模板

返回结果为视图文件路径。视图相关文件默认放置在路径 resource/templates下:

package cn.no7player.controller;
 
import org.apache.log4j.Logger;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
 
@Controller
public class HelloController {
 
    private Logger logger = Logger.getLogger(HelloController.class);
 
    /*
    *   http://localhost:8080/hello?name=cn.7player
     */
 
    @RequestMapping("/hello")
    public String greeting(@RequestParam(value="name", required=false, defaultValue="World") String name, Model model) {
        logger.info("hello");
        model.addAttribute("name", name);
        return "hello";
    }
    
}

 

(2)Json

返回Json格式数据,多用于Ajax请求。

package cn.no7player.controller;
 
import cn.no7player.model.User;
import cn.no7player.service.UserService;
import org.apache.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
 
@Controller
public class UserController {
 
    private Logger logger = Logger.getLogger(UserController.class);
 
    @Autowired
    private UserService userService;
 
    /*
     *  http://localhost:8080/getUserInfo
     */
 
    @RequestMapping("/getUserInfo")
    @ResponseBody
    public User getUserInfo() {
        User user = userService.getUserInfo();
        if(user!=null){
            System.out.println("user.getName():"+user.getName());
            logger.info("user.getAge():"+user.getAge());
        }
        return user;
    }
}

 

(3)restful

REST 指的是一组架构约束条件和原则。满足这些约束条件和原则的应用程序或设计就是 RESTful。

此外,有一款RESTFUL接口的文档在线自动生成+功能测试功能软件——Swagger UI,具体配置过程可移步《Spring Boot 利用 Swagger 实现restful测试》

package cn.no7player.controller;
 
import cn.no7player.model.User;
import com.wordnik.swagger.annotations.ApiOperation;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;
 
import java.util.ArrayList;
import java.util.List;
 
@RestController
@RequestMapping(value="/users")
public class SwaggerController {
    
    /*
     *  http://localhost:8080/swagger/index.html
     */
 
    @ApiOperation(value="Get all users",notes="requires noting")
    @RequestMapping(method=RequestMethod.GET)
    public List getUsers(){
        List list=new ArrayList();
 
        User user=new User();
        user.setName("hello");
        list.add(user);
 
        User user2=new User();
        user.setName("world");
        list.add(user2);
        return list;
    }
 
    @ApiOperation(value="Get user with id",notes="requires the id of user")
    @RequestMapping(value="/{name}",method=RequestMethod.GET)
    public User getUserById(@PathVariable String name){
        User user=new User();
        user.setName("hello world");
        return user;
    }
}

5.Mybatis

 

配置相关代码在Application.java中体现。

(1)【application.properties】

spring.datasource.url=jdbc:mysql://127.0.0.1:3306/test?useUnicode=true&characterEncoding=gbk&zeroDateTimeBehavior=convertToNull
spring.datasource.username=root
spring.datasource.password=123456
spring.datasource.driver-class-name=com.mysql.jdbc.Driver

 

注意,在Application.java代码中,配置DataSource时的注解

@ConfigurationProperties(prefix=“spring.datasource”) 

表示将根据前缀“spring.datasource”从application.properties中匹配相关属性值。

(2)【UserMapper.xml】

Mybatis的sql映射文件。Mybatis同样支持注解方式,在此不予举例了。




 
  
 

 

(3)接口UserMapper

package cn.no7player.mapper;
 
import cn.no7player.model.User;
 
public interface UserMapper {
    public User findUserInfo();
}

三、总结

 

(1)运行 Application.java

(2)控制台输出:

 

 

…..(略过无数内容)

 

(3)访问:

针对三种控制器的访问分别为:

视图:

http://localhost:8080/hello?name=7player

 

Json:

http://localhost:8080/getUserInfo

 

 

Restful(使用了swagger):

http://localhost:8080/swagger/index.html

 

 

 

四、参阅

《Spring Boot – Quick Start》

http://projects.spring.io/spring-boot/#quick-start

《mybatis》

http://mybatis.github.io/mybatis-3/

《使用 Spring Boot 快速构建 Spring 框架应用》

http://www.ibm.com/developerworks/cn/java/j-lo-spring-boot/

《Using @ConfigurationProperties in Spring Boot》

http://www.javacodegeeks.com/2014/09/using-configurationproperties-in-spring-boot.html?utm_source=tuicool

《Springboot-Mybatis-Mysample》

https://github.com/mizukyf/springboot-mybatis-mysample

《Serving Web Content with Spring MVC》

http://spring.io/guides/gs/serving-web-content/

《理解RESTful架构》

http://www.ruanyifeng.com/blog/2011/09/restful

 

附录:

Spring Boot 推荐的基础 POM 文件

名称

说明

spring-boot-starter

核心 POM,包含自动配置支持、日志库和对 YAML 配置文件的支持。

spring-boot-starter-amqp

通过 spring-rabbit 支持 AMQP。

spring-boot-starter-aop

包含 spring-aop 和 AspectJ 来支持面向切面编程(AOP)。

spring-boot-starter-batch

支持 Spring Batch,包含 HSQLDB。

spring-boot-starter-data-jpa

包含 spring-data-jpa、spring-orm 和 Hibernate 来支持 JPA。

spring-boot-starter-data-mongodb 

包含 spring-data-mongodb 来支持 MongoDB。

spring-boot-starter-data-rest

通过 spring-data-rest-webmvc 支持以 REST 方式暴露 Spring Data 仓库。

spring-boot-starter-jdbc

支持使用 JDBC 访问数据库。

spring-boot-starter-security

包含 spring-security。

spring-boot-starter-test

包含常用的测试所需的依赖,如 JUnit、Hamcrest、Mockito 和 spring-test 等。 

spring-boot-starter-velocity

支持使用 Velocity 作为模板引擎。

spring-boot-starter-web

支持 Web 应用开发,包含 Tomcat 和 spring-mvc。

spring-boot-starter-websocket

支持使用 Tomcat 开发 WebSocket 应用。

spring-boot-starter-ws

支持 Spring Web Services。

spring-boot-starter-actuator

添加适用于生产环境的功能,如性能指标和监测等功能。

spring-boot-starter-remote-shell

添加远程 SSH 支持。

spring-boot-starter-jetty

使用 Jetty 而不是默认的 Tomcat 作为应用服务器。

spring-boot-starter-log4j

添加 Log4j 的支持。

spring-boot-starter-logging

使用 Spring Boot 默认的日志框架 Logback。

spring-boot-starter-tomcat

使用 Spring Boot 默认的 Tomcat 作为应用服务器。

 

 

 

 
MVC MyBatis spring SpringBoot
 
分享到:       
‹ 上一篇 •  下一篇 ›

15 条评论

说点什么吧…

 
昵称▼
  1. 匿名2周前

    讲解 很详细 也很实用 赞一个

    回复
  2. 匿名2周前

    多谢!讲解非常详细。

    回复
  3. 匿名4周前

    是啊刚进公司用的springboot,为什么用java -jar运行啊,懵啊

    回复
  4. James.Fu2016-8-10 07:17

    写的很棒。不过感觉还是离真实web项目远了一点。为什么都是采用java -jar的方式来运行的?能不能谈一下用eclipse如何创建web项目呢?如何run on a server,如何调试?

    回复
    1. 匿名2016-9-7 17:00

      springboot就是这个写法啊,我们公司的web都是用这个弄的,

      回复
      1. 匿名2016-9-13 18:28

        我们公司也是用的这个框架,很棒的!

        回复
      2. 匿名2016-9-13 18:29

        service层和mapper没有展示出来,代码不全

        回复
      3. 匿名2016-9-13 18:30

        好吧 我看错了 后面有接口和mapper

        回复
  5. 匿名2016-7-29 14:53

    谢谢您的项目啊

    回复
  6. 匿名2016-4-22 16:54

    没有事务控制

    回复
  7. 匿名2016-4-8 10:14

    我下的源码,为什么我本地数据库连不上呢

    回复
    1. 匿名2016-4-8 10:16

      注意看下 本地数据库的用户名和密码配置是否和源码一致?

      回复
  8. 匿名2015-11-6 17:45

    我就差一点,现在按照你的老是报错想看看你的代码是怎么写的,发给我吧,谢谢了[email protected]

    回复
  9. 匿名2015-11-6 17:44

    能把你的源码打包提供出来吗(包可以删掉)?感激不尽,发我邮箱也可以谢谢了,[email protected]

    回复
  10. coolguy2015-8-30 21:10

    虽然完全没看懂在说什么(实际上是完全没看),但是还是有必要抢个沙发坐坐

    回复

近期文章

  • 用户故事-思维导图
  • 案例学习 Java8 Lambda函数式编程
  • 修改intellij(idea)中mybatis对应的xml背景颜色
  • Java常见异常及解释(转)
  • swagger 常用教程

近期评论

  • 匿名发表在《案例学习 Java8 Lambda函数式编程》
  • 匿名发表在《基于SpringBoot + Mybatis实现SpringMVC Web项目【原创】》
  • 匿名发表在《基于SpringBoot + Mybatis实现SpringMVC Web项目【原创】》
  • 匿名发表在《案例学习 Java8 Lambda函数式编程》
  • 匿名发表在《基于SpringBoot + Mybatis实现SpringMVC Web项目【原创】》

标签云

@ Provides  Ant  binding  BindingAnnotations build  C  DI  eclipse  gcc  guice HIbernate  Instance  Intellij  java  java8 json  jsp  Lambda  LinkedBindings  linux Listener  map  Maven  MVC  MyBatis  provider scanf  servlet  spring  SpringBoot  Struts2 The Internet's Own Boy  tomcat  主持  互联网之子  依赖注入  年会  教程  栈  梦想  理想 电影  纪录片  绑定  链表

Views

  • 基于SpringBoot + Mybatis实现SpringMVC Web项目【原创】- 21,567 views
  • tomcat部署根目录- 9,633 views
  • Linux上Json库的安装- 9,375 views
  • Struts2 开发步骤 教程(MyEclipse )- 5,005 views
  • 天空蓝得自由——谈谈梦想【原创】- 2,707 views
  • intellij 快捷键 大全- 2,646 views
  • 基于Maven搭建Spring + Hibernate + Struts2项目【原创】- 2,348 views
  • 爱情小说 之 笔名【原创】- 2,072 views
  • 2015 神州通付(成都)年会主持稿(整理+图)- 1,418 views
  • Intellij 创建Maven项目- 1,396 views
2015年八月
« 七   二 »
  1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31  

友情链接

coolguy的博客 http://www.coolguy.pw/

分类目录

  • C/C++
  • Guice
  • JAVA
  • Linux
  • Tool
  • Web
  • 外援
  • 左边锋
  • 未分类

文章归档

  • 2016年九月
  • 2016年八月
  • 2016年五月
  • 2016年三月
  • 2016年二月
  • 2015年八月
  • 2015年七月
  • 2015年五月
  • 2015年三月
  • 2015年二月
  • 2015年一月

功能

  • 注册
  • 登录
  • 文章RSS
  • 评论RSS
  • WordPress.org

7号圣诞技术流教练

转载于:https://www.cnblogs.com/muliu/p/5960804.html

你可能感兴趣的:(json,java,开发工具)