1.springboot简介

       Spring Boot 是由 Pivotal 团队提供的全新框架,其设计目的是用来简化新 Spring 应用的初始搭建以及开发过程。该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置。用我的话来理解,就是 Spring Boot 其实不是什么新的框架,它默认配置了很多框架的使用方式,就像 Maven 整合了所有的 Jar 包,Spring Boot 整合了所有的框架。

      springboot有四个核心:

       1)自动配置;

       2)起步依赖;

       3)命令行界面;

      4)Actuator:深入运行的SpringBoot应用程序,可以了解整个技术框架的原理。

      对于SpringBoot来说,可以极快开发一个Restful风格的Web服务。因为springboot框架整合了spring样板。但值得说的是:springgboot给你呈现的是优雅的一面的同时,是隐藏着的无尽复杂和冗余;因此,深入学习springboot其实还是很有难度的。

2.MyBatis简介

       MyBatis是一个Java持久化框架,它通过XML描述符或注解把对象与存储过程或SQL语句关联起来,映射成数据库内对应的纪录。与其他对象关系映射框架不同,MyBatis没有将Java对象与数据库表关联起来,而是将Java方法与SQL语句关联。MyBatis允许用户充分利用数据库的各种功能,例如存储过程、视图、各种复杂的查询以及某数据库的专有特性。如果要对遗留数据库、不规范的数据库进行操作,或者要完全控制SQL的执行,MyBatis是一个不错的选择。
       与JDBC相比,MyBatis简化了相关代码:SQL语句在一行代码中就能执行。MyBatis提供了一个映射引擎,声明式的把SQL语句执行结果与对象树映射起来。通过使用一种内建的类XML表达式语言,或者使用Apache Velocity集成的插件,SQL语句可以被动态的生成。

       与Hibernate相比,MyBatis具有如下优势:

       1)MyBatis可以进行更为细致的SQL优化,可以减少查询字段。

       2)MyBatis容易掌握,而Hibernate门槛较高。

       缺点也比较明显:

       1)SQL语句可能不兼容;

       2)DAO层开发比MyBatis简单,Mybatis需要维护SQL和结果映射;

       3)缓存机制不佳。

3.springboot+MyBatis操作SQLServer

       在Eclipse上建立SpringBoot样例,需要如下操作:

1)安装springboot插件。

在Help里选择EclipseMarketplace,然后搜sts,随后安装。

       

spring boot api接口 信息泄露 springboot怎么暴露接口_spring

spring boot api接口 信息泄露 springboot怎么暴露接口_spring_02

2)新建springboot样例。

      当新建工程的时候,能出现SpingBoot的样例时,说明安装成功。

       

spring boot api接口 信息泄露 springboot怎么暴露接口_sqlserver_03

(1)新建SpringStarterProject(注意JAVA版本号的选择)

spring boot api接口 信息泄露 springboot怎么暴露接口_mybatis_04

spring boot api接口 信息泄露 springboot怎么暴露接口_User_05

 

(2)选择Web、MyBatis和SQLServer支持。

spring boot api接口 信息泄露 springboot怎么暴露接口_mybatis_06

(3)几种文件类型的定义

本工程会牵涉几个文件:

<1>pom.xml文件:用于定义Maven文件依赖;

<2>application.properties文件(或application.yml文件):用于定义工程属性,关于依赖库的基本定义均可以在这里定义。

<3>controller文件:用于定义网络访问接口;

<4>service文件:用于定义访问的服务具体实现;

<5>entity文件:用于定义访问的实体文件;

<6>dao的JAVA程序接口文件:用于定义访问数据库的程序;

<7>dao的XML文件:用于定义MyBatis的程序与SQL语句的转换。

(4)建立Controller

package com.xxx.springboot.service.impl;

import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import com.xxx.springboot.dao.UserDao;
import com.xxx.springboot.entity.User;
import com.xxx.springboot.service.IUserService;

@Service
public class UserServiceImpl implements IUserService {

    @Autowired
    private UserDao userDao;

    @Override
    public List<User> getAllUsers() {
        return userDao.getAllUsers();
    }

    @Override
    public int addUser(User user) {
        SimpleDateFormat form = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        user.setCreatedTime(form.format(new Date()));
        return userDao.addUser( user );
    }

    @Override
    public int deleteUser(User user) {
        return userDao.deleteUser(user);
    }
}

(5)建立service接口

package com.xxx.springboot.service;

import java.util.List;

import com.xxx.springboot.entity.User;

public interface IUserService {
	public List<User> getAllUsers();

    public int addUser(User user);

    public int deleteUser(User user);
}

(6)建立service实现

package com.xxx.springboot.service.impl;

import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import com.xxx.springboot.dao.UserDao;
import com.xxx.springboot.entity.User;
import com.xxx.springboot.service.IUserService;

@Service
public class UserServiceImpl implements IUserService {

    @Autowired
    private UserDao userDao;

    @Override
    public List<User> getAllUsers() {
        return userDao.getAllUsers();
    }

    @Override
    public int addUser(User user) {
        SimpleDateFormat form = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        user.setCreatedTime(form.format(new Date()));
        return userDao.addUser( user );
    }

    @Override
    public int deleteUser(User user) {
        return userDao.deleteUser(user);
    }
}

(7)建立entity接口

package com.xxx.springboot.entity;

public class User {
	private Integer userId;
    private String userName;
    private Boolean sex;
    private String createdTime;
    
    public User(Integer userId, String userName, Boolean sex, String createdTime) {
        this.userId = userId;
        this.userName = userName;
        this.sex = sex;
        this.createdTime = createdTime;
    }
    
    public User() {
        super();
    }

    public Integer getUserId() {
        return userId;
    }

    public void setUserId(Integer userId) {
        this.userId = userId;
    }

    public String getUserName() {
        return userName;
    }

    public void setUserName(String userName) {
        this.userName = userName;
    }

    public Boolean getSex() {
        return sex;
    }

    public void setSex(Boolean sex) {
        this.sex = sex;
    }

    public String getCreatedTime() {
        return createdTime;
    }

    public void setCreatedTime(String createdTime) {
        this.createdTime = createdTime;
    }
}

(8)建立Dao接口

package com.xxx.springboot.dao;

import java.util.List;

import com.xxx.springboot.entity.User;

public interface UserDao {
	List<User> getAllUsers();
    int addUser(User user);
    int deleteUser(User user);
}

(9)建立DAO的XML文件

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper 
     PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" 
     "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >

<mapper namespace="com.xxx.springboot.dao.UserDao">

	<resultMap id="UserMap" type="com.xxx.springboot.entity.User">
        <id property="userId" column="user_id" javaType="java.lang.Integer"></id>
        <result property="userName" column="user_name" javaType="java.lang.String"></result>
        <result property="sex" column="sex" javaType="java.lang.Boolean"></result>
        <result property="createdTime" column="created_time" javaType="java.lang.String"></result>
    </resultMap>

    <select id="getAllUsers" resultMap="UserMap">
        select * from user_test order by user_id;
    </select>

    <insert id="addUser" parameterType="com.xxx.springboot.entity.User">
        insert into user_test ( user_id, user_name, sex, created_time ) values ( #{userId}, #{userName}, #{sex}, #{createdTime} )
    </insert>

    <delete id="deleteUser" parameterType="com.xxx.springboot.entity.User">
        delete from user_test where user_name = #{userName}
    </delete>
</mapper>

(10)配置Application.properties

server.port=服务器端口配置

# mybatis 配置
mybatis.type-aliases-package=com.xxx.springboot.entity
mybatis.mapper-locations=classpath:mapper/*.xml
mybatis.config-locations=classpath:mybatis-config.xml
mybatis.configuration.map-underscore-to-camel-case=true

## -------------------------------------------------

## SqlServer 配置
spring.datasource.url=jdbc:sqlserver://127.0.0.1:端口;databasename=数据库名
spring.datasource.driver-class-name=com.microsoft.sqlserver.jdbc.SQLServerDriver
spring.datasource.username=数据用户名
spring.datasource.password=数据库密码

(11)配置MyBatis的XML文件

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration 
     PUBLIC "-//mybatis.org//DTD Config 3.0//EN" 
     "http://mybatis.org/dtd/mybatis-3-config.dtd" >
<configuration>
    <settings>
        <setting name="useGeneratedKeys" value="true"/>
        <setting name="useColumnLabel" value="true"/>
        <setting name="mapUnderscoreToCamelCase" value="true"/>
    </settings>
	<typeAliases>
        <package name="com.xxx.springboot.dao"></package>
    </typeAliases>
</configuration>

4.暴露接口

          但此文件的去点是,无法获得所有可以访问的URL,本程序提供的URL访问程序如下。

   

package com.xxx.springboot.web;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.context.WebApplicationContext;
import org.springframework.web.method.HandlerMethod;
import org.springframework.web.servlet.mvc.condition.PatternsRequestCondition;
import org.springframework.web.servlet.mvc.condition.RequestMethodsRequestCondition;
import org.springframework.web.servlet.mvc.method.RequestMappingInfo;
import org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping;

import com.google.gson.Gson;


@RestController
public class getAllURL {
	@Autowired
	WebApplicationContext applicationContext;
 
	@RequestMapping(value = "v2/getAllUrl", method = RequestMethod.GET)
	public Object getAllUrl() {		
		RequestMappingHandlerMapping mapping = applicationContext.getBean(RequestMappingHandlerMapping.class);
		
		// 获取url与类和方法的对应信息
		Map<RequestMappingInfo, HandlerMethod> map = mapping.getHandlerMethods();
 
		List<Map<String, String>> list = new ArrayList<Map<String, String>>();		

		System.out.print("At beginning, List is: ");
		System.out.println(list);
		
		for (Entry<RequestMappingInfo, HandlerMethod> m : map.entrySet()) {
			Map<String, String> map1 = new HashMap<String, String>();
			RequestMappingInfo info = m.getKey();  
            HandlerMethod method = m.getValue();  
            PatternsRequestCondition p = info.getPatternsCondition();  
            for (String url : p.getPatterns()) {  
            	map1.put("url", url);
            }  
            map1.put("className", method.getMethod().getDeclaringClass().getName()); // 类名  
            map1.put("method", method.getMethod().getName()); // 方法名 
            RequestMethodsRequestCondition methodsCondition = info.getMethodsCondition();
            for (RequestMethod requestMethod : methodsCondition.getMethods()) {
            	map1.put("type", requestMethod.toString());
			}
			
            list.add(map1);
		}		

		Gson gson = new Gson();
		String str = gson.toJson(list);  
 
		return str;
	}
}

在以上程序完成以后,右击该程序,采用Spring Boot App程序运行即可。

5.注意可能存在的问题

1) 如果其他程序文件在SpringBootStarter.java同级,会造成运行不成功;

2)Maven是联合编译工具,但有可能会因为服务器在国外而被GFW墙掉,注意设置本地资源,我的设置为:

<mirrors>
    <mirror>
      <id>mirrorId</id>
      <mirrorOf>repositoryId</mirrorOf>
      <name>Human Readable Name for this Mirror.</name>
      <url>http://my.repository.com/repo/path</url>
    </mirror>

      <mirror>
          <id>alimaven</id>
          <mirrorOf>aliyun maven</mirrorOf>
          <name>http://maven.aliyun.com/nexus/content/groups/public/</name>
          <url>central</url>
    </mirror>
    
    <mirror> 
        <id>uk</id>  
        <mirrorOf>central</mirrorOf>  
        <name>Human Readable Name for this Mirror.</name>  
        <url>http://uk.maven.org/maven2/</url> 
    </mirror>

   <mirror>
        <id>CN</id>
        <name>OSChina Central</name>
        <url>;
        <mirrorOf>central</mirrorOf>
  </mirror>

  <mirror>
        <id>nexus</id>
        <name>internal nexus repository</name>
        <url>http://repo.maven.apache.org/maven2</url>
        <mirrorOf>central</mirrorOf>
  </mirror>

  </mirrors>

 

3)第一写程序的时候,由于MAVEN在联合编译下载JAR包,会造成程序有确实。

4)还可能hui有JAR包确实,这个时候需要添加MAVEN的依赖。

 

附:本程序样例上传到GitHub地址:

https://github.com/diziqian/springBootExample