SSM框架的简单构建

运用springboot +spring+springMVC+Mybatis 构建一个简单的web app 接口

spring特性IOC(inversion of content 控制反转)通过对代码的依赖注入,实体对象类自动new,降低代码间的耦合度(结合度),增大代码活性

AOP特性(aspect orient programming 面向切面编程)具象的解释就是,把代码想象成一个实体球,用刀切一刀,往切口注入碎片代码,这样增大代码的复用性

SpringMVC是小型MVC框架,也可以用structs代替,但是structs的对应的页面对象会非常的繁重

Mybatis 数据库的映射,封装了比较完善的数据库日志,事务代码,可以将注意力集中到增加sql语句的效率上

安装环境:java 1.8+  maven eclipse 

框架目录结构

将项目依赖包通过pom.xml加进来
 1             <?xml version="1.0" encoding="UTF-8"?>
 2 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 3     xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
 4     <modelVersion>4.0.0</modelVersion>
 5             <groupId>com.shiyanlou</groupId>
 6     <artifactId>springboot</artifactId>
 7     <version>0.0.1-SNAPSHOT</version>
 8     <packaging>jar</packaging>
 9             <name>springboot</name>
10     <description>Demo project for Spring Boot</description>
11             <!--设置父模块 这样就可以继承父模块中的配置信息-->
12     <parent>
13         <groupId>org.springframework.boot</groupId>
14         <artifactId>spring-boot-starter-parent</artifactId>
15         <version>2.0.4.RELEASE</version>
16         <relativePath/>
17     </parent>
18             <properties>
19         <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
20         <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
21         <java.version>1.8</java.version>
22     </properties>
23             <dependencies>
24     <!--添加web依赖-->
25         <dependency>
26             <groupId>org.springframework.boot</groupId>
27             <artifactId>spring-boot-starter-web</artifactId>
28         </dependency>
29         <dependency>
30             <groupId>org.mybatis.spring.boot</groupId>
31             <artifactId>mybatis-spring-boot-starter</artifactId>
32             <version>1.3.2</version>
33         </dependency>
34         <dependency>
35             <groupId>mysql</groupId>
36             <artifactId>mysql-connector-java</artifactId>
37         </dependency>
38     </dependencies>
39             <build>
40         <plugins>
41         <!--spirng Boot maven插件-->
42             <plugin>
43                 <groupId>org.springframework.boot</groupId>
44                 <artifactId>spring-boot-maven-plugin</artifactId>
45             </plugin>
46         </plugins>
47     </build>
48             </project>
View Code

在entity底下新建类文件,user.java

 1             package com.shiyanlou.springboot.entity; 
 2             import java.io.Serializable; 
 3             public class User implements Serializable { 
 4             private Integer id; 
 5             private String username; 
 6             private String password; 
 7             public Integer getId() { 
 8                 return id; 
 9             } 
10             public void setId(Integer id) { 
11                 this.id = id; 
12             }
13              public String getUsername() { 
14                 return username;
15              }
16              public void setUsername(String username) { 
17                 this.username = username;
18              }
19              public String getPassword() {
20                  return password; 
21             }
22              public void setPassword(String password) {
23                  this.password = password; 
24             }
25              @Override 
26             public String toString() { 
27                 return "User{" + "id=" + id + ", username='" + username + '\'' + ", password='" + password + '\'' + '}'; 
28                 }
29              } 
View Code

dao层,新建一个basemapper.java 用于被继承

 1             package com.shiyanlou.springboot.dao;
 2             import java.util.List;
 3             public interface BaseMapper<T> {
 4     /**
 5      * 保存
 6      */
 7     Integer save(T t);
 8             /**
 9      * 删除
10      */
11     void delete(Integer id);
12             /**
13      * 通过id查询
14      */
15     T findById(Integer id);
16             /**
17      * 更新
18      */
19     void update(T t);
20             /**
21      * 返回所有信息
22      */
23     List<T> list();
24 }
View Code

同dao层,建立一个usermapper.java 继承basemapper.java

扫描二维码关注公众号,回复: 5290162 查看本文章
1             package com.shiyanlou.springboot.dao;
2             import com.shiyanlou.springboot.entity.User;
3             public interface UserMapper extends BaseMapper<User> {
4 }
View Code

在resource文件中建立映射文件夹(mapper),在mapper中建立user实体的映射文件usermapper.xml,sql语句的实现

 1             <?xml version="1.0" encoding="UTF-8" ?>
 2 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
 3 <mapper namespace="com.shiyanlou.springboot.dao.UserMapper">
 4     <select id="list" resultType="com.shiyanlou.springboot.entity.User">
 5         select *
 6         from user
 7     </select>
 8     <select id="findById" parameterType="int" resultType="com.shiyanlou.springboot.entity.User">
 9         select *
10         from user
11         where id = #{value}
12     </select>
13     <update id="update" parameterType="com.shiyanlou.springboot.entity.User">
14         update user
15         <set>
16             <if test="username!=null and username!=''">
17                 username=#{username},
18             </if>
19             <if test="password!=null and password!=''">
20                 `password`=#{password}
21             </if>
22         </set>
23         where id=#{id}
24     </update>
25     <delete id="delete" parameterType="int">
26         delete
27         from user
28         where id = #{value}
29     </delete>
30     <insert id="save" parameterType="com.shiyanlou.springboot.entity.User" keyColumn="id" keyProperty="id"
31             useGeneratedKeys="true">
32         insert into user (username, `password`)
33         values (#{username}, #{password})
34     </insert>
35 </mapper>
View Code

service层,将service常用的方法抽象出来,减少重复的代码,建立接口文件 ibaseservice.java

 1             package com.shiyanlou.springboot.service;
 2             import java.util.List;
 3             public interface IBaseService<T> {
 4             /**
 5      * 保存
 6      */
 7     Integer save(T t);
 8             /**
 9      * 删除
10      */
11     void delete(Integer id);
12             /**
13      * 通过id查询
14      */
15     T findById(Integer id);
16             /**
17      * 更新
18      */
19     void update(T t);
20             /**
21      * 返回所有信息
22      */
23     List<T> list();
24 }
View Code

在service文件夹内建立服务接口实现类的文件夹impl

在文件夹内建立类文件ibaseserviceimpl.java实现接口

 1             package com.shiyanlou.springboot.service.impl;
 2             import com.shiyanlou.springboot.dao.BaseMapper;
 3 import com.shiyanlou.springboot.service.IBaseService;
 4 import org.springframework.beans.factory.annotation.Autowired;
 5 import org.springframework.transaction.annotation.Transactional;
 6             import java.util.List;
 7             @Transactional(rollbackFor = Exception.class)
 8 public abstract class BaseServiceImpl<T> implements IBaseService<T> {
 9             @Autowired
10     protected BaseMapper<T> baseMapper;
11             @Override
12     public void delete(Integer id) {
13         baseMapper.delete(id);
14     }
15             @Override
16     public Integer save(T t) {
17         return baseMapper.save(t);
18     }
19             @Override
20     public void update(T t) {
21         baseMapper.update(t);
22     }
23             @Override
24     public T findById(Integer id) {
25         return baseMapper.findById(id);
26     }
27             @Override
28     public List<T> list() {
29         return baseMapper.list();
30     }
31 }
View Code

在service文件夹内建立接口iuserservice.java

1             package com.shiyanlou.springboot.service;
2             import com.shiyanlou.springboot.entity.User;
3             public interface IUserService extends IBaseService<User> {
4 }
View Code

在service/impl底下建立userserviceimpl.java实现user接口,如果对baseserviceimpl中的默认的方法不满意可以新增或者覆盖

1             package com.shiyanlou.springboot.service.impl;
2             import com.shiyanlou.springboot.entity.User;
3 import com.shiyanlou.springboot.service.IUserService;
4 import org.springframework.stereotype.Service;
5             @Service
6 public class UserServiceImpl extends BaseServiceImpl<User> implements IUserService {
7             }
View Code

控制层controller文件中添加usercontroller.java文件

 1             package com.shiyanlou.springboot.controller;
 2             import com.shiyanlou.springboot.entity.User;
 3 import com.shiyanlou.springboot.service.IUserService;
 4 import org.springframework.beans.factory.annotation.Autowired;
 5 import org.springframework.web.bind.annotation.*;
 6             import java.util.List;
 7             @RestController
 8 @RequestMapping("user")
 9 public class UserController {
10             private final IUserService userService;
11             @Autowired
12     public UserController(IUserService userService) {
13         this.userService = userService;
14     }
15             //使用post请求新建
16     @PostMapping()
17     public String save(User user) {
18         userService.save(user);
19         return "save success";
20     }
21             //使用put请求更新 会拦截类似/user/1这种形式的路径
22     @PutMapping("{id}")
23     public String update(User user, @PathVariable int id) {
24         //当数据不存在时,不允许更新
25         if (userService.findById(id) == null) {
26             return "Not Exist";
27         }
28         //防止传入的id不一致,如user中id属性是2,而url路径中id为1;
29         if (user.getId() != id) {
30             return "Unmatched parameters";
31         }
32         userService.update(user);
33         return "update success";
34     }
35             //使用delete请求删除
36     @DeleteMapping("{id}")
37     public String delete(@PathVariable int id) {
38         userService.delete(id);
39         return "delete success";
40     }
41             //使用get方法查询
42     @GetMapping()
43     public List<User> list() {
44         return userService.list();
45     }
46             //使用get方法查询单个数据
47     @GetMapping("{id}")
48     public User getById(@PathVariable int id) {
49         return userService.findById(id);
50     }
51 }
View Code

配置文件application.propertise

1             spring.datasource.url=jdbc:mysql://localhost:3306/test spring.datasource.username=root spring.datasource.password= spring.datasource.driver-class-name=com.mysql.jdbc.Driver #mapper xml文件位置 mybatis.mapper-locations=classpath:mapper/*.xml
View Code

springboot启动文件建立 springbootapplication.java 在springboot文件底下

 1             package com.shiyanlou.springboot; 
 2             import org.mybatis.spring.annotation.MapperScan; 
 3             import org.springframework.boot.SpringApplication; 
 4             import org.springframework.boot.autoconfigure.SpringBootApplication; 
 5             @SpringBootApplication //扫描mapper接口位置 
 6             @MapperScan(basePackages = {"com.shiyanlou.springboot.dao"}) 
 7             public class SpringbootApplication { 
 8             public static void main(String[] args) { 
 9                 SpringApplication.run(SpringbootApplication.class, args);
10                  }
11              } 
View Code

这样简单的接口就简单的建成了

感谢老师 www.shiyanlou.com

猜你喜欢

转载自www.cnblogs.com/bcp7/p/10423173.html