SSM分模块整合
测试表如下
create table tb_music
(
music_id varchar(255) not null primary key,
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
)
charset = utf8;
1、创建父工程 music-parent , 打包方式为Pom
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.lxn</groupId>
<artifactId>music-parent</artifactId>
<version>1.0.0-SNAPSHOT</version>
<modules>
<module>music-dao</module>
<module>music-service</module>
<module>music-web</module>
</modules>
<packaging>pom</packaging>
</project>
2、创建子工程music-dao,打包方式为jar
2.1 导入pom.xml
<dependencies>
<!-- spring -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.2.4.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>5.2.4.RELEASE</version>
</dependency>
<!-- mybatis -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.4</version>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>2.0.4</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.19</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.1.19</version>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.12</version>
</dependency>
<!-- 分頁插件 pagehelper -->
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper</artifactId>
<version>5.1.11</version>
</dependency>
</dependencies>
2.2 编写实体类
package com.lxn.pojo;
import lombok.Data;
@Data
public class Music {
private String music_id;
private String music_name;
private String music_album_name;
private String music_album_picUrl;
private String music_mp3Url;
private String music_artist_name;
private Integer sheet_id;
}
2.3 编写Mapper
package com.lxn.dao;
import com.lxn.pojo.Music;
import org.springframework.stereotype.Repository;
import java.util.List;
@Repository
public interface MusicMapper {
List<Music> findAll ();
List<Music> findByPage ();
}
2.4编写Mapper.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.lxn.dao.MusicMapper">
<select id="findAll" resultType="com.lxn.pojo.Music">
select * from tb_music
</select>
<select id="findByPage" resultType="com.lxn.pojo.Music">
select * from tb_music
</select>
</mapper>
2.5 编写 jdbc.properties
jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql:///数据库名称?serverTimezone=Asia/Shanghai
jdbc.username=数据库用户名
jdbc.password=数据库密码
2.6 编写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: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 https://www.springframework.org/schema/context/spring-context.xsd">
<!--扫描注解-->
<context:component-scan base-package="com.lxn"/>
<!-- 引入properties文件-->
<context:property-placeholder location="jdbc.properties"/>
<!-- 配置 读取 properties 文件 jdbc.properties-->
<bean name="dataSource" class="com.alibaba.druid.pool.DruidDataSource">
<property name="username" value="${jdbc.username}"/>
<property name="password" value="${jdbc.password}"/>
<property name="url" value="${jdbc.url}"/>
<property name="driverClassName" value="${jdbc.driver}"/>
</bean>
<!-- 配置sqlSessionFactory -->
<bean id="sessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource"/>
<property name="mapperLocations" value="classpath:com/lxn/dao/*.xml"/>
<property name="plugins">
<set>
<bean class="com.github.pagehelper.PageInterceptor">
<property name="properties">
<props>
<!-- 数据库方言,可选择:oracle,mysql,mariadb 等-->
<prop key="helperDialect">mysql</prop>
<!--reasonable:分页合理化参数,默认值:false。
当该参数设置为true时,pageNum<=0时会查询第一页,
pageNum>pages(超过总数时),会查询最后一页-->
<prop key="reasonable">true</prop>
<!--supportMethodsArguments:
是否支持通过 Mapper 接口参数来传递分页参数,默认值:false-->
<prop key="supportMethodsArguments">true</prop>
</props>
</property>
</bean>
</set>
</property>
</bean>
<!-- 配置Mapper扫描-->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="basePackage" value="com.lxn.dao"/>
</bean>
</beans>
3、创建子工程music-service ,打包方式为Jar
3.1 导入maven
<dependencies>
<dependency>
<groupId>com.lxn</groupId>
<artifactId>music-dao</artifactId>
<version>1.0.0-SNAPSHOT</version>
</dependency>
</dependencies>
3.2 编写 service 接口
package com.lxn.service;
import com.lxn.pojo.Music;
import java.util.List;
public interface MusicService {
List<Music> findAll();
List<Music> findByPage();
}
3.3 编写 service 实现类
package com.lxn.service.impl;
import com.lxn.dao.MusicMapper;
import com.lxn.pojo.Music;
import com.lxn.service.MusicService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
@Service
public class MusicServiceImpl implements MusicService {
@Autowired
private MusicMapper musicMapper;
public List<Music> findAll() {
return musicMapper.findAll();
}
public List<Music> findByPage() {
return musicMapper.findByPage();
}
}
4、创建子工程music-web , 打包方式为war
4.1 导入maven坐标
<dependencies>
<dependency>
<groupId>com.lxn</groupId>
<artifactId>music-service</artifactId>
<version>1.0.0-SNAPSHOT</version>
</dependency>
<!-- springmvc -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>5.2.4.RELEASE</version>
</dependency>
<!-- servlet -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<version>2.5</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jsp-api</artifactId>
<version>2.0</version>
<scope>provided</scope>
</dependency>
<!-- jackson -->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.10.3</version>
</dependency>
<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.4.RELEASE</version>
</dependency>
</dependencies>
4.2 配置springmvc.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:context="http://www.springframework.org/schema/context"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://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">
<context:component-scan base-package="com.lxn"/>
<mvc:annotation-driven/>
<bean id="resourceViewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
</bean>
</beans>
4.3 配置 web.xml文件
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
version="4.0">
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:applicationContext.xml</param-value>
</context-param>
<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>
<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>
4.4 创建控制器controller
package com.lxn.controller;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.lxn.pojo.Music;
import com.lxn.service.MusicService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
@RestController
@RequestMapping ("music")
public class MusicController {
private final MusicService musicService;
@Autowired
public MusicController (MusicService musicService) {
this.musicService = musicService;
}
@RequestMapping("music/findAll")
public List<Music> findAll(){
return musicService.findAll();
}
@RequestMapping("music/findByPage")
public PageInfo findByPage(@RequestParam(required = false,defaultValue = "1") Integer pageNum,
@RequestParam(required = false,defaultValue = "2") Integer pageSize){
PageHelper.startPage(pageNum,pageSize);
List<Music> list=musicService.findByPage();
return new PageInfo(list);
}
}
5、测试
在web层测试
package com.lxn.test;
import com.lxn.controller.MusicController;
import com.lxn.dao.MusicMapper;
import com.lxn.service.MusicService;
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({"classpath:applicationContext.xml","classpath:springmvc.xml"})
public class MusicControllerTest {
@Autowired
private MusicController musicController;
@Autowired
private MusicService musicService;
@Autowired
private MusicMapper musicMapper;
@Test
public void testFindAll(){
// musicController.findAll();
// System.out.println(musicMapper.findAll());
// System.out.println(musicService.findAll());
}
}