Spring boot和Mybatis整合+Mysql+jsp页面跳转问题(借助FreeMarker)

这篇博客介绍了如何在Spring Boot项目中整合Mybatis、Mysql,展示如何使用FreeMarker和JSP进行页面跳转。通过创建Maven项目,配置pom.xml,编写实体类、Mapper接口、Controller和启动类,实现了数据查询和返回Json。此外,还探讨了Spring Boot中结合FreeMarker和JSP的注意事项,包括FreeMarker模板的创建、视图解析路径的设置以及Spring Boot对JSP的支持情况。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本篇文章,介绍springboot+mybatis+mysql+freemarker+jsp应用的一个小demo,主要是整合mybatis部分。

笔者刚研究springboot,刚刚跑通的例子,出来分享一下,直接上代码:

第一,建一个Maven项目。(不会Maven的自学)

结构图如下:

下面看pom.xml配置:

 

<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.zhang.demo</groupId>
  <artifactId>springbootSample</artifactId>
  <packaging>war</packaging>
  <version>0.0.1-SNAPSHOT</version>
  <parent>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-parent</artifactId>
	<version>1.2.3.RELEASE</version>
  </parent>
    <dependencies> 
    <!-- freemarker jar包导入 --> 
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-freemarker</artifactId>
    </dependency>
     <!-- 我这里用到gson,也可用jakson 等json转换工具jar-->
    <dependency>
        <groupId>com.google.code.gson</groupId>
        <artifactId>gson</artifactId>
        <version>2.8.0</version>
    </dependency>
    <dependency>  
        <groupId>org.springframework.boot</groupId>  
        <artifactId>spring-boot-starter-web</artifactId>  
    </dependency>    
    <dependency>
	<groupId>mysql</groupId>
	<artifactId>mysql-connector-java</artifactId>
	<version>5.1.21</version>
     </dependency>
     <dependency>
	<groupId>org.mybatis.spring.boot</groupId>
	<artifactId>mybatis-spring-boot-starter</artifactId>
	<version>1.1.1</version>
	</dependency>
     <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter</artifactId>
	</dependency>     
</dependencies>  
  
<!-- Package as an executable JAR -->  
<build>  
    <plugins>  
        <plugin>  
            <groupId>org.springframework.boot</groupId>  
            <artifactId>spring-boot-maven-plugin</artifactId>  
        </plugin> 
        <plugin> 
	    <groupId>org.apache.maven.plugins</groupId>
	    <artifactId>maven-surefire-plugin</artifactId>
		 <configuration>
		    <skip>true</skip>
		 </configuration>
	</plugin>        
    </plugins>  
</build>  
 <!-- Allow access to Spring milestones and snapshots -->  
<!-- (you don't need this if you are using anything after 0.5.0.RELEASE) -->  
<repositories>  
    <repository>  
        <id>spring-snapshots</id>  
        <url>http://repo.spring.io/snapshot</url>  
        <snapshots><enabled>true</enabled></snapshots>  
    </repository>  
    <repository>  
        <id>spring-milestones</id>  
        <url>http://repo.spring.io/milestone</url>  
        <snapshots><enabled>true</enabled></snapshots>  
    </repository>  
</repositories>  
<pluginRepositories>  
    <pluginRepository>  
        <id>spring-snapshots</id>  
        <url>http://repo.spring.io/snapshot</url>  
    </pluginRepository>  
    <pluginRepository>  
        <id>spring-milestones</id>  
        <url>http://repo.spring.io/milestone</url>  
    </pluginRepository>  
</pluginRepositories>
</project>

 

 

 

第二、我们以City表为例,做一个查询操作。

1、下面是City实体类部分代码,对应数据库中的表自己创建。

 

 
/**
 * @author zcloudfly(qq:920869693)
 */
public class City implements Serializable {
	private Long id;
	private String name;
	private String state;
	private String country;
	//下面get/set/tostring方法自己实现
}

2、下面是Dao层接口CityMapper的书写,注意:CityMapper和CityMapper.xml名字要一致,springboot会自动识别。

 

package sample.mybatis.mapper;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;
import sample.mybatis.domain.City;
@Mapper
public interface CityMapper {
	City findByState(@Param("state") String state);//根据state字段查询City
}

CityMapper.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="sample.mybatis.mapper.CityMapper">
    <select id="findByState" resultType="City">
        select * from city where state = #{state}
    </select>
</mapper>

mybatis-config.xml:为domain包下的实体类起别名,之后注册mapper

 

 

<?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>
    <typeAliases>
        <package name="sample.mybatis.domain"/>
    </typeAliases>
   <mappers>
        <mapper resource="sample/mybatis/mapper/CityMapper.xml"/>
        <mapper resource="sample/mybatis/mapper/UserMapper.xml"/>
    </mappers>      
</configuration>

3、下面进行application.properties文件配置,里面会把数据源和mybatis-config.xml配置好:

 

 

spring.datasource.url=jdbc:mysql://localhost:3306/test
spring.datasource.username=root
spring.datasource.password=
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
mybatis.config-location=classpath:mybatis-config.xml

4、CityController类编写:

 

 

package sample.mybatis.controller;
import java.util.HashMap;
import java.util.Map;
import javax.servlet.http.HttpSession;
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.servlet.ModelAndView;
import sample.mybatis.domain.City;
import sample.mybatis.mapper.CityMapper;
import com.google.gson.Gson;

@RestController  //相当于Responsebody和Controller
@RequestMapping("/controller")
public class CityController {
	@Autowired
	private CityMapper cityMapper;	
	@RequestMapping("/city")
	public String view(){
		City city = cityMapper.findByState("CC");
		System.out.println(city+"=====控制台测试======");
		Gson gson=new Gson();
		String cityJson = gson.toJson(city);//把city转成json格式字符串
		return cityJson;
	}

5.Application.java启动类编写,这个类的位置要放到其他类的上一层包中,它启动时会自外而内的加载其他类。

 

 

package sample.mybatis;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
@Configuration  
@ComponentScan
@EnableAutoConfiguration
//@SpringBootApplication(相当于以上三个注解的集合,我这里没有导入相关依赖,所以没用)
public class Application {	
	public static void main(String[] args) {
		SpringApplication.run(Application.class,args);
	}	
}

我的这个程序中省略了Service层,实际开发中加上就好。

 

好了,下面我们启动Application.java类的main方法,进行测试吧。启动后控制台出现:

  .   ____          _            __ _ _
 /\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
 \\/  ___)| |_)| | | | | || (_| |  ) ) ) )
  '  |____| .__|_| |_|_| |_\__, | / / / /
 =========|_|==============|___/=/_/_/_/
 :: Spring Boot ::        (v1.2.3.RELEASE)

在浏览器输入:http://localhost:8080/controller/city会把查出来的city对象的json窜返回到浏览器,如下:

 

{"id":2,"name":"beijing","state":"CC","country":"china"}

理解:Springboot内嵌的Tomcat默认端口8080

 

 

下面说说结合Freemaker的页面跳转:

pom.xml中已经引入相关jar,springboot会自动识别,

@RestController默认就会在每个方法上加上@Responsebody,方法返回值会直接被httpmessageconverter转化,

如果想直接返回视图,需要直接指定modelAndView。

我们在CityControler中在写个方法如下:

 

@RequestMapping("/view")
	public ModelAndView view2(){
		ModelAndView mv=new ModelAndView("index");
		return mv;		
	}

新建FreeMarker模板index.ftl(在resources里新建templates文件夹放模板,系统自动找到):

 

 

<!DOCTYPE html>
<html>
 <head>
  <meta charset="utf-8">
  <title>标题</title>
 </head>
 <body>
    我是跳转页面;
 </body>
</html>

之后启动程序,访问http://localhost:8080/controller/view  就会看到结果。

 

下面说说jsp页面直接跳转的配置。
注意:springboot实际不建议整合jsp,官方不不推荐使用。但实际我们也可以做,首先在pom.xml中注释掉freeMarker依赖jar。
1、在项目中建立src/main/webapp/WEB-INF/pages/index.jsp的结构(在jsp中随便写点东西)
在application.properties中加上前后缀(分新旧版本):

springboot老版本:

spring.view.prefix:/WEB-INF/pages/        

spring.view.suffix:.jsp

 

springboot新版本:

spring.mvc.view.prefix:/WEB-INF/pages/        

spring.mvc.view.suffix:.jsp

 

 

2、然后在controller里加个方法直接返回视图,

 

 

 

   @RequestMapping("/test")
    public ModelAndView test() {
        return new ModelAndView("index");
    }
}

之后启动程序,在浏览器输入http://localhost:8080/controller/test。页面会显示错误,或者读到的是未解析的jsp代码。

 

原因:

此处引用http://blog.youkuaiyun.com/yingxiake/article/details/51288727博客中的话
注意:jsp只能是打成war包在非嵌套的tomcat容器才能看到效果,直接在嵌套的tomcat容器是看不到效果的,
因为不支持,例如在IDE直接右键run main函数或者打成可执行的jar包都不行。
例外,如果出现freemarker模版引擎和jsp技术同时存在的话,springmvc会根据解析器的优先级来返回具
体的视图,默认,FreeMarkerViewResolver的优先级大于InternalResourceViewResolver的优先级,所以
同时存在的话,会返回freemarker视图。


 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值