SpringMVC第四天(SSM整合)

SSM整合流程

1.创建工程

2.SSM整合

        ①Spring

                SpringConfig

package com.cacb.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;

@Configuration
@ComponentScan("com.cacb.service")
@PropertySource("jdbc.properties")
@Import({JdbcConfig.class,MybatisConfig.class})
public class SpringConfig {
}

        ②MyBatis

                MybatisConfig

package com.cacb.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 sqlSessionFactory(DataSource dataSource){
        SqlSessionFactoryBean factoryBean = new SqlSessionFactoryBean();
        factoryBean.setDataSource(dataSource);
        factoryBean.setTypeAliasesPackage("com.cacb.domain");
        return factoryBean;
    }


    @Bean
    public MapperScannerConfigurer mapperScannerConfigurer(){
        MapperScannerConfigurer msc = new MapperScannerConfigurer();
        msc.setBasePackage("com.cacb.dao");
        return msc;
    }
}

                JdbcConfig

package com.cacb.config;

import com.alibaba.druid.pool.DruidDataSource;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;

import javax.sql.DataSource;


public class JdbcConfig {
    @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 dataSource = new DruidDataSource();
        dataSource.setDriverClassName(driver);
        dataSource.setUrl(url);
        dataSource.setUsername(username);
        dataSource.setPassword(password);
        return dataSource;
    }
}

                jbdc.properties

jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql:"//localhost:3306/cary_cacb
jdbc.username=
jdbc.password=

        ③SpringMVC

                ServletConfig

package com.cacb.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[]{"/"};
    }
}

                SpringMvcConfig

package com.cacb.config;

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

@Configuration
@ComponentScan("com.cacb.controller")
@EnableWebMvc
public class SpringMvcConfig {
}

3.功能模块

        表与实体块

package com.cacb.domain;

public class Book {
    private  Integer id;
    private String type;
    private String name;
    private String 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 + '\'' +
                '}';
    }
}

        dao(接口+自动代理)

package com.cacb.dao;

import com.cacb.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 java.util.List;

public interface BookDao {
    @Insert("insert into tbl_book values(null,#{type},#{name},#{description})")
    public void save(Book book);

    @Update("update tbl_boook 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 getById(Integer id);

    @Select("select * from tbl_book")
    public List<Book> getAll();
}

        service(接口+实现类)

package com.cacb.service;

import com.cacb.domain.Book;

import java.util.List;

public interface BookService {

    public boolean save(Book book);

    public boolean update(Book book);

    public boolean delete(Integer id);

    public Book getById(Integer id);

    public List<Book> getAll();
}
package com.cacb.service.impl;


import com.cacb.dao.BookDao;
import com.cacb.domain.Book;
import com.cacb.service.BookService;
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 getById(Integer id) {
        bookDao.getById(id);
        return null;
    }

    @Override
    public List<Book> getAll() {
        bookDao.getAll();
        return null;
    }
}

 

                业务层接口测试

package com.cacb.service;

import com.cacb.config.SpringConfig;
import com.cacb.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;

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = SpringConfig.class)
public class BookServiceTest {

    @Autowired
    private BookService bookService;

    @Test
    public void testGetById(){
        Book book =    bookService.getById(1);
        System.out.println(book);
    }
}

        controller

package com.cacb.controller;

import com.cacb.domain.Book;
import com.cacb.service.BookService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;

@RestController
@RequestMapping("/books")
public class BookController {
    @Autowired
    private BookService bookService;

    @PostMapping
    public boolean save(@RequestBody Book book) {
        return bookService.save(book);

    }

    @PutMapping
    public boolean update(@RequestBody Book book) {
        return bookService.update(book);
    }

    @DeleteMapping( "/{id}")
    public boolean delete(@PathVariable Integer id) {
        return bookService.delete(id);
    }

    @GetMapping("/{id}")
    public Book getById(@PathVariable Integer id) {
        return  bookService.getById(id);
    }

    @GetMapping
    public List<Book> getAll() {
        return  bookService.getAll();
    }
}

                表现层接口测试

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/346608.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

解析半导体放电管TSS的原理与应用?|深圳比创达电子

随着电子技术的迅速发展&#xff0c;半导体放电管&#xff08;TSS&#xff09;已成为电路保护的重要组件。本文旨在全面深入解析半导体放电管TSS的原理与应用&#xff0c;帮助读者更好地理解这一关键元件。 一、半导体放电管TSS的概念与原理 半导体放电管TSS是一种用于保护电…

sheng的学习笔记-神经网络

基础知识 基础知识-什么是分类问题 分类问题是根据已有数据&#xff0c;判断结果是正的还是负的&#xff08;1或者0&#xff09;,比如&#xff1a; • 根据肿瘤大小&#xff0c;判断肿瘤是良性的还是恶性的 • 根据客户交易行为&#xff0c;判断是否是恶意用户 • 根据邮件情况…

司铭宇老师:手机门店销售培训:手机销售的技巧和方法

手机门店销售培训&#xff1a;手机销售的技巧和方法 在当今这个信息化的时代&#xff0c;手机已经成为了我们生活中不可或缺的一部分。作为手机销售人员&#xff0c;如何在这个竞争激烈的市场中突出重围&#xff0c;实现销售目标&#xff0c;是每一位销售人员都需要思考的问题。…

Unity出AAB包资源加载过慢

1&#xff09;Unity出AAB包资源加载过慢 2&#xff09;Unity IL2CPP打包&#xff0c;libil2cpp.so库中没有Mono接口 3&#xff09;如何在URP中正确打出Shader变体 4&#xff09;XLua打包Lua文件粒度问题 这是第370篇UWA技术知识分享的推送&#xff0c;精选了UWA社区的热门话题&…

Dify学习笔记-知识库(六)

1、知识库 大多数语言模型采用较为陈旧的训练数据&#xff0c;并且对每次请求的上下文有长度限制。例如 GPT-3.5 是基于 2021 年的语料进行训练的&#xff0c;且有每次约 4K Token 的限制。这意味着开发者如果想让 AI 应用基于最新的、私有的上下文对话&#xff0c;必须使用类…

C语言实现快速排序算法(附带源代码)

快速排序 在区间中随机挑选一个元素作基准&#xff0c;将小于基准的元素放在基准之前&#xff0c;大于基准的元素放在基准之后&#xff0c;再分别对小数区与大数区进行排序。 动态效果过程演示&#xff1a; 快速排序&#xff08;Quick Sort&#xff09;是一种常用的排序算法&…

Mac 也能玩文明6!下载安装详细教程

最近朋友给我分享了一个 Mac 玩文明6的方法&#xff0c;丝毫不卡顿&#xff0c;非常流畅&#xff0c;分享给大家 文明6是最新的文明系列游戏&#xff0c;和以往的文明游戏一样&#xff0c;玩家将从石器时代创建文明&#xff0c;然后迈向信息时代&#xff0c;最终通过军事、经济…

SQL 系列教程(二)

目录 SQL DELETE 语句 DELETE 语句 演示数据库 DELETE 实例 删除所有行 SQL TOP, LIMIT, ROWNUM 子句 TOP 子句 演示数据库 SQL TOP、LIMIT 和 ROWNUM 示例 SQL TOP PERCENT 实例 添加WHERE子句 SQL MIN() 和 MAX() 函数 MIN() 和 MAX() 函数 演示数据库 MIN() …

【服务器Midjourney】Midjourney网站0基础搭建

目录 🌺【前言】 🌺【准备】 🌺【宝塔搭建MJ】 🌼1. 给服务器添加端口 🌼2. 使用Xshell连接服务器 🌼3. 安装docker 🌼4. 安装Midjourney程序 🌼5. 绑定域名+申请SSL证书 🌼6. 更新网站

4D成像雷达「风再起」

编者按&#xff1a;4D成像雷达在过去几年已经得到汽车行业的认可&#xff0c;但后面的路怎么走&#xff0c;是否会一帆风顺&#xff0c;还受制于很多因素。 “去年第三季度&#xff0c;四家合作伙伴都进入了基于我们芯片组的4D雷达生产阶段&#xff0c;目前正处于与欧美和亚洲头…

太卷了!这个考试系统不愧是“卷王”!

大家好&#xff0c;我是 Java陈序员。 今天给大家推荐一款 Java 开源、功能强大、搭建简单的调查问卷系统和考试系统。 关注微信公众号&#xff1a;【Java陈序员】&#xff0c;获取开源项目分享、AI副业分享、超200本经典计算机电子书籍等。 项目介绍 SurveyKing —— 也叫“…

简化java代码:mapstruct + 策略模式

目录 目的 准备 注意 相同类型-属性名不同 实体类 映射 使用 验证-查看实现类 测试 不同类型(策略模式) 实体类 映射 工具类 使用&#xff1a;对象拷贝 验证-查看实现类 测试 使用&#xff1a;集合拷贝 测试 策略模式说明 准备-依赖 目的 简化 BeanUtils.…

JAVA 学习 面试(四)垃圾回收篇

Java中的每个对象都经历了创建、使用和最终被回收的过程。从对象实例化开始&#xff0c;它可能被程序的多个部分引用&#xff0c;直到最后一个引用消失&#xff0c;对象成为垃圾&#xff0c;等待回收。 JVM垃圾查找算法 &#xff08;1&#xff09;引用计数法&#xff1a;已淘…

开始读 Oracle PL/SQL Programming 第6版

最近觉得PL/SQL越来越重要&#xff0c;因为这本书早就在待读列表中&#xff0c;因此决定系统的学一下。 2024年1月24日晚开始读。 在亚马逊上的评价还不错&#xff1a; 本书的第一作者是Steven Feuerstein&#xff0c;是Oracle资深的Developer Advocate。 本书的示例代码可…

JS进阶-内置构造函数(二)

小提示&#xff1a;这些内置函数在开发使用的频率非常的频繁&#xff0c;建议认真看一下&#xff0c;并背一下 目录 知识回顾&#xff1a; • Object 三个常用静态方法&#xff08;静态方法就是只有构造函数Object可以调用的&#xff09; Object.keys Object.values Obj…

《动手学深度学习(PyTorch版)》笔记3.4

Chapter3 Linear Neural Networks 3.4 Softmax Regression 3.4.1 Classification Problems 一般的分类问题并不与类别之间的自然顺序有关&#xff0c;统计学家发明了一种表示分类数据的简单方法&#xff1a;独热编码&#xff08;one-hot encoding&#xff09;。独热编码是一…

docker里安装conda,并source本地已有的虚拟环境包

有的环境比较难配&#xff0c;在镜像里配置的版本总是与本地不同&#xff0c;导致程序起不来&#xff0c;今天就用个最基础的镜像&#xff0c;去配置anaconda&#xff0c;然后直接导入虚拟环境。 本次使用镜像&#xff1a;nvcr.io/nvidia/cuda:12.2.0-runtime-ubuntu20.04&…

Spring Boot 中的自动配置(autoconfigure)

文中部分图片来源为 动力节点-王鹤老师的Spring Boot3.0 视频讲解中。 Spring Boot 中的自动配置&#xff08;autoconfigure&#xff09; 一、自动配置的原理二、关键注解和类1.EnableAutoConfiguration 注解2.Import 注解3.AutoConfigurationImportSelector 类4.AutoConfigura…

JeecgBoot 3.6.1实现Modal对话框,以为审核数据为例

JeecgBoot 3.6.1实现Modal对话框 vue使用的是3.0版本 文章目录 JeecgBoot 3.6.1实现Modal对话框前言一、列表页面关键代码示例二、textAuditModal.vue代码示例三、test.api.ts总结 前言 在工作中&#xff0c;有一个需求&#xff0c;要求&#xff0c;在数据列表页&#xff0c;…

念念不忘智能编程,必有回响CodeArts Snap

开发者的碎碎念 之前在【我与ModelArts的故事】的文章里&#xff0c;分享过我学习新技术的经历&#xff0c;主要有&#xff1a; 自主学习&#xff0c;比如自学Python&#xff1b;借助华为云的产品边用边学。 在围着"编程学习"这座城池&#xff0c;外围来来回回转了…