接上篇http://blog.csdn.net/hcmony/article/details/77854948
1,pom.xml
<?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.hcmony</groupId> <artifactId>springboot-demo</artifactId> <version>0.0.1-SNAPSHOT</version> <packaging>jar</packaging> <name>springboot-demo</name> <description>Demo project for Spring Boot</description> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>1.5.6.RELEASE</version> <relativePath/> <!-- lookup parent from repository --> </parent> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> <java.version>1.8</java.version> </properties> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>1.2.0</version> </dependency> <!--<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-log4j</artifactId> </dependency>--> <!-- 导入Mysql数据库链接jar包 --> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.36</version> </dependency> <!-- 导入dbcp2的jar包,用来在applicationContext.xml中配置数据库 --> <dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-dbcp2</artifactId> <version>2.1.1</version> </dependency> <dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> <version>1.2.17</version> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> </project>
2,application-hcmony.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:context="http://www.springframework.org/schema/context" xmlns:jee="http://www.springframework.org/schema/jee" xmlns:lang="http://www.springframework.org/schema/lang" xmlns:tx="http://www.springframework.org/schema/tx" xmlns:util="http://www.springframework.org/schema/util" xmlns:p="http://www.springframework.org/schema/p" xmlns:task="http://www.springframework.org/schema/task" 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/aop http://www.springframework.org/schema/aop/spring-aop.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.xsd http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee.xsd http://www.çspringframework.org/schema/lang http://www.springframework.org/schema/lang/spring-lang.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd http://www.springframework.org/schema/task http://www.springframework.org/schema/task/spring-task-4.0.xsd http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util.xsd" default-autowire="byName" default-lazy-init="false"> <context:annotation-config/> <context:component-scan base-package="com.hcmony"/> <bean id="ds" class="org.apache.commons.dbcp2.BasicDataSource" destroy-method="close"> <property name="driverClassName" value="com.mysql.jdbc.Driver"/> <property name="url" value="jdbc:mysql://localhost:3306/hcmony?characterEncoding=utf8"/> <!-- 数据库用户名 --> <property name="username" value="root"/> <!-- 密码 --> <property name="password" value="root"/> <!-- 连接初始值,连接池启动时创建的连接数量的初始值 --> <property name="initialSize" value="10"/> <!-- 最大空闲值.当经过一个高峰时间后, 连接池可以慢慢将已经用不到的连接慢慢释放一部分, 一直减少到maxIdle为止 ,0时无限制 --> <property name="maxIdle" value="50"/> <!-- 连接池的最大值,同一时间可以从池分配的最多连接数量,0时无限制 --> <property name="maxTotal" value="50"/> <!-- 最大等待时间 单位为毫秒--> <property name="maxWaitMillis" value="10000"/> <!-- 自动提交 --> <property name="defaultAutoCommit" value="false"/> <!-- 失效检查线程运行时间间隔,如果小于等于0,不会启动检查线程 --> <property name="timeBetweenEvictionRunsMillis" value="3600000"/> <!-- 大于0 ,进行连接空闲时间判断,或为0,对空闲的连接不进行验证;默认30分钟 --> <property name="minEvictableIdleTimeMillis" value="3600000"/> <!-- 是否自我中断, 默认是 false --> <property name="removeAbandonedOnMaintenance" value="true"/> <!-- 几秒后会自我中断, removeAbandoned 必须为 true --> <property name="removeAbandonedTimeout" value="10"/> <!-- 是否记录中断事件, 默认为 false --> <property name="logAbandoned" value="true"/> </bean> <!-- sqlsession工厂配置 --> <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> <property name="dataSource" ref="ds"/> <property name="configLocation" value="classpath:mybatis-config.xml"/> </bean> <tx:annotation-driven/> <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <property name="dataSource" ref="ds"/> <property name="rollbackOnCommitFailure" value="true"/> </bean> <tx:annotation-driven transaction-manager="transactionManager" proxy-target-class="true" /> </beans>
3,log4j.properties
log4j.rootLogger=INFO,Console,File #控制台日志 log4j.appender.Console=org.apache.log4j.ConsoleAppender log4j.appender.Console.Target=System.out log4j.appender.Console.layout=org.apache.log4j.PatternLayout log4j.appender.Console.layout.ConversionPattern=[%p][%t][%d{yyyy-MM-dd HH\:mm\:ss}][%C] - %m%n #普通文件日志,文件大小到达指定尺寸的时候产生一个新的文件 log4j.appender.File=org.apache.log4j.RollingFileAppender #指定输出目录 log4j.appender.File.File=logs/hcmony.log #定义文件最大大小 log4j.appender.File.MaxFileSize=10MB #输出日志,如果换成DEBUG表示输出DEBUG以上级别日志 log4j.appender.File.Threshold=ALL log4j.appender.File.layout=org.apache.log4j.PatternLayout log4j.appender.File.layout.ConversionPattern=[%p][%t][%d{yyyy-MM-dd HH\:mm\:ss}][%C] - %m%n #设置编码 log4j.appender.LOGFILE.encoding=UTF-8
4,application.properties
server.port=8081
5,SpringbootDemoApplication
package com.hcmony; import org.mybatis.spring.annotation.MapperScan; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.context.annotation.ImportResource; @MapperScan(basePackages = "com/hcmony/mapper") @ImportResource({"classpath:application-hcmony.xml"}) @SpringBootApplication public class SpringbootDemoApplication { public static void main(String[] args) { SpringApplication.run(SpringbootDemoApplication.class, args); } }
6,UserController
package com.hcmony.controller; import com.hcmony.model.User; import com.hcmony.service.UserService; import com.hcmony.utils.CodeIdEnum; import com.hcmony.utils.ResponseData; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; /** * Created by hcmony on 2017/9/1. */ @RestController @RequestMapping("/user") public class UserController { @Autowired private UserService userService; @RequestMapping("/findUser") public ResponseData findUser(Integer id){ System.out.println("-----------------"); User user = userService.findUser(id); System.out.println("user的id是:"+user.getId()); System.out.println("user的名字是:"+user.getName()); return new ResponseData(CodeIdEnum.Success,user); } @RequestMapping("/saveUser") public void saveUser(User user) throws Exception{ System.out.println("-----------------"); Integer num = userService.saveUser(user); if(num!=null&&num>0){ System.out.println("保存成功了!"); }else { System.out.println("保存失败了!"); } } }
7,UserMapper
package com.hcmony.mapper; import com.hcmony.model.User; /** * Created by hcmony on 2017/9/1. */ public interface UserMapper { public Integer save(User user); public User findById(Integer id); }
8,UserService
package com.hcmony.service; import com.hcmony.model.User; /** * Created by hcmony on 2017/9/1. */ public interface UserService { public Integer saveUser(User user)throws Exception; public User findUser(Integer id); }
9,UserServiceImpl
package com.hcmony.service.impl; import com.hcmony.mapper.UserMapper; import com.hcmony.model.User; import com.hcmony.service.UserService; import com.hcmony.utils.ExceptionRuntime; import org.apache.log4j.Logger; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Propagation; import org.springframework.transaction.annotation.Transactional; /** * Created by hcmony on 2017/9/1. */ @Service public class UserServiceImpl implements UserService { private static Logger logger = Logger.getLogger(UserService.class); @Autowired private UserMapper userMapper; @Autowired private UserImpl userImpl; @Transactional(propagation = Propagation.REQUIRED) @Override public Integer saveUser(User user) throws Exception{ try { logger.info("保存用户:"+user.getName()); Integer num = userMapper.save(user); user.setName("失败前的"+user.getName()); System.out.println("saveUser--------------"); return num; }catch(RuntimeException e) { logger.error("保存用户失败"); throw new ExceptionRuntime(); }catch(Exception e){ logger.error("保存用户失败"); throw new Exception(); } } @Override public User findUser(Integer id) { try { return userMapper.findById(id); }catch (Exception e){ logger.error("查询用户失败",e); } return null; } }
10,User
package com.hcmony.model; /** * Created by hcmony on 2017/9/1. */ public class User { private Integer id; private String name; public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } }
11,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" > <mapper namespace="com.hcmony.mapper.UserMapper" > <resultMap id="resultMap" type="com.hcmony.model.User" > <constructor > <idArg column="id" jdbcType="INTEGER" javaType="java.lang.Integer" /> <arg column="name" jdbcType="VARCHAR" javaType="java.lang.String" /> </constructor> </resultMap> <sql id="sql" > id, name </sql> <select id="findById" resultType="com.hcmony.model.User" parameterType="java.lang.Integer" > select <include refid="sql" /> from user where id = #{id} </select> <insert id="save" parameterType="com.hcmony.model.User"> insert into user (id, name) values (#{id}, #{name}) </insert> </mapper>