SSM框架整合
使用版本
java 1.8
spring 5.0.6.RELEASE
mybatis 3.4.5
目录结构:
Maven pom文件添加依赖
<!-- 项目编码和依赖框架版本 --> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <maven.compiler.source>1.7</maven.compiler.source> <maven.compiler.target>1.7</maven.compiler.target> <spring.version>5.0.6.RELEASE</spring.version> <mybatis.version>3.4.5</mybatis.version> </properties> <dependencies> <!-- Spring --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-jdbc</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-test</artifactId> <version>${spring.version}</version> <scope>compile</scope> </dependency> <!-- mybatis --> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>${mybatis.version}</version> </dependency> <!-- mybatis-spring --> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis-spring</artifactId> <version>1.3.0</version> </dependency> <!-- MySQL驱动 --> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.38</version> <scope>runtime</scope> </dependency> <!-- druid连接池 --> <dependency> <groupId>com.alibaba</groupId> <artifactId>druid</artifactId> <version>1.0.26</version> </dependency> <!-- JSON处理 --> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> <version>2.9.5</version> </dependency> <!-- JUnit4测试工具 --> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.12</version> <scope>compile</scope> </dependency> <!-- Servlet-API --> <dependency> <groupId>javax.servlet</groupId> <artifactId>javax.servlet-api</artifactId> <version>3.0.1</version> <scope>provided</scope> </dependency> <!-- JSTL标签库 --> <dependency> <groupId>jstl</groupId> <artifactId>jstl</artifactId> <version>1.2</version> </dependency> <!-- 日志 --> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-api</artifactId> <version>1.7.21</version> </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-log4j12</artifactId> <version>1.7.21</version> </dependency> <!-- lombok插件 --> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>1.16.6</version> <scope>compile</scope> </dependency> <!--swagger2--> <dependency> <groupId>io.springfox</groupId> <artifactId>springfox-swagger2</artifactId> <version>2.7.0</version> </dependency> <dependency> <groupId>io.springfox</groupId> <artifactId>springfox-swagger-ui</artifactId> <version>2.7.0</version> </dependency> </dependencies> <build> <plugins> <!--Java编译器插件 --> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.5.1</version> <configuration> <source>1.8</source> <target>1.8</target> <encoding>UTF-8</encoding> </configuration> </plugin> <!--Tomcat7插件 --> <plugin> <groupId>org.apache.tomcat.maven</groupId> <artifactId>tomcat7-maven-plugin</artifactId> <version>2.2</version> <configuration> <uriEncoding>UTF-8</uriEncoding> <path>/</path> <port>80</port> </configuration> </plugin> </plugins> </build>
db.properties配置
jdbc.driver=com.mysql.jdbc.Driver #数据库地址 jdbc.url=jdbc:mysql://localhost:3306/hibernate?useUnicode=true&characterEncoding=utf8&useSSL = false #用户名 jdbc.username=root #密码 jdbc.password=root
log4j.properties
# Global logging configuration
log4j.rootLogger=ERROR, stdout
# MyBatis logging configuration...
log4j.logger.cn.wolfcode.ssm.mapper=TRACE
# 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
spring-mvc.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 http://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd"> <!-- 扫描 --> <context:component-scan base-package="com.shemy"/>
<!-- Swagger2 --> <mvc:resources mapping="swagger-ui.html" location="classpath:/META-INF/resources/"/> <mvc:resources mapping="/webjars/**" location="classpath:/META-INF/resources/webjars/"/> <!-- 开启SpringMVC注解模式 --> <mvc:annotation-driven/> <!-- 静态资源默认servlet配置 --> <mvc:default-servlet-handler/> <!-- 配置jsp 显示ViewResolver --> <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/> <property name="prefix" value="/WEB-INF/"/> <property name="suffix" value=".jsp"/> </bean> <!-- 配置文件上载解析器 --> <!--<bean id="multipartResolver"--> <!--class="org.springframework.web.multipart.commons.CommonsMultipartResolver">--> <!--<!– 设置上载编码, 否则中文文件名会乱码 –>--> <!--<property name="defaultEncoding"--> <!--value="utf-8"/>--> <!--<!– one of the properties available; the maximum file size in bytes –>--> <!--<!– 最大上载总字节数 –>--> <!--<property name="maxUploadSize"--> <!--value="10000000"/>--> <!--</bean>--> </beans>
spring-mybatis.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:tx="http://www.springframework.org/schema/tx" 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"> <!-- 配置数据库相关参数properties的属性:${url} --> <context:property-placeholder location="classpath:db.properties"/> <!-- 数据库连接池 --> <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource"> <property name="driverClassName" value="${jdbc.driver}"/> <property name="url" value="${jdbc.url}"/> <property name="username" value="${jdbc.username}"/> <property name="password" value="${jdbc.password}"/> <!-- 初始化连接大小 --> <property name="initialSize" value="0" /> <!-- 连接池最大使用连接数量 --> <property name="maxActive" value="20" /> <!-- 连接池最小空闲 --> <property name="minIdle" value="0" /> <!-- 获取连接最大等待时间 --> <property name="maxWait" value="60000" /> <!-- 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒 --> <property name="timeBetweenEvictionRunsMillis" value="60000" /> <!-- 配置一个连接在池中最小生存的时间,单位是毫秒 --> <property name="minEvictableIdleTimeMillis" value="25200000" /> <!-- 打开removeAbandoned功能 --> <property name="removeAbandoned" value="true" /> <!-- 1800秒,也就是30分钟 --> <property name="removeAbandonedTimeout" value="1800" /> <!-- 关闭abanded连接时输出错误日志 --> <property name="logAbandoned" value="true" /> <!-- 监控数据库 --> <property name="filters" value="mergeStat" /> </bean> <!-- 配置SqlSessionFactory对象 --> <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> <!-- 注入数据库连接池 --> <property name="dataSource" ref="dataSource"/> <!-- 扫描entity包 使用别名 --> <property name="typeAliasesPackage" value="com.shemy.entity"/> <!-- 扫描sql配置文件:mapper需要的xml文件 --> <property name="mapperLocations" value="classpath:mapper/*Mapper.xml"/> </bean> <!--Mapper接口代理扫描器--> <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"> <!-- 注入sqlSessionFactory --> <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"/> <!-- 给出需要扫描Dao接口包 --> <property name="basePackage" value="com.shemy.mapper"/> </bean> <!-- 配置事务管理器 --> <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <!-- 注入数据库连接池 --> <property name="dataSource" ref="dataSource"/> </bean> <!-- 配置基于注解的声明式事务 --> <tx:annotation-driven/> </beans>
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_3_1.xsd" version="3.1"> <!-- 编码过滤器 --> <filter> <filter-name>encodingFilter</filter-name> <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class> <init-param> <param-name>encoding</param-name> <param-value>UTF-8</param-value> </init-param> </filter> <filter-mapping> <filter-name>encodingFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <!-- 配置DispatcherServlet --> <context-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:spring-mybatis.xml</param-value> </context-param> <!--Spring 监听器--> <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener> <listener> <listener-class>org.springframework.web.util.IntrospectorCleanupListener</listener-class> </listener> <servlet> <servlet-name>SpringMVC</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <!-- 配置springMVC需要加载的配置文件--> <init-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:spring-mvc.xml</param-value> </init-param> <load-on-startup>1</load-on-startup> <async-supported>true</async-supported> </servlet> <servlet-mapping> <servlet-name>SpringMVC</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping> </web-app>
SwaggerConfig.java
package com.shemy.config; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.web.servlet.config.annotation.EnableWebMvc; import springfox.documentation.builders.ApiInfoBuilder; import springfox.documentation.builders.RequestHandlerSelectors; import springfox.documentation.service.ApiInfo; import springfox.documentation.spi.DocumentationType; import springfox.documentation.spring.web.plugins.Docket; import springfox.documentation.swagger2.annotations.EnableSwagger2; /** * @Description Swagger2配置 * @Author Dzsom * @Date 2019-05-06 14:04 * @Encoding UTF-8 * @Version 1.0 **/ @EnableSwagger2 @Configuration @EnableWebMvc public class SwaggerConfig { @Bean public Docket docket(){ Docket docket=new Docket(DocumentationType.SWAGGER_2); ApiInfo apiInfo=new ApiInfoBuilder() .title("SSM整合") .description("SSM测试") .version("1.0.0") .build(); docket.apiInfo(apiInfo); docket.select().apis(RequestHandlerSelectors.withClassAnnotation(Api.class)).apis(RequestHandlerSelectors.withMethodAnnotation(ApiOperation.class)).build(); return docket; } }
User.java
package com.shemy.entity; import java.io.Serializable; /** * @Description 实体类 * @Author Dzsom * @Date 2019-04-03 23:17 * @Encoding UTF-8 * @Version 1.0 **/ public class User implements Serializable { private int id; private String name; private int age; public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } }
UserMapper.java
package com.shemy.mapper; import com.shemy.entity.User; import java.util.List; public interface UserMapper { int save(User user); List<User> listAll(); User findById(long id); int delete(long id); int update(User user); }
UserMapper.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"> <!-- 设置为IUserDao接口方法提供sql语句配置 --> <mapper namespace="com.shemy.mapper.UserMapper"> <!-- 结果集映射处理--> <resultMap id="BaseResultMap" type="com.shemy.entity.User"> <id column="id" property="id"/> <result column="name" property="name"/> <result column="age" property="age"/> </resultMap> <!-- 保存操作 --> <insert id="save" useGeneratedKeys="true" keyProperty="id"> INSERT INTO user (id, name, age) VALUES (null, #{name}, #{age}) </insert> <update id="update"> UPDATE user <set> <if test="name!=null and name!=''"> name=#{name}, </if> <if test="age!=null and age!=''"> age=#{age}, </if> </set> WHERE id = #{id} </update> <delete id="delete"> DELETE FROM user WHERE id = #{id} </delete> <!-- 查询多个操作 --> <select id="listAll" resultMap="BaseResultMap"> SELECT id, name, age FROM user </select> <select id="findById" resultType="com.shemy.entity.User"> SELECT * FROM user WHERE id=#{id} </select> </mapper>
UserService.java
package com.shemy.service; import com.shemy.entity.User; import java.util.List; /** * @Description Service * @Author Dzsom * @Date 2019-04-03 23:39 * @Encoding UTF-8 * @Version 1.0 **/ public interface UserService { int save(User user); List<User> listAll(); User findById(long id); int deleteById(long id); int update(User user); }
UserServiceImpl.java
package com.shemy.service.impl; import com.shemy.mapper.UserMapper; import com.shemy.entity.User; import com.shemy.service.UserService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.util.List; /** * @Description ServiceImpl * @Author Dzsom * @Date 2019-04-03 23:40 * @Encoding UTF-8 * @Version 1.0 **/ @Service("userService") public class UserServiceImpl implements UserService { @Autowired private UserMapper userMapper; @Override @Transactional public int save(User user) { return userMapper.save(user); } @Override public List<User> listAll() { return userMapper.listAll(); } @Override public User findById(long id) { return userMapper.findById(id); } @Override @Transactional public int deleteById(long id) { return userMapper.delete(id); } @Override @Transactional public int update(User user) { return userMapper.update(user); } }
Result.java
package com.shemy.utils; /** * @Description 返回数据的格式规范 * @Author Dzsom * @Date 2019-05-05 15:00 * @Encoding UTF-8 * @Version 1.0 **/ public class Result { /** * 是否成功 */ private Boolean flag; /** * 返回码 */ private Integer code; /** * 返回消息 */ private String message; /** * 返回数据 */ private Object data; public Result() { } public Result(Boolean flag, Integer code, String message) { this.flag = flag; this.code = code; this.message = message; } public Result(Boolean flag, Integer code, String message, Object data) { this.flag = flag; this.code = code; this.message = message; this.data = data; } public Boolean getFlag() { return flag; } public void setFlag(Boolean flag) { this.flag = flag; } public Integer getCode() { return code; } public void setCode(Integer code) { this.code = code; } public String getMessage() { return message; } public void setMessage(String message) { this.message = message; } public Object getData() { return data; } public void setData(Object data) { this.data = data; } }
UserController.java
package com.shemy.controller; import com.shemy.entity.User; import com.shemy.service.UserService; import com.shemy.utils.Result; import io.swagger.annotations.Api; import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiOperation; import org.springframework.web.bind.annotation.*; import javax.annotation.Resource; import java.util.List; /** * @Description 用户控制器 * @Author Dzsom * @Date 2019-04-03 23:39 * @Encoding UTF-8 * @Version 1.0 **/ @RestController @RequestMapping("/user") @Api(tags = "user",description = "用户接口") public class UserController { @Resource private UserService userService; /** * 查询全部用户 * @return Result */ @GetMapping("/list") @ApiOperation(value = "查询全部用户") public Result list() { List<User> users = userService.listAll(); return new Result(true,200,"查询成功!",users); } /** * 根据Id查询 * @param id 用户id * @return Result */ @GetMapping("/getUser") @ApiOperation(value = "根据Id查询") @ApiImplicitParam(paramType = "query", name = "id", value = "用户ID", required = true, dataType = "long") public Result findById(long id){ User user = userService.findById(id); return new Result(true,200,"查询成功!",user); } /** * 新增 * @param user * @return */ @PostMapping("/add") @ApiOperation(value = "新增") @ApiImplicitParam(paramType = "body", name = "user", value = "用户", required = true, dataType = "user") public Result save(@RequestBody User user){ int res = userService.save(user); if (res>0){ return new Result(true,200,"添加成功!"); } return new Result(false,400,"添加失败!"); } /** * 删除 * @param id * @return */ @DeleteMapping("/delete") @ApiOperation(value = "根据Id删除") @ApiImplicitParam(paramType = "query", name = "id", value = "用户ID", required = true, dataType = "long") public Result delete(long id){ int res=userService.deleteById(id); if (res>0){ return new Result(true,200,"删除成功!"); } return new Result(false,400,"删除失败!"); } /** * 更新 * @param user * @return */ @PutMapping("/update") @ApiOperation(value = "更新") @ApiImplicitParam(paramType = "body", name = "user", value = "用户", required = true, dataType = "user") public Result update(@RequestBody User user){ int res=userService.update(user); if (res>0){ return new Result(true,200,"更新成功!"); } return new Result(false,400,"更新失败!"); } }
关注微信公众号:梦瀚天腾
回复java面试,获取java面试大全宝典
一个满怀梦想的无知骚年!