二阶段--SSM整合练习

目录

一、SSM整合

系统架构图

 项目结构

1、需求

2、数据库准备表,添加数据

3、创建前端页面

4、IDEA中新建Moudle,pom.xml文件导入mybatis和mysql包

5、创建启动类RunApp

6、创建配置文件

 7、创建Car类,进行封装数据

8、创建CarDao接口

9、创建CarMapper.xml映射文件

10、创建CarService 接口

11、创建业务层CarServiceImpl实现类

12、创建控制层CarController类

13、修改启动类,添加持久层接口的包扫描

14、测试

15、流程结构思路分析

二、练习SSM新增业务操作

1,修改CarDao接口

2、修改CarMapper.xml

3、修改CarService接口

4、修改CarServiceImpl实现类

5、修改CarController

6、测试


一、SSM整合

系统架构图

在这里插入图片描述

 项目结构

在这里插入图片描述

1、需求

访问:http://localhost:8080/car/get
返回:{"name":"BMW","color":"red","price":9.9}

2、数据库准备表,添加数据

CREATE TABLE car (
  id int(11) NOT NULL auto_increment,
  name varchar(10) default NULL,
  color varchar(10) default NULL,
  price double default NULL,
  PRIMARY KEY  (id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;


insert into car values(1,"Bmw","red",9.9),(2,"Auto","green",0.5)

3、创建前端页面

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title>测试 框架整合</title>
	</head>
	<body>
		<a href="http://localhost:8080/car/get">点我提交请求</a>
	</body>
</html>

4、IDEA中新建Moudle,pom.xml文件导入mybatis和mysql包

<?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">
    <parent>
        <artifactId>cgb2105boot01</artifactId>
        <groupId>cn.tedu</groupId>
        <version>0.0.1-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>day1802</artifactId>

<dependencies>
    <!--导入mybatis包-->
    <dependency>
        <groupId>org.mybatis.spring.boot</groupId>
        <artifactId>mybatis-spring-boot-starter</artifactId>
        <version>2.1.4</version>
    </dependency>
    <!--导入mysql包-->
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>5.1.48</version>
        <scope>runtime</scope>
    </dependency>
    <dependency>
        <groupId>org.projectlombok</groupId>
        <artifactId>lombok</artifactId>
    </dependency>
</dependencies>
</project>

5、创建启动类RunApp

package cn.tedu;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class RunApp {
    public static void main(String[] args) {
        SpringApplication.run(RunApp.class);
    }
}

6、创建配置文件application.yml

为什么使用yml配置文件?

YAML易于人们阅读。
YAML数据在编程语言之间是可移植的。
YAML匹配敏捷语言的本机数据结构。
YAML具有一致的模型来支持通用工具。
YAML支持单程处理。
YAML具有表现力和可扩展性。
YAML易于实现和使用。

k: (空格)v 的格式

注意点:

url中数据库的名字要改

drivaer驱动版本要注意加或不加cj

修改端口号也在配置文件中,

server:
  port: 8090
#SpringBoot配置mysql信息
spring:
  datasource:
    driver-class-name: com.mysql.jdbc.Driver
    url: jdbc:mysql:///mybatisdb?useUnicode=true&characterEncoding=utf8&useSSL=false
    username: root
    password: root
#SpringBoot整合Mybatis配置
mybatis:
  #指定UserMapper.xml文件的位置 *号代表resources下的文件都可以扫描到
  mapper-locations: classpath:*.xml
  #开启驼峰映射
  configuration:
    map-underscore-to-camel-case: true

 7、创建Car类,进行封装数据

使用Lombok插件,也可以generater提供set、get、toString()以及无参构造和全参构造

@Component提供spring的ioc功能创建对象

package cn.tedu.pojo;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.Accessors;
import org.springframework.stereotype.Component;

@Data
@NoArgsConstructor
@AllArgsConstructor
@Accessors(chain = true)

@Component//提供spring的ioc功能,将类的对象交给spring容器管理
public class Car {
    private Integer id;
    private String name;
    private String color;
    private Double price;
}

8、创建CarDao接口

package cn.tedu.dao;
import cn.tedu.pojo.Car;
import java.util.List;

@Component
public interface CarDao {
    List<Car> get();//获取所有数据
}

与映射文件联系在一起:

  1. 映射文件的namespace值是持久层接口的全路径,对应的是持久层接口的类名
  2. 映射文件中SQL标签的id值对应的是持久层接口的抽象方法名
  3.  resultType是接口中方法的返回值类型

业务层实现类和持久层接口建立自动装配时,业务层实现类会出现红色波浪线:

  1. 解决方案一:在持久层接口添加@Component注解
  2. 解决方案二:setting,editor,inspections,spring,springcore,code下取消勾选autowiring forbeans class

9、创建CarMapper.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">

<!--namespace的值是CarDao接口的全路径-->
<mapper namespace="cn.tedu.dao.CarDao">
    <!--id的值是接口中的方法名   resultType是接口中方法的返回值类型-->
   <select id="get" resultType="cn.tedu.pojo.Car">
        select * from car
   </select>
</mapper>

10、创建CarService 接口

业务层的抽象方法和持久层的抽象方法一样

package cn.tedu.service;

import cn.tedu.pojo.Car;
import java.util.List;

public interface CarService {
    List<Car> get();//获取所有数据
}

11、创建业务层CarServiceImpl实现类

package cn.tedu.service;

import cn.tedu.dao.CarDao;
import cn.tedu.pojo.Car;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.stereotype.Service;

import java.util.List;
@Service//ioc
public class CarServiceImpl implements  CarService{
    @Autowired//di,绑定业务层和持久层接口
    private CarDao dao;//会出现红线,在cardao接口加注解@Component

    //获取所有数据
    @Override
    public List<Car> get() {
        return dao.get();
    }
}

12、创建控制层CarController类

package cn.tedu.controller;

import cn.tedu.pojo.Car;
import cn.tedu.service.CarService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.List;

@RestController
@RequestMapping("car")
public class CarController {

    @Autowired //di,绑定控制层和业务层接口
    private CarService carService;

    @RequestMapping("get")
    public List<Car> get() {
        //直接使用了service的功能
        return carService.get() ;
    }
}

13、修改启动类,添加持久层接口的包扫描

@MapperScan("cn.tedu.dao")

package cn.tedu;

import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
@MapperScan("cn.tedu.dao")//扫描dao接口所在的包
public class RunApp {
    public static void main(String[] args) {
        SpringApplication.run(RunApp.class);
    }
}

14、测试

重启服务器,点击前端页面提交请求数据

在这里插入图片描述

 在这里插入图片描述

15、流程结构思路分析

 在这里插入图片描述

二、练习car类新增业务操作

1,修改CarDao接口

package cn.tedu.dao;
import cn.tedu.pojo.Car;
import org.springframework.stereotype.Component;
import java.util.List;

@Component
public interface CarDao {
    List<Car> get();//获取所有数据
    void add(Car c);//添加方法
}

2、修改CarMapper.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">

<!--namespace的值是CarDao接口的全路径-->
<mapper namespace="cn.tedu.dao.CarDao">
    <!--id的值是接口中的方法名   resultType是接口中方法的返回值类型-->
   <select id="get" resultType="cn.tedu.pojo.Car">
        select * from car
   </select>

    <insert id="add">
        insert into car values(null,#{name},#{color},#{price})
    </insert>

</mapper>

3、修改CarService接口

package cn.tedu.service;

import cn.tedu.pojo.Car;
import java.util.List;

public interface CarService {
    List<Car> get();//获取所有数据

    void add(Car c);//添加方法
}

4、修改CarServiceImpl实现类

package cn.tedu.service;

import cn.tedu.dao.CarDao;
import cn.tedu.pojo.Car;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.stereotype.Service;

import java.util.List;
@Service//ioc
public class CarServiceImpl implements  CarService{
    @Autowired//di
    private CarDao dao;
   
    @Override //新增业务
    public void add(Car c) {
        dao.add(c);
    }
    //获取所有数据
    @Override
    public List<Car> get() {
        return dao.get();
    }
}

5、修改CarController

package cn.tedu.controller;

import cn.tedu.pojo.Car;
import cn.tedu.service.CarService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.List;

@RestController
@RequestMapping("car")
public class CarController {

    @Autowired //di
    private CarService carService;

    //新增业务
    //http:localhost:8080/car/add?id=10&name=BMW&color=gray&price=10
    @RequestMapping("add")
    public void add(Car c) {
        System.out.println(c);
        //直接使用了service的功能
        carService.add(c);
    }

    @RequestMapping("get")
    public List<Car> get() {
        //直接使用了service的功能
        return carService.get() ;
    }
}

6、测试

在这里插入图片描述

 在这里插入图片描述

在这里插入图片描述

三、练习dept业务操作

1、前端业务获取用户动态设置属性

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title>测试SSM的整合</title>
		<style>
		</style>
	</head>
	<body>
		<form action="http://localhost:8080/dept/get" method="get">
		<table>
			<tr><td><h3>根据部门名称查信息</h3></td></tr>
			<tr><td>
			<select name="name">
				<option>呵呵</option>
				<option>哈哈哈哈</option>
				<option>operations</option>
				<option>java教研部</option>
				<option>开发</option>
				<option>java考试部</option>
				<option>java前端开发</option>
				<option>java大数据</option>
			</select>
			</td></tr>
			<tr><td><input type="submit" value="查看" /></td></tr><br />
				
		</table>
		</form>
		
		<form action="http://localhost:8080/dept/getid" method="get">
			<table>
                 <tr><td><h3>点我通过多个id获取部门信息</h3></td></tr>
				<tr>
					<td>
						<input type="checkbox" name="id" value="1">1
						<input type="checkbox" name="id" value="2">2
						<input type="checkbox" name="id" value="3">3
						<input type="checkbox" name="id" value="5">5
						<input type="checkbox" name="id" value="11">11
					</td>
				</tr>
				<tr><td><input type="submit" value="查看" /></td></tr><br />
			</table>
		</form>
	</body>
</html>

2、修改DeptMapper.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="cn.tedu.dao.DeptDao">
    <!--提取sql片段,include使用片段-->
    <sql id="names">
        id,dname,loc
    </sql>
    <!--动态部门名称获取部门信息-->
    <select id="getbyname" resultType="cn.tedu.pojo.Dept">
        select * from dept where dname=#{dname}
    </select>
     <!--动态获取多个id值的部门信息-->
    <select id="getbyid" resultType="cn.tedu.pojo.Dept">
        select
        <include refid="names"></include>
        from dept
        where id in(
        //数组形式遍历
        <foreach collection="array" item="i" separator=",">
            #{i}
        </foreach>
        )
    </select>
    
</mapper>

3、修改DeptDao接口

package cn.tedu.dao;

import cn.tedu.pojo.Dept;
import org.springframework.stereotype.Component;

import java.util.List;
@Component
public interface DeptDao {
    List<Dept> getbyname(String name);
    List<Dept> getbyid(int[] id);//多个值使用数组
    List<Dept> getbyloc(String[] loc);
    void insert(Dept dept);//添加业务,增删改都可以

}

4、修改DeptService接口

package cn.tedu.service;

import cn.tedu.pojo.Dept;

import java.util.List;

public interface DeptService {
    List<Dept> getbyname(String name);
    List<Dept> getbyid(int[] id);
    List<Dept> getbyloc(String[] loc);
    void insert(Dept dept);//添加业务
}

5、业务层接口实现类

package cn.tedu.service;

import cn.tedu.dao.DeptDao;
import cn.tedu.pojo.Dept;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;
@Service
public class DeptServiceImpl implements DeptService {
    @Autowired
    private DeptDao d;
    @Override
    public List<Dept> getbyname(String name) {
        return d.getbyname(name);
    }

    @Override
    //int[] array={1,2,3,5,11};
    public List<Dept> getbyid(int[] id) {
        return d.getbyid(id);
    }

    @Override
    public List<Dept> getbyloc(String[] loc) {
        return d.getbyloc(loc);
    }

    @Override
    public void insert(Dept dept) {
        System.out.println("提交成功");
    }
}

6、控制层

package cn.tedu.controller;

import cn.tedu.pojo.Dept;
import cn.tedu.service.DeptService;
import cn.tedu.service.DeptServiceImpl;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.List;

@RestController
@RequestMapping("dept")
public class DeptController {
    @Autowired
    private DeptService ds;
    @RequestMapping("get")
    public List<Dept> get(String name){
        System.out.println(ds.getbyname(name));
        return ds.getbyname(name);
    }
    @RequestMapping("getid")
    public List<Dept>get(int[] id){
        return ds.getbyid(id);
    }
    @RequestMapping("getname")
    public  List<Dept>get(String[] loc){
        return ds.getbyloc(loc);
    }
}

7、重启服务器,根据前端页面请求的数据进行操作

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值