初入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;
	}
	
}

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


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
SpringBoot是一个用于简化Spring应用程序开发的框架。它通过提供默认的配置和实现,使得开发人员可以更加专注于业务逻辑的实现,而不需要手动配置和编写大量的样板代码。 在初次体验SpringBoot时,首先需要修改启动类,让它继承SpringBootServletInitializer,并添加@SpringBootApplication和@EnableScheduling注解。然后,执行clean和package命令,将应用打包并启动Tomcat。最后,访问相应的请求路径,就可以看到期望的页面了。 以下是一个示例的启动类: ``` @SpringBootApplication @EnableScheduling public class App { public static void main(String[] args) { System.out.println("Hello World!"); SpringApplication.run(App.class, args); } } ``` 这个启动类中,我们使用了@SpringBootApplication注解来标识这是一个SpringBoot应用程序,并使用@EnableScheduling注解来启用定时任务的支持。然后,在main方法中,我们通过调用SpringApplication的run方法来启动应用程序。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [SpringBoot初体验(完整版)](https://blog.csdn.net/yuxiao97/article/details/78759473)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *3* [SpringBoot初体验](https://blog.csdn.net/s13554341560b/article/details/78126194)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值