初入SpringBoot

简介

此项目是针对thymeleaf模板和jsp模板共用的,调试视图解析器进行分辨

maven项目构建

1、进入http://start.spring.id官网进行生成springboot Maven项目

2.把生成的zip文件解压,我项目导入到workspace工作空间

目录结构


pom.xml

<!--核心模块,包括自动配置支持、日志和YAML -->
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter</artifactId>
		</dependency>
		<!-- 测试模块,包括JUnit、Hamcrest、Mockito -->
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-test</artifactId>
			<scope>test</scope>
		</dependency>
		<!--构建Web,包含RESTful风格框架SpringMVC和默认的嵌入式容器Tomcat -->
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-web</artifactId>
		</dependency>
		<!-- 热部署 需要配置spring-boot-devtools 和 spring-boot-maven-plugin -->
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-devtools</artifactId>
			<!-- optional=true,依赖不会传递,该项目依赖devtools;之后依赖myboot项目的项目如果想要使用devtools,需要重新引入 -->
			<optional>true</optional>
		</dependency>
		<!-- 依赖于hibernate jpa写法比如:继承JpaRepository来实现增删改查操作 -->
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-data-jpa</artifactId>
		</dependency>
		<!-- springboot集成mybatis -->
		<dependency>
			<groupId>org.mybatis.spring.boot</groupId>
			<artifactId>mybatis-spring-boot-starter</artifactId>
			<version>1.1.1</version>
		</dependency>
		<!-- mybatis插件,自动生成代码 -->
		<dependency>
			<groupId>org.mybatis.generator</groupId>
			<artifactId>mybatis-generator</artifactId>
			<version>1.3.5</version>
			<type>pom</type>
		</dependency>
		<!-- https://mvnrepository.com/artifact/org.mybatis.generator/mybatis-generator-core -->
		<!-- mybatis核心包 -->
		<dependency>
			<groupId>org.mybatis.generator</groupId>
			<artifactId>mybatis-generator-core</artifactId>
			<version>1.3.5</version>
		</dependency>
		<!-- mysql驱动包 -->
		<dependency>
			<groupId>mysql</groupId>
			<artifactId>mysql-connector-java</artifactId>
		</dependency>
		<!-- Thymeleaf模板 -->
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-thymeleaf</artifactId>
		</dependency>
		<!-- tomcat -->
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-tomcat</artifactId>
			<scope>provided</scope>
		</dependency>
<!-- springBoot默认不支持jsp 导入以下的包start -->
		<!-- 引入servlet依赖. -->
		<dependency>
			<groupId>javax.servlet</groupId>
			<artifactId>javax.servlet-api</artifactId>
		</dependency>
		<!-- 引入servlet-jstl依赖. -->
		<dependency>
			<groupId>javax.servlet</groupId>
			<artifactId>jstl</artifactId>
		</dependency>

		<!--SpringBoot默认不支持JSP,需要在项目中添加相关的依赖 -->
		<dependency>
			<groupId>org.apache.tomcat.embed</groupId>
			<artifactId>tomcat-embed-jasper</artifactId>
		</dependency>

		<dependency>
			<groupId>org.eclipse.jdt.core.compiler</groupId>
			<artifactId>ecj</artifactId>
			<version>4.6.1</version>
		</dependency>
<!-- jsp页面支持 end -->

Application.java

package com.zkrj.springBoot;

import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.boot.web.servlet.support.SpringBootServletInitializer;

@SpringBootApplication
@MapperScan("com.zkrj.springBoot.mapper")
public class Application extends SpringBootServletInitializer {
	
	//使用外部tomcat需要继承SpringBootServletInitializer,并且重写configure方法(不使用可以不写,没影响)
	protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
		return application.sources(Application.class);
	}
        //启动项目直接运行
	public static void main(String[] args) {
		SpringApplication.run(Application.class, args);
	}
}

application.properties

#JDBC
spring.datasource.url=jdbc:mysql://127.0.0.1/springbootv1
spring.datasource.username=root
spring.datasource.password=123456
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
#mybatis yingshe
mybatis.mapper-locations=classpath:mybatis/mapper/*.xml
mybatis.config-location=classpath:mybatis/mybatis-config.xml

以上基本配置就算完了,不比比,直接上基础代码

UserController.java

package com.zkrj.springBoot.controller;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;

import com.zkrj.springBoot.bean.JsonResult;
import com.zkrj.springBoot.bean.User;
import com.zkrj.springBoot.service.UserService;
/*
 * 采用Restful风格
 */
@RestController
@RequestMapping(value="/rest/user")
public class RestUserController {

	@Autowired
	private UserService userService;
	
	/**
	 * 
	 * 开发:冷小风
	 * 开发时间:2018年6月25日
	 * 功能:根据id查询用户
	 * @param id
	 * @return
	 */
	@RequestMapping(value="/getUserById/{id}",method = RequestMethod.GET)
	public ResponseEntity<JsonResult> getUserById(@PathVariable(value="id") Integer id){
		JsonResult result = new JsonResult();
		try {
			User user = userService.getUserById(id);
			result.setResult(user);
			result.setStatus("ok");
		} catch (Exception e) {
			result.setResult(e.getClass().getName());
			result.setStatus("error");
			e.printStackTrace();
		}
		return ResponseEntity.ok(result);
	}
	/**
	 * 
	 * 开发:冷小风
	 * 开发时间:2018年6月25日
	 * 功能:查询用户列表
	 */
	@RequestMapping(value ="/getUserList",method = RequestMethod.GET)
	public ResponseEntity<JsonResult> getUserList(){
		JsonResult r = new JsonResult();
		try {
			List<User> users = userService.getUserList();
			r.setResult(users);
			r.setStatus("ok");
		} catch (Exception e) {
			r.setResult(e.getClass().getName() + ":"+e.getMessage());
			r.setStatus("error");
			e.printStackTrace();
		}
		return ResponseEntity.ok(r);
	}
	
	
}

UserService.java

package com.zkrj.springBoot.service;

import java.util.List;

import com.zkrj.springBoot.bean.User;

public interface UserService {

	User getUserById(Integer id);

	public List<User> getUserList();

}

UserServiceImpl.java

package com.zkrj.springBoot.service.impl;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import com.zkrj.springBoot.bean.User;
import com.zkrj.springBoot.mapper.UserMapper;
import com.zkrj.springBoot.service.UserService;

@Service
public class UserServiceImpl implements UserService{

	@Autowired
	private UserMapper userMapper;

	@Override
	public User getUserById(Integer id) {
		return userMapper.getUserById(id);
	}

	@Override
	public List<User> getUserList() {
		return userMapper.getUserList();
	}

}

UserMapper.java

package com.zkrj.springBoot.mapper;

import java.util.List;

import org.apache.ibatis.annotations.Delete;
import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;
import org.apache.ibatis.annotations.Update;
import org.springframework.stereotype.Repository;

import com.zkrj.springBoot.bean.User;

//@Mapper 这里可以使用@Mapper注解,但是每个mapper都加注解比较麻烦,所以统一配置@MapperScan在扫描路径在application类中
@Repository
public interface UserMapper {

	@Select("SELECT * FROM tb_user WHERE id = #{id}")
	User getUserById(Integer id);

	@Select("SELECT * FROM tb_user")
	public List<User> getUserList();

}

不想使用注解的话采用xml,把这个@Select注解这一行去掉,usermapper.xml的namespace名称指定到这个接口就可以使用,也可以一起使用,一起使用时,方法名不要冲突
<?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.zkrj.springBoot.mapper.UserMapper" >
    <resultMap id="BaseResultMap" type="com.zkrj.springBoot.bean.User" >
        <id column="id" property="id" jdbcType="INTEGER" />
        <result column="username" property="username" jdbcType="VARCHAR" />
        <result column="age" property="age" jdbcType="INTEGER" />
        <result column="ctm" property="ctm" jdbcType="TIMESTAMP"/>
    </resultMap>

    <sql id="Base_Column_List" >
        id, username, age, ctm
    </sql>

    <select id="getUserList" resultMap="BaseResultMap"  >//上面如果这个方法使用注解之后,这里的id名称就不能使用了,不能冲突使用
        SELECT
        <include refid="Base_Column_List" />
        FROM tb_user
    </select>

    <select id="getUserById" parameterType="java.lang.Integer" resultMap="BaseResultMap" >
        SELECT
        <include refid="Base_Column_List" />
        FROM tb_user
        WHERE id = #{id}
    </select>

   
</mapper>


User.java

package com.zkrj.springBoot.bean;

import java.util.Date;

public class User {

	private int id;
	private String username;
	private int age;
	private Date ctm;
	//get  set省略
	
	
}

效果展示


那么重点来了,怎么实现多视图。

实现多视图,需要导入jsp的包和thymeleaf的包,上面的pom.xml已经包含了。

针对不同的视图,区分它的访问路径,视图解析器中有前缀后缀来做区分。

直接上代码,根据我的路径放置时没问题的

WebConfig.java配置视图转发

package com.zkrj.springBoot;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.ViewResolver;
import org.springframework.web.servlet.config.annotation.DefaultServletHandlerConfigurer;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;
import org.springframework.web.servlet.view.InternalResourceViewResolver;
import org.thymeleaf.spring5.SpringTemplateEngine;
import org.thymeleaf.spring5.templateresolver.SpringResourceTemplateResolver;
import org.thymeleaf.spring5.view.ThymeleafViewResolver;
import org.thymeleaf.templateresolver.ITemplateResolver;

@SuppressWarnings("deprecation")
@Configuration//用来定义 DispatcherServlet 应用上下文中的 bean
@EnableWebMvc
public class WebConfig  extends WebMvcConfigurerAdapter {

    @Bean
    public ViewResolver viewResolver() {
        InternalResourceViewResolver resolver = new InternalResourceViewResolver();
        resolver.setPrefix("/WEB-INF/views/");
        resolver.setSuffix(".jsp");
        resolver.setViewNames("jsps/*");
        resolver.setOrder(2);
        return resolver;
    }

    @Bean
    public ITemplateResolver  templateResolver() {
        SpringResourceTemplateResolver templateResolver = new SpringResourceTemplateResolver();
        templateResolver.setTemplateMode("HTML5");
        templateResolver.setPrefix("/WEB-INF/views/");
        templateResolver.setSuffix(".html");
        templateResolver.setCharacterEncoding("utf-8");

        templateResolver.setCacheable(false);
        return templateResolver;
    }


    @Bean
    public SpringTemplateEngine templateEngine() {
        SpringTemplateEngine templateEngine = new SpringTemplateEngine();
        templateEngine.setTemplateResolver(templateResolver());
        // templateEngine
        return templateEngine;
    }


    @Bean
    public ThymeleafViewResolver viewResolverThymeLeaf() {
        ThymeleafViewResolver viewResolver = new ThymeleafViewResolver();
        viewResolver.setTemplateEngine(templateEngine());
        viewResolver.setCharacterEncoding("utf-8");
        viewResolver.setOrder(1);
        viewResolver.setViewNames(new String[]{"thyme/*"});
        return viewResolver;
    }



    @Override
    public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {
        configurer.enable();
    }

    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        super.addResourceHandlers(registry);
    }


}

在来点跳转路径的代码

package com.zkrj.springBoot.controller;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;

import com.zkrj.springBoot.bean.User;
import com.zkrj.springBoot.service.UserService;

@Controller
@RequestMapping(value="/user")
public class UserController {
	@Autowired
	private UserService userService;
	/**
	 * html模板
	 * @return
	 */
	@RequestMapping(value="/page")
	public ModelAndView page(){
		List<User> users = userService.getUserList();
		ModelAndView mv = new ModelAndView();
		mv.addObject("users", users);
		mv.setViewName("templates/html/index");
		return mv;
	}
	
	/**
	 * JSP模板
	 * @return
	 */
	@RequestMapping(value="/page1")
	public ModelAndView page1(){
		List<User> users = userService.getUserList();
		ModelAndView mv = new ModelAndView();
		mv.addObject("users", users);
		mv.setViewName("jsps/userList");
		return mv;
	}
	
}

根据以上的配置就可以实现多视图


猜你喜欢

转载自blog.csdn.net/qq_35123802/article/details/80813598