基于全注解搭建ssm框架

本文详细介绍了如何搭建基于Maven的SSM(Spring、SpringMVC、MyBatis)项目,从创建Maven工程、添加依赖、配置文件目录、三层架构设计,到配置Spring、MyBatis、SpringMVC,以及数据库连接和Druid数据源。接着创建了POJO、DAO、Service层,并编写了测试类。最后提到了使用Postman测试Controller层。
摘要由CSDN通过智能技术生成

1.创建一个基于maven的工程

 

注意如果已经下载了maven以及maven仓库,那么自行配置一下即可,然后选择文件所在位置。如果没有下载直接点finsh,不需要重写                                                                                                                                         

2.在pom.xml文件中导入相关依赖

   <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.11</version>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-webmvc</artifactId>
      <version>5.2.10.RELEASE</version>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-jdbc</artifactId>
      <version>5.2.10.RELEASE</version>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-test</artifactId>
      <version>5.2.10.RELEASE</version>
    </dependency>
    <dependency>
      <groupId>org.mybatis</groupId>
      <artifactId>mybatis</artifactId>
      <version>3.5.6</version>
    </dependency>
    <dependency>
      <groupId>org.mybatis</groupId>
      <artifactId>mybatis-spring</artifactId>
      <version>1.3.0</version>
    </dependency>
    <dependency>
      <groupId>mysql</groupId>
      <artifactId>mysql-connector-java</artifactId>
      <version>8.0.23</version>
    </dependency>
    <dependency>
      <groupId>com.alibaba</groupId>
      <artifactId>druid</artifactId>
      <version>1.1.16</version>
    </dependency>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.12</version>
    </dependency>
    <dependency>
      <groupId>javax.servlet</groupId>
      <artifactId>javax.servlet-api</artifactId>
      <version>3.1.0</version>
      <scope>provided</scope>
    </dependency>
    <dependency>
      <groupId>com.fasterxml.jackson.core</groupId>
      <artifactId>jackson-databind</artifactId>
      <version>2.9.0</version>
    </dependency>

3.完善文件目录

 

 

4.完善包(即三层架构)

 5.在resources目录下创建jdbc.properties文件并配置

jdbc.driver=com.mysql.cj.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/ssm_db
jdbc.username=root
jdbc.password=123456

6.完善相关配置类 

        6.1spring所需配置类

                

package com.huang1.config;

import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Import;
import org.springframework.context.annotation.PropertySource;
import org.springframework.transaction.annotation.EnableTransactionManagement;

@Configuration
@ComponentScan({"com.huang1.dao","com.huang1.service"})
@PropertySource("classpath:jdbc.properties")
@Import({JdbcConfig.class, MybatisConfig.class})
@EnableTransactionManagement
public class SpringConfig {
}

   对各个注解进行解释:

@Configuration:将SpringConfig定义为一个配置类,其作用相当于

<beans>......</beans>

@ComponentScan(""):将对象扫描到IOC容器中,起作用相当于

<beans>


   <bean id="...." class="...">

</beans

@PropertySource :将jdbc.properties加载到IOC容器中

@import(xxx.class...):将第三方bean加载到IOC容器中

@EnableTractionManagement:开启事务注解

        6.2spring整合Mybatis所需配置类

package com.huang1.config;

import com.alibaba.druid.pool.DruidDataSource;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;
import org.springframework.transaction.PlatformTransactionManager;

import javax.sql.DataSource;

public class JdbcConfig {
    /**
     * jdbc.driver=com.mysql.cj.jdbc.Driver
     *
     * jdbc.url=jdbc:mysql://localhost:3306/shop
     *
     * jdbc.username=root
     *
     * jdbc.password=123456
     */
    @Value("${jdbc.driver}")
    private String driver;
    @Value("${jdbc.url}")
    private String url;
    @Value("${jdbc.username}")
    private String username;
    @Value("${jdbc.password}")
    private String password;


    @Bean
    public DataSource dataSource(){
        DruidDataSource druidDataSource = new DruidDataSource();
        druidDataSource.setDriverClassName(driver);
        druidDataSource.setUrl(url);
        druidDataSource.setUsername(username);
        druidDataSource.setPassword(password);
        return druidDataSource;
    }
    @Bean
    public PlatformTransactionManager platformTransactionManager(DataSource dataSource){
        DataSourceTransactionManager dataSourceTransactionManager = new DataSourceTransactionManager();
        dataSourceTransactionManager.setDataSource(dataSource);
        return dataSourceTransactionManager;

    }
}
package com.huang1.config;

import org.mybatis.spring.SqlSessionFactoryBean;
import org.mybatis.spring.mapper.MapperScannerConfigurer;
import org.springframework.context.annotation.Bean;

import javax.sql.DataSource;

public class MybatisConfig {
    @Bean
    public SqlSessionFactoryBean sqlSessionFactoryBean(DataSource dataSource){
        SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean();
        sqlSessionFactoryBean.setDataSource(dataSource);
        sqlSessionFactoryBean.setTypeAliasesPackage("huang1.domain");
        return sqlSessionFactoryBean;
    }
    @Bean
    public MapperScannerConfigurer mapperScannerConfigurer(){
        MapperScannerConfigurer mapperScannerConfigurer = new MapperScannerConfigurer();
        mapperScannerConfigurer.setBasePackage("huang1.dao");
        return mapperScannerConfigurer;


    }
}

        6.3 Spring整合SpringMvc所需配置类

package com.huang1.config;

import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;

@Configuration
@ComponentScan({"com.huang1.controller","com.huang1.config"})
@EnableWebMvc
public class SpringMvcConfig {
}

 

package com.huang1.config;

import org.springframework.web.servlet.support.AbstractAnnotationConfigDispatcherServletInitializer;

public class ServletConfig extends AbstractAnnotationConfigDispatcherServletInitializer {
    @Override
    protected Class<?>[] getRootConfigClasses() {
        return new Class[]{SpringConfig.class};
    }

    @Override
    protected Class<?>[] getServletConfigClasses() {
        return new Class[]{SpringMvcConfig.class};
    }

    @Override
    protected String[] getServletMappings() {
        return new String[]{"/"};
    }
}

7.编写pojo层

package com.huang1.pojo;

public class Book {
    private Integer id;
    private String type;
    private String name;
    private String description;
    public Book() {
    }

    public Book(Integer id, String type, String name, String description) {
        this.id = id;
        this.type = type;
        this.name = name;
        this.description = description;
    }

    public Book(String type, String name, String description) {
        this.type = type;
        this.name = name;
        this.description = description;
    }

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getType() {
        return type;
    }

    public void setType(String type) {
        this.type = type;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getDescription() {
        return description;
    }

    public void setDescription(String description) {
        this.description = description;
    }

    @Override
    public String toString() {
        return "Book{" +
                "id=" + id +
                ", type='" + type + '\'' +
                ", name='" + name + '\'' +
                ", description='" + description + '\'' +
                '}';
    }
}

8.编写dao层 

package com.huang1.dao;

import huang1.domain.Book;
import org.apache.ibatis.annotations.Delete;
import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.Select;
import org.apache.ibatis.annotations.Update;
import org.springframework.stereotype.Repository;

import java.util.List;

@Repository
public interface BookDao {
    @Insert("insert into tbl_book (id,type,name,description)values(#{id},#{type},#{name},#{description})")
    public void save(Book book);
    @Update("update tbl_book set type=#{type},name=#{name},description=#{description} where id = #{id}")
    public void update(Book book);
    @Delete("delete from tbl_book where id = #{id}")
    public void delete(Integer id);
    @Select("select * from tbl_book where id = #{id}")
    public Book getBookById(Integer id);
    @Select("select * from tbl_book")
    public List<Book> getAllBooks();

}

 9.创建数据库表

/*
Navicat MySQL Data Transfer

Source Server         : localhost_3306
Source Server Version : 80023
Source Host           : localhost:3306
Source Database       : ssm_db

Target Server Type    : MYSQL
Target Server Version : 80023
File Encoding         : 65001

Date: 2023-03-02 08:51:14
*/

SET FOREIGN_KEY_CHECKS=0;

-- ----------------------------
-- Table structure for tbl_book
-- ----------------------------
DROP TABLE IF EXISTS `tbl_book`;
CREATE TABLE `tbl_book` (
  `id` int NOT NULL AUTO_INCREMENT,
  `type` varchar(20) DEFAULT NULL,
  `name` varchar(50) DEFAULT NULL,
  `description` varchar(255) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=10 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;

10.编写 service层

package com.huang1.service.impl;

import com.huang1.pojo.Book;
import org.springframework.transaction.annotation.Transactional;

import java.util.List;

@Transactional
public interface BookService {
    public Boolean save(Book book);
    public Boolean update(Book book);
    public Boolean delete(Integer id);
    public Book getBookById(Integer id);
    public List<Book> getAllBooks();
}

11.编写service.impl层

package com.huang1.service.impl;

import com.huang1.mapper.BookDao;
import com.huang1.pojo.Book;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

@Service
public class BookServiceImpl implements BookService{
    @Autowired
    private BookDao bookDao;
    @Override
    public Boolean save(Book book) {
       bookDao.save(book);
       return true;
    }

    @Override
    public Boolean update(Book book) {
        bookDao.update(book);
        return true;
    }

    @Override
    public Boolean delete(Integer id) {
        bookDao.delete(id);
        return true;

    }

    @Override
    public Book getBookById(Integer id) {
        Book bookById = bookDao.getBookById(id);
        return bookById;
    }

    @Override
    public List<Book> getAllBooks() {
        List<Book> allBooks = bookDao.getAllBooks();
        return allBooks;
    }
}

 12.编写controller层

package com.huang1.controller;

import com.huang1.domain.Book;
import com.huang1.service.impl.BookService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;

import java.util.List;

 @RestController
 @RequestMapping("/books")
public class BookController {
     @GetMapping
    public String getAllBooks(){
   
        return "nihao";

    };

}

     

13.测试dao层

package com.huang1.service.com.huang1;

import com.huang1.config.SpringConfig;
import com.huang1.dao.BookDao;
import com.huang1.domain.Book;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;

import java.util.List;

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = SpringConfig.class)
public class DaoTest {
    @Autowired
    private BookDao bookDao;
    @Test
    public void testDao(){

        List<Book> allBooks = bookDao.getAllBooks();
        System.out.println(allBooks);

    }
}

 

 

14.测试service层

package com.huang1.service;

import com.huang1.config.SpringConfig;
import com.huang1.dao.BookDao;
import com.huang1.domain.Book;
import com.huang1.service.impl.BookService;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;

import java.util.List;

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = SpringConfig.class)
public class ServiceTest {
    @Autowired
    private BookService bookService;
    @Test
    public  void testGetAllBooks(){
        List<Book> allBooks = bookService.getAllBooks();
        System.out.println(allBooks);

    }
  
}

15.测试controller层      

 

总结:由此基于全注解的ssm环境搭建完成,测试Controller层用到的工具为Postman,此工具十分便于测试ssm框架,网上可以找到资源下载 ,如果不想麻烦,也可用自己的浏览器进行测试。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值