1、创建一个基于Springboot的项目(简单页面显示不同数据)
项目结构:
pon.xml:
<?xml version="1.0" encoding="UTF-8"?>
<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.example</groupId>
<artifactId>ssmspringboot_test</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<name>ssmspringboot_test</name>
<description>Demo project for Spring Boot</description>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.8.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<!-- 用于注解 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
SsmspringbootTestApplication项目入口:
package com.example.demo;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
/**
* 项目入口(直接启动项目即可)
* @author xswl_ym
*/
@SpringBootApplication
public class SsmspringbootTestApplication {
public static void main(String[] args) {
SpringApplication.run(SsmspringbootTestApplication.class, args);
}
}
Student实体类:
package com.example.entity;
import java.io.Serializable;
/**
* 测试实体类
* @author xswl_ym
*
*/
public class Student implements Serializable{
private int id;
private String name;
private int age;
public Student() {
super();
}
public Student(int id, String name, int age) {
super();
this.id = id;
this.name = name;
this.age = age;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
HelloWord.java测试层:
package com.example.controller;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import com.example.entity.Student;
/**
1. 测试控制层
2. @author xswl_ym
*/
@RestController //相当于@Controller和@RequestBody 返回json
@EnableAutoConfiguration
public class HelloWord {
@RequestMapping("/hello")
public String showHello(){
return "HelloWord!";
}
@RequestMapping("/entity")
public Student showStudent(){
Student student = new Student(1, "showtime", 22);
return student;
}
@RequestMapping("/map")
public Map<String, Object> showMap(){
Map<String, Object> map = new HashMap<String,Object>();
map.put("username", "张无忌");
map.put("age", 15);
return map;
}
@RequestMapping("/list")
public List<Student> showList(){
List<Student> list = new ArrayList<Student>();
Student student01 = new Student(1, "showtime", 22);
Student student02 = new Student(2, "showtime", 33);
list.add(student01);
list.add(student02);
return list;
}
}
项目启动:在”SsmspringbootTestApplication”中右键”Run As”,选择”SpringBoot App”即可。
访问路径:http://localhost:8080//map或者http://localhost:8080//list;
2、基于上面的项目对springmvc+mybatis进行整合,实现数据交互
项目结构:
pom.xml:
<?xml version="1.0" encoding="UTF-8"?>
<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.example</groupId>
<artifactId>springboot_ssm</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<name>springboot_ssm</name>
<description>Demo project for Spring Boot</description>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.8.RELEASE</version>
<relativePath /> <!-- lookup parent from repository -->
</parent>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-cache</artifactId>
</dependency>
<!--整合mybatis所需的jar -->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>1.3.1</version>
</dependency>
<!-- 用于注解开发 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!--热启动:每自修改后, 程序自动启动spring Application上下文。 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<optional>true</optional>
</dependency>
<!-- 阿里jeon -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.9</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<fork>true</fork>
</configuration>
</plugin>
</plugins>
</build>
</project>
SsmspringbootTestApplication项目入口:
package com.example.demo;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import com.example.controller.ProductController;
/**
* 项目入口(直接启动项目即可)
* @author xswl_ym
*/
@SpringBootApplication
public class SsmspringbootTestApplication {
public static void main(String[] args) {
SpringApplication.run(ProductController.class, args);
}
}
Product产品实体类 :
package com.example.entity;
/**
* 产品实体类
* @author xswl_ym
*/
public class Product {
private int id;
private String name;
private int count;
private double price;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getCount() {
return count;
}
public void setCount(int count) {
this.count = count;
}
public double getPrice() {
return price;
}
public void setPrice(double price) {
this.price = price;
}
public Product() {
super();
}
public Product(int id, String name, int count, double price) {
super();
this.id = id;
this.name = name;
this.count = count;
this.price = price;
}
}
ProductController产品控制层:
package com.example.controller;
import java.util.List;
import javax.servlet.http.HttpServletResponse;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.context.annotation.ComponentScan;
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 com.alibaba.fastjson.JSON;
import com.example.entity.Product;
import com.example.service.ProductService;
/**
* 产品控制层
* @author xswl_ym
*/
@RestController //证明是controller层并且返回json
@EnableAutoConfiguration
@ComponentScan(basePackages={"com.example.service"})//添加的注解
public class ProductController {
//依赖注入
@Autowired
ProductService productService;
/**
* @RestController代表这个类是用Restful风格来访问的,如果是普通的WEB页面访问跳转时,
* 我们通常会使用@Controllervalue = "/users/{username}" 代表访问的URL是"http://host:PORT/users/实际的用户名"
* method = RequestMethod.GET 代表这个HTTP请求必须是以GET方式访问
* @PathVariable将某个动态参数放到URL请求路径中
* @RequestParam指定了请求参数名称
*/
@RequestMapping(value = "qp/{name}",method = RequestMethod.GET)
public List<Product> queryProduct(@PathVariable String name,HttpServletResponse httpServletResponse) {
System.out.println(name);
List<Product> p = productService.queryProductByName(name);
String json="";
try {
json= JSON.toJSONString(p);
//httpServletResponse.getWriter().println(json);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return p;
}
}
ProductService业务层接口:
package com.example.service;
import java.util.List;
import com.example.entity.Product;
/**
* 产品业务层接口
* @author xswl_ym
*/
public interface ProductService {
public List<Product> queryProductByName(String name);
}
ProductServiceImpl业务层实现类:
package com.example.service;
import java.util.List;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.example.dao.ProductMapper;
import com.example.entity.Product;
/**
* 产品业务层实现类
* @author xswl_ym
*/
@Service
@MapperScan("com.example.dao") //与dao层的@Mapper二选一写上即可(主要作用是扫包)
public class ProductServiceImpl implements ProductService {
//依赖注入
@Autowired
ProductMapper mapper;
@Override
public List<Product> queryProductByName(String name) {
List<Product> pro = mapper.selectProductByName(name);
return pro;
}
}
ProductMapper数据层接口:
package com.example.dao;
import java.util.List;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.ResultType;
import org.apache.ibatis.annotations.Select;
import org.springframework.stereotype.Repository;
import com.example.entity.Product;
/**
* 产品数据层接口
* @author xswl_ym
*/
@Mapper
@Repository
public interface ProductMapper {
/**
* 根据名称查询产品
* @param name 名称
* @return 返回产品实体对象
*/
//@Select(" SELECT * FROM product WHERE name = #{name}")
@ResultType(Product.class)
List<Product> selectProductByName(@Param("name") String name);
}
ProductMapper.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.example.dao.ProductMapper" >
<select id="selectProductByName" resultType="com.example.entity.Product">
SELECT * FROM product WHERE name = #{name}
</select>
</mapper>
application.properties文件配置:
#mysql
spring.datasource.url=jdbc:mysql://localhost:3306/test
spring.datasource.username=root
spring.datasource.password=123456
spring.datasource.driverClassName=com.mysql.jdbc.Driver
spring.jpa.database = mysql
#tomcat
server.port=8080
#Mybatis扫描(配置xml模式使用,决定是否使用映射文件)
mybatis.mapper-locations=classpath*:mapper/*.xml
#起别名。可省略写mybatis的xml中的resultType的全路径
mybatis.type-aliases-package=com.example.pojo
注意:数据层有两种处理方法:分别是使用映射文件和注解开发;
映射文件:在application.properties中配置扫描”mybatis.mapper-locations=classpath*:mapper/*.xml”;
注解开发:将application.properties的扫描删掉,直接在数据层接口中用注解写,如:@Select、@Insert;
restful.html前台页面:
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<script type="text/javascript" src="js/jquery.min.js"></script>
<script type="text/javascript">
//查询的内容
function quary(){
var str = $("#name").val();
$.ajax({
url:"qp/"+str,
type:"get",
success : function(data) {
//i循环的次数 value对象 id,name等是属性 <接收list>
$.each(data, function(i, value) {
$("#remark").append(
" <tr><td>" + value.id + "</td><td>"
+ value.name + "</td><td>" + value.count
+ "</td><td>" + value.count + "</td></tr>");
});
},
error:function(){
alert("没有查询到该商品");
}
});
}
</script>
</head>
<body>
<form action=""><!-- 在text文本中加入onchange="quary()"属性为按tab后查找,而onkeydown="EnterPress()"为回车键事件 -->
查询:<input type="text" id="name"/><input type="button" value="查询" onclick="quary();"/>
<table class="table table-striped" id="remark">
<tr>
<td>编号</td>
<td>名称</td>
<td>总数</td>
<td>价格</td>
</tr>
</table>
</form>
</body>
</html>
数据库生成代码:
-- 创建数据库
create database `test`;
use `test`;
-- 建表
CREATE TABLE `product` (
`Id` int NOT NULL PRIMARY key auto_increment,
`name` varchar(20) NULL ,
`count` int(11) NULL ,
`price` double(10,0) NULL
);
INSERT into product(name,count,price) values('张三',20,11);
INSERT into product(name,count,price) values('李四',15,22);
INSERT into product(name,count,price) values('王五',16,33);
INSERT into product(name,count,price) values('麻子',17,44);
INSERT into product(name,count,price) values('遛鸟',18,55);
项目启动:在”SsmspringbootTestApplication”中右键”Run As”,选择”SpringBoot App”即可。
访问路径:”http://localhost:8080/qp/张三(name属性)”直接访问数据库数据
或”http://localhost:8080/restful.html“在页面中查询。
3、如何从Springboot跳转到jsp页面:
在pom.xml文件中继续设置依赖项:
<!-- springboot开发jsp需要的jar包 S -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-cache</artifactId>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
</dependency>
<dependency>
<groupId>org.apache.tomcat.embed</groupId>
<artifactId>tomcat-embed-jasper</artifactId>
<scope>provided</scope>
</dependency>
<!-- springboot开发jsp需要的jar包 E -->
application.properties文件中配置:
# 配置jsp文件的位置,默认位置为:src/main/webapp
spring.mvc.view.prefix: /WEB-INF/jsp/
spring.mvc.view.suffix: .jsp
Controller控制层文件中配置:
@RequestMapping("/mvjsp")
public ModelAndView mvjsp() {
ModelAndView mv=new ModelAndView("/show1");
return mv;
}
最后启动项目并访问路径:”https://localhost:8080/mvjsp“;
注意:如果出现jar报路径错误直接打开对应路径,删除ecj文件夹,然后重新加载pom.xml。
(可能要加载多次)