SSM | 整合(基于图书的增删改查操作)(上)

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS PostgreSQL,高可用系列 2核4GB
云数据库 RDS MySQL,高可用系列 2核4GB
简介: SSM | 整合(基于图书的增删改查操作)

3e1cffb01ec245c6bae3bc78205c43ba.png


一、创建工程


(1)使用IDEA创建一个Maven项目,具体可以参考这篇文章。

使用IDEA创建Maven项目(图文并茂超详细)

(2)项目用到的依赖添加到Pom.xml中


<!--    打包方式-->
    <packaging>war</packaging>
    <!--    tomcat7插件-->
    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.tomcat.maven</groupId>
                <artifactId>tomcat7-maven-plugin</artifactId>
                <version>2.2</version>
                <configuration>
                    <port>8080</port>
                    <!--                    GET请求乱码问题-->
                    <uriEncoding>UTF-8</uriEncoding>
                </configuration>
            </plugin>
        </plugins>
    </build>
<!--    SpringMVC-->
    <dependencies>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-webmvc</artifactId>
            <version>5.2.10.RELEASE</version>
        </dependency>
<!--        mysql-->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.24</version>
        </dependency>
<!--        druid连接池-->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid</artifactId>
            <version>1.2.10</version>
        </dependency>
<!--        mybatis-->
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.5.5</version>
        </dependency>
<!--        mybatis提供给Spring的接口-->
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis-spring</artifactId>
            <version>2.1.0</version>
        </dependency>
<!--        SpringJDBC-->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-jdbc</artifactId>
            <version>5.3.4</version>
        </dependency>
<!--        servlet-->
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
            <version>4.0.1</version>
            <scope>provided</scope>
        </dependency>
<!--        Spring测试-->
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.13</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-test</artifactId>
            <version>5.2.10.RELEASE</version>
        </dependency>
<!--        导入JSON转换器-Jackson-->
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-databind</artifactId>
            <version>2.9.0</version>
        </dependency>
    </dependencies>


二、整合SSM配置


2.1 Spring


编写Spring配置类,用于代替ApplicationContext.xml文件,并扫描业务层的bean。


/**
 * Spring配置类
 */
@Configuration // 设置当前类为Spring配置类
@ComponentScan({"com.itxiaoguo.service"}) // 扫描这些包下的bean
@PropertySource(value = {"classpath:jdbc.properties"}) // 扫描这个资源
@Import({JdbcConfig.class, MybatisConfig.class}) // 导入这两个配置
@EnableTransactionManagement // 开启Spring事务支持
public class SpringConfig {
}


2.2 Mybatis


(1)编写jdbc.properties文件,并放在resources目录下。


jdbc.driver=com.mysql.cj.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/test?useSSL=false
jdbc.username=root
jdbc.password=@123456


(2)编写JdbcConfig,用于创建数据源对象和管理JDBC事务。


/**
 * JDBC连接类
 */
public class JdbcConfig {
    /**
     * 注入配置文件的信息——基本类型注入
     */
    @Value("${jdbc.driver}")
    private String driverClassName;
    @Value("${jdbc.url}")
    private String url;
    @Value("${jdbc.username}")
    private String username;
    @Value("${jdbc.password}")
    private String password;
    /**
     * 创建数据源对象,传入给Mybatis
     * @return
     */
    @Bean
    public DataSource getDataSource() {
        DruidDataSource dataSource = new DruidDataSource();
        dataSource.setDriverClassName(driverClassName);
        dataSource.setUrl(url);
        dataSource.setUsername(username);
        dataSource.setPassword(password);
        return dataSource;
    }
    /**
     * 编写JDBC事务管理器的Bean
     * @param dataSource
     * @return
     */
    @Bean
    public PlatformTransactionManager transactionManager(DataSource dataSource) {
        DataSourceTransactionManager manager = new DataSourceTransactionManager();
        manager.setDataSource(dataSource);
        return manager;
    }
}

(3)编写MybatisConfig类,用于获取数据源对象和创建mapper代理。

public class MybatisConfig {
    @Bean
    public SqlSessionFactoryBean getSqlSessionFactoryBean(DataSource dataSource) {
        SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
        bean.setDataSource(dataSource); // 设置数据源
        bean.setTypeAliasesPackage("com.itxiaoguo.bean"); // 设置类型别名的实体类
        return bean;
    }
    @Bean
    public MapperScannerConfigurer getMapperScannerConfigurer() {
        MapperScannerConfigurer configurer = new MapperScannerConfigurer();
        configurer.setBasePackage("com.itxiaoguo.mapper"); // 设置要生成代理的包
        return configurer;
    }
}

2.3 SpringMVC


(1)编写SpringMVC配置类,扫描controller层,并开启辅助支持。


/**
 * SpringMVC配置类
 */
@Configuration
@ComponentScan("com.itxiaoguo.controller")
@EnableWebMvc
public class SpringMvcConfig {
}

(2)编写Servlet容器初始化类,并处理Post请求乱码问题。


/**
 * Servlet容器初始化类
 */
public class ServletContainersInitConfig extends AbstractAnnotationConfigDispatcherServletInitializer {
    /**
     * 导入Spring配置信息
     *
     * @return
     */
    @Override
    protected Class<?>[] getRootConfigClasses() {
        return new Class[]{SpringConfig.class};
    }
    /**
     * 告知Tomcat服务器这是SpringMVC项目
     *
     * @return
     */
    @Override
    protected Class<?>[] getServletConfigClasses() {
        return new Class[]{SpringMvcConfig.class};
    }
    /**
     * 将所有资源交给SpringMVC处理
     *
     * @return
     */
    @Override
    protected String[] getServletMappings() {
        return new String[]{"/"};
    }
    /**
     * 解决POST请求中文乱码问题
     * @return
     */
    @Override
    protected Filter[] getServletFilters() {
        CharacterEncodingFilter filter = new CharacterEncodingFilter();
        filter.setEncoding("UTF-8");
        return new Filter[]{filter};
    }
}


三、功能模块开发


4a4b0ace10614a4b957a6a25abc92506.png

public class Book {
    /**
     * 书籍id
     */
    private Integer id;
    /**
     * 书籍类别
     */
    private String bookType;
    /**
     * 书名
     */
    private String bookName;
    /**
     * 书籍描述
     */
    private String bookDesc;
  // 省略了getter setter 有参 无参构造方法和toString()方法
 }


3.2 mapper接口和自动代理


public interface BookMapper {
    /**
     * 添加书籍
     *
     * @param book
     * @return
     */
    @Insert("INSERT INTO book(book_type,book_name,book_desc) VALUES (#{bookType},#{bookName},#{bookDesc})")
    int addBook(Book book);
    /**
     * 修改书籍
     *
     * @param book
     * @return
     */
    @Update("UPDATE book SET book_type = #{bookType},book_name = #{bookName},book_desc = #{bookDesc} WHERE id = #{id}")
    int updateBookById(Book book);
    /**
     * 通过id删除书籍
     *
     * @param id
     * @return
     */
    @Delete("DELETE from book WHERE id = #{id}")
    int deleteBookById(@Param("id") Integer id);
    /**
     * 通过id查找书籍
     * 使用@Results注解来映射数据库字段别名
     *
     * @param id
     * @return
     */
    @Select("SELECT * FROM book WHERE id = #{id}")
    @Results(id = "resultMaps", value = {@Result(column = "book_type", property = "bookType"), @Result(column = "book_name", property = "bookName"), @Result(column = "book_desc", property = "bookDesc")})
    Book getBookById(@Param("id") Integer id);
    /**
     * 查询所有书籍
     *
     * @return
     */
    @Select("SELECT * FROM book")
    @ResultMap("resultMaps")
    List<Book> selectAll();
}


3.3 service接口和实现类


@Transactional
public interface BookService {
    int addBook(Book book);
    int updateBookById(Book book);
    int deleteBookById(@Param("id") Integer id);
    Book getBookById(@Param("id") Integer id);
    List<Book> selectAll();
}
@Service
public class BookServiceImpl implements BookService {
    @Autowired
    private BookMapper mapper;
    @Override
    public int addBook(Book book) {
        int i = mapper.addBook(book);
        return i;
    }
    @Override
    public int updateBookById(Book book) {
        int i = mapper.updateBookById(book);
        return i;
    }
    @Override
    public int deleteBookById(Integer id) {
        int i = mapper.deleteBookById(id);
        return i;
    }
    @Override
    public Book getBookById(Integer id) {
        Book book = mapper.getBookById(id);
        return book;
    }
    @Override
    public List<Book> selectAll() {
        List<Book> books = mapper.selectAll();
        return books;
    }
}

业务层接口测试:使用Junit测试

相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。 &nbsp; 相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情:&nbsp;https://www.aliyun.com/product/rds/mysql&nbsp;
相关文章
|
5月前
|
SQL 数据库 开发者
Python中使用Flask-SQLAlchemy对数据库的增删改查简明示例
这样我们就对Flask-SQLAlchemy进行了一次简明扼要的旅程,阐述了如何定义模型,如何创建表,以及如何进行基本的数据库操作。希望你在阅读后能对Flask-SQLAlchemy有更深入的理解,这将为你在Python世界中从事数据库相关工作提供极大的便利。
511 77
|
5月前
|
XML 数据库 Android开发
Android数据库的使用(增删改查)
本文介绍了一个简单的数据库操作Demo,包含创建数据库、增删改查功能。通过5个按钮分别实现创建数据库、插入数据、删除数据、更新数据和查询数据的操作。代码结构清晰,适合初学者学习Android SQLite数据库基础操作。
128 5
|
5月前
|
数据库 Android开发 开发者
Android常用的room增删改查语句(外部数据库)
本文分享了将一个原生数据库驱动的单词APP重构为使用Room库的过程及遇到的问题,重点解决了Room中增删改查的常用语句实现。文章通过具体示例(以“forget”表为例),详细展示了如何定义实体类、Dao接口、Database类以及Repository和ViewModel的设计与实现。同时,提供了插入、删除、更新和查询数据的代码示例,包括模糊查询、分页加载等功能。此外,针对外部数据库导入问题,作者建议可通过公众号“计蒙不吃鱼”获取更多支持。此内容适合有一定Room基础的开发者深入学习。
165 0
Android常用的room增删改查语句(外部数据库)
|
7月前
|
前端开发 Java 关系型数据库
基于ssm的考研图书电子商务平台,附源码+数据库+论文
考研图书电子商务平台是一个基于Java的B/S架构系统,适用于Windows环境。该平台设有管理员和用户权限,管理员可管理商品、用户、留言板及订单,用户可管理收货地址、订单、收藏及购买商品。技术框架包括前端Vue+HTML+JavaScript+CSS+LayUI,后端SSM,数据库为MySQL。项目包含17个数据库表,支持Maven构建。提供演示视频和详细文档,支持免费远程调试安装,确保顺利运行。
101 13
基于ssm的考研图书电子商务平台,附源码+数据库+论文
|
8月前
|
关系型数据库 MySQL 数据库连接
Unity连接Mysql数据库 增 删 改 查
在 Unity 中连接 MySQL 数据库,需使用 MySQL Connector/NET 作为数据库连接驱动,通过提供服务器地址、端口、用户名和密码等信息建立 TCP/IP 连接。代码示例展示了如何创建连接对象并执行增删改查操作,确保数据交互的实现。测试代码中,通过 `MySqlConnection` 类连接数据库,并使用 `MySqlCommand` 执行 SQL 语句,实现数据的查询、插入、删除和更新功能。
|
10月前
|
SQL 关系型数据库 API
HarmonyOs开发:关系型数据库封装之增删改查
每个方法都预留了多种调用方式,比如使用callback异步回调或者使用Promise异步回调,亦或者同步执行,大家在使用的过程中,可以根据自身业务需要进行选择性调用,也分别暴露了成功和失败的方法,可以针对性的判断在执行的过程中是否执行成功。
316 13
|
12月前
|
存储 NoSQL API
使用Py2neo进行Neo4j图数据库的增删改查操作
使用Py2neo进行Neo4j图数据库的增删改查操作
394 5
|
12月前
|
数据可视化 API PHP
低代码开发工具-学生管理系统-老师管理增删改查实现
低代码开发工具-学生管理系统-老师管理增删改查实现
153 5
|
12月前
|
前端开发 Java 数据库连接
javamvc配置,增删改查,文件上传下载。
【10月更文挑战第4天】javamvc配置,增删改查,文件上传下载。
89 1
|
12月前
|
JavaScript 前端开发 测试技术
[新手入门]todolist增删改查:vue3+ts版本!
【10月更文挑战第15天】[新手入门]todolist增删改查:vue3+ts版本!

热门文章

最新文章