SSM整合

SSM整合

1.在数据库中创建表,并导入数据

sql语句

CREATE DATABASE wyy_music;

USE wyy_music;

DROP TABLE IF EXISTS `tb_music`;
CREATE TABLE `tb_music` (
  `music_id` int(11) NOT NULL AUTO_INCREMENT, -- 歌曲ID
  `music_name` VARCHAR(255) NOT NULL, -- 歌曲名称
  `music_album_name` VARCHAR(255) NOT NULL, -- 专辑名称
  `music_album_picUrl` VARCHAR(255) NOT NULL, -- 专辑图片路径
  `music_mp3Url` VARCHAR(255) NOT NULL, -- 歌曲播放路径
  `music_artist_name` VARCHAR(255) NOT NULL, -- 歌手名称
  `sheet_id` int(11) DEFAULT NULL, -- 对应的歌单ID
  PRIMARY KEY (`music_id`)
) ENGINE=INNODB DEFAULT CHARSET=utf8;

INSERT INTO tb_music VALUES ('1', '光年之外', '光年之外', '//y.qq.com/music/photo_new/T002R300x300M000001mTkmb4GJlh4_1.jpg?max_age=2592000', 'http://dl.stream.qqmusic.qq.com/C4000029Lt3K2XVP75.m4a?guid=9466964098&vkey=C4E6AB1F9F5A140F233BF1BD4E9E1C96DD52547C82F8BF8101037E1A9F212DC861099D1F615117A7821AD26EC1DEC598F0D94A77D6E35683&uin=729953102&fromtag=66', 'G.E.M.邓紫棋','1');
INSERT INTO tb_music VALUES ('2', '夜空中最亮的星', '世界', '//y.qq.com/music/photo_new/T001R300x300M000001Yxpxc0OaUUX.jpg?max_age=2592000', 'http://dl.stream.qqmusic.qq.com/C400002EHg2B2FPi71.m4a?guid=5359545528&vkey=38B7183C0E0D20D7AC35460A6C5446CB7A926254BD1E35898CB096D6381FB4B15B001C00EE34308E0549718E29601433C9FE4DD85960F7C2&uin=729953102&fromtag=66', '逃跑计划','1');
INSERT INTO tb_music VALUES ('3', '只要平凡', '只要平凡', '//y.qq.com/music/photo_new/T002R300x300M000000K7srf1rZtOX_1.jpg?max_age=2592000', 'http://dl.stream.qqmusic.qq.com/C400004BwbUM0vWzAt.m4a?guid=4198275520&vkey=F846EA79763CE8C226A77FF6EE3077B9D7A71A5A333A8ED1233EA5DB13AEC831E3E83D42172C8231E32EE9EF09E7AE0A746D16B3925CC317&uin=729953102&fromtag=66', '张杰/张碧晨','2');

DROP TABLE IF EXISTS `tb_sheet`;
CREATE TABLE `tb_sheet` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `sheet_name` varchar(255) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;

INSERT INTO tb_sheet VALUES ('1', '热歌榜');
INSERT INTO tb_sheet VALUES ('2', '新歌榜');
INSERT INTO tb_sheet VALUES ('3', '原创榜');

2.创建web工程,导入依赖

<dependencies>

    <!-- spring -->
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-webmvc</artifactId>
        <version>5.3.20</version>
    </dependency>

    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-jdbc</artifactId>
        <version>5.3.20</version>
    </dependency>

    <dependency>
        <groupId>org.aspectj</groupId>
        <artifactId>aspectjweaver</artifactId>
        <version>1.9.9.1</version>
    </dependency>

    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-tx</artifactId>
        <version>5.3.20</version>
    </dependency>

    <!-- mybatis -->
    <dependency>
        <groupId>org.mybatis</groupId>
        <artifactId>mybatis</artifactId>
        <version>3.5.9</version>
    </dependency>

    <dependency>
        <groupId>org.mybatis</groupId>
        <artifactId>mybatis-spring</artifactId>
        <version>2.0.7</version>
    </dependency>

    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>8.0.29</version>
    </dependency>

    <dependency>
        <groupId>com.alibaba</groupId>
        <artifactId>druid</artifactId>
        <version>1.2.9</version>
    </dependency>

    <dependency>
        <groupId>org.projectlombok</groupId>
        <artifactId>lombok</artifactId>
        <version>1.18.24</version>
    </dependency>

    <!-- servlet -->
    <dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>javax.servlet-api</artifactId>
        <version>4.0.1</version>
    </dependency>

    <!-- jackson -->
    <dependency>
        <groupId>com.fasterxml.jackson.core</groupId>
        <artifactId>jackson-databind</artifactId>
        <version>2.13.3</version>
    </dependency>

    <!-- 分页 -->
    <dependency>
        <groupId>com.github.pagehelper</groupId>
        <artifactId>pagehelper</artifactId>
        <version>5.3.0</version>
    </dependency>

    <!-- 日志 -->
    <dependency>
        <groupId>log4j</groupId>
        <artifactId>log4j</artifactId>
        <version>1.2.17</version>
    </dependency>

</dependencies>

3.配置相关properties文件

3.1关联数据库db.properties
db.username = root
db.password = 123456
db.url = jdbc:mysql:///wyy_music?serverTimezone=Asia/Shanghai&characterEncoding=UTF8
db.driverClassName = com.mysql.cj.jdbc.Driver
3.2日志log4j.properties
# Global logging configuration
log4j.rootLogger=DEBUG, stdout
# Console output...
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%5p [%t] - %m%n

4.配置web.xml

<web-app>
  <display-name>Archetype Created Web Application</display-name>

  <!-- 考虑:spring相关配置文件的加载时机
  spring配置文件的生命周期恰好和ServletContext对象的生命周期一致
  -->
  <context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>classpath:applicationContext.xml</param-value>
  </context-param>

  <!-- 用于加载applicationContext.xml -->
  <listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
  </listener>

  <!-- 前端控制器 -->
  <servlet>
    <servlet-name>dispatcherServlet</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    
    <!-- 加载springmvc.xml -->
    <init-param>
      <param-name>contextConfigLocation</param-name>
      <param-value>classpath:springmvc.xml</param-value>
    </init-param>
    
  </servlet>

  <servlet-mapping>
    <servlet-name>dispatcherServlet</servlet-name>
    <url-pattern>/</url-pattern>
  </servlet-mapping>

</web-app>

5.编写 applicationContext.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:aop="http://www.springframework.org/schema/aop"
       xmlns:tx="http://www.springframework.org/schema/tx"
       xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation="
        http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/context
        http://www.springframework.org/schema/context/spring-context.xsd
        http://www.springframework.org/schema/tx
        http://www.springframework.org/schema/tx/spring-tx.xsd
        http://www.springframework.org/schema/aop
        http://www.springframework.org/schema/aop/spring-aop.xsd"> <!-- bean definitions here -->


    <!-- 导入外部配置文件 db.properties -->
    <context:property-placeholder location="classpath:db.properties"></context:property-placeholder>

    <!-- 配置数据源对象 -->
    <bean id="datasource" class="com.alibaba.druid.pool.DruidDataSource">
        <!-- 导入 db.properties 中的值-->
        <property name="username" value="${db.username}"></property>
        <property name="password" value="${db.password}"></property>
        <property name="url" value="${db.url}"></property>
        <property name="driverClassName" value="${db.driver}"></property>
    </bean>

    <!-- 扫描对应包下的注解 -->
    <context:component-scan base-package="com.couture"></context:component-scan>

    <!-- 配置sqlSessionFactory -->
    <bean id="sqlSessionFactoryBean" class="org.mybatis.spring.SqlSessionFactoryBean">
        <!-- 必选配置 -->
        <property name="dataSource" ref="datasource"></property>
        <!-- 非必选属性,根据自己需求去配置 -->
        <!-- 导入 mybatis-config.xml -->
        <property name="configLocation" value="classpath:mybatis-config.xml"></property>
        <!-- 导入 Mapper.xml 文件,classpath后面不能有空格 -->
        <property name="mapperLocations" value="classpath:mapper/*.xml"></property>

    </bean>

    <!-- 扫描 Mapper 接口,生成代理对象 -->
    <bean id="mapperScannerConfigurer" class="org.mybatis.spring.mapper.MapperScannerConfigurer">
        <!-- 指定扫描的具体位置 -->
        <property name="basePackage" value="com.couture.mapper"></property>
    </bean>

</beans>

6.编写 springmvc.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:mvc="http://www.springframework.org/schema/mvc"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="
        http://www.springframework.org/schema/beans
        https://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/context
        https://www.springframework.org/schema/context/spring-context.xsd
        http://www.springframework.org/schema/mvc
        https://www.springframework.org/schema/mvc/spring-mvc.xsd">

    <!-- 配置springmvc中的组件
     我们用到的 映射器,适配器,解析器 这三个组件都已经帮我们创建好了
     -->
    <mvc:annotation-driven/>

    <!-- 扫描包下的注解 -->
    <context:component-scan base-package="com.couture"></context:component-scan>

    <!-- 放行静态资源 -->
    <mvc:default-servlet-handler></mvc:default-servlet-handler>

</beans>

7.编写 mybatis-config.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
        PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
    
    <!-- 配置日志 -->
    <settings>
        <setting name="logImpl" value="LOG4J"/>
    </settings>

</configuration>

8.编写实体类

Music

package com.couture.pojo;

import lombok.Data;

/**
 * CREATE TABLE `tb_music` (
 * `music_id` int(11) NOT NULL AUTO_INCREMENT, -- 歌曲ID
 * `music_name` VARCHAR(255) NOT NULL, -- 歌曲名称
 * `music_album_name` VARCHAR(255) NOT NULL, -- 专辑名称
 * `music_album_picUrl` VARCHAR(255) NOT NULL, -- 专辑图片路径
 * `music_mp3Url` VARCHAR(255) NOT NULL, -- 歌曲播放路径
 * `music_artist_name` VARCHAR(255) NOT NULL, -- 歌手名称
 * `sheet_id` int(11) DEFAULT NULL, -- 对应的歌单ID
 * PRIMARY KEY (`music_id`)
 * ) ENGINE=INNODB DEFAULT CHARSET=utf8;
 */

//歌曲
@Data
public class Music {

    private Integer musicId;
    private String musicName;
    private String musicAlbumName;
    private String musicAlbumPicurl;
    private String musicMp3url;
    private String musicArtistName;
    private Integer sheetId;

}

9.编写Mapper接口

MusicMapper

package com.couture.mapper;

import com.couture.pojo.Music;
import org.springframework.stereotype.Repository;

import java.util.List;

@Repository
public interface MusicMapper {

    /**
     * 查询所有歌曲
     * @return
     */
    public List<Music> findAll();
    
}

10.编写Mapper.xml文件

MusicMapper.xml配置文件( 注意:存放位置和applicationContext.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="com.couture.mapper.MusicMapper">

    <resultMap id="musicMap" type="com.couture.pojo.Music">
        <id property="musicId" column="music_id"></id>
        <result property="musicName" column="music_name"></result>
        <result property="musicAlbumName" column="music_album_name"></result>
        <result property="musicAlbumPicurl" column="music_album_picUrl"></result>
        <result property="musicMp3url" column="music_mp3Url"></result>
        <result property="musicArtistName" column="music_artist_name"></result>
        <result property="sheetId" column="sheet_id"></result>
    </resultMap>
    
    <!-- sql判断 -->
    <sql id="baseSql">
        select music_id,
               music_name,
               music_album_name,
               music_album_picUrl,
               music_mp3Url,
               music_artist_name,
               sheet_id
        from tb_music
    </sql>

    <!-- 查询所有歌曲 -->
    <select id="findAll" resultMap="musicMap">
        <include refid="baseSql"></include>
    </select>
    
</mapper>

11.编写 Service

MusicService接口

package com.couture.service;

import com.couture.pojo.Music;

import java.util.List;

public interface MusicService {

    /**
     * 查询所有歌曲
     * @return
     */
    public List<Music> findAll();
}

12.编写ServiceImpl

MusicServiceImpl实现类

package com.couture.service.impl;

import com.couturecouture.mapper.MusicMapper;
import com.couture.pojo.Music;
import com.couture.service.MusicService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

/**
 * Service层,业务逻辑层
 */
@Service
public class MusicServiceImpl implements MusicService {

    @Autowired
    private MusicMapper musicMapper;

    /**
     * 实现查询所有歌曲
     * @return
     */
    @Override
    public List<Music> findAll() {
        return musicMapper.findAll();
    }
}

13.编写Controller

MusicController

package com.couture.controller;

import com.couture.pojo.Music;
import com.couture.service.MusicService;
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("music")
public class MusicController {
    
    @Autowired
    private MusicService musicService;

    /**
     * 查询所有歌曲
     * @return
     */
    @RequestMapping("findAll")
    public List<Music> findAll(){
        return musicService.findAll();
    }
}

14.测试

访问:localhost:8080/music/findAll 进行测试

添加分页操作

1.导入依赖(之前已经导入过了)
<dependency>
    <groupId>com.github.pagehelper</groupId>
    <artifactId>pagehelper</artifactId>
    <version>5.1.11</version>
</dependency>
2.配置分页插件(两种方式)
2.1 第一种:在 applicationContext.xml 中添加配置
        <!-- 配置SqlSessionFactory -->
        <bean id="sqlSessionFactoryBean" class="org.mybatis.spring.SqlSessionFactoryBean">
            <!-- 必选属性,配置dataSource数据源 -->
            <property name="dataSource" ref="dataSource"></property>
            <!-- 非必选属性,可引入mybatis-config.xml配置文件 -->
            <property name="configLocation" value="classpath:mybatis-config.xml"></property>
            <!-- 非必选属性,当Mapper接口和对应的Mapper.xml文件不在同一目录时,
            可配置Mapper.xml文件的具体位置 -->
<!--            <property name="mapperLocations" value="classpath:mapper/MusicMapper.xml"></property>-->
            <property name="mapperLocations" value="classpath:mapper/*.xml"></property>

            <!-- 分页配置 -->
            <!-- 注意其他配置 -->
            <property name="plugins">
                <array>
                    <bean class="com.github.pagehelper.PageInterceptor">
                        <property name="properties">
                            <!--使用下面的方式配置参数,一行配置一个 -->
                            <value>
                                helperDialect=mysql
                                reasonable=true
                                supportMethodsArguments=true
                            </value>
                        </property>
                    </bean>
                </array>
            </property>

        </bean>
2.2 第二种:在 mybatis-config.xml 中添加配置
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
        PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>

<plugins>
    <plugin interceptor="com.github.pagehelper.PageInterceptor">
        <property name="helperDialect" value="mysql"/>
        <property name="reasonable" value="true"/>
        <property name="supportMethodsArguments" value="true"/>
    </plugin>
</plugins>

</configuration>
3.在 controller 中添加方法
@RequestMapping("findByPage")
public PageInfo findByPage(
    @RequestParam(value = "pageNum",required = false,defaultValue = "1") Integer pageNum,
    @RequestParam(value = "pageSize",required = false,defaultValue = "2") Integer pageSize){

        PageHelper.startPage(pageNum,pageSize);
        List<Music> musicList = musicService.findAll();

        PageInfo<Music> musicPageInfo = new PageInfo<>(musicList);

        return musicPageInfo;
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值