很遗憾原生的https://start.spring.io已经不在支持java8了,但对于开发人员来说,升级java版本意味着之前的项目也面临升级改造,无疑是很痛苦的。
所以这里使用了阿里的https://start.aliyun.com,但需要先安装阿里的插件alibaba-cloud-toolkit

安装后重启idea






修改本地Maven仓库地址
File->seting:

Maven执行结束后项目结构如下

需要进行一下改造:

顺便把框架用到的包添加进来:直接给出我完整的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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.my</groupId>
<artifactId>tst</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>tst</name>
<description>Demo project for Spring Boot</description>
<properties>
<java.version>1.8</java.version>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<spring-boot.version>2.7.6</spring-boot.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jdbc</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>2.3.0</version>
</dependency>
<dependency>
<groupId>com.microsoft.sqlserver</groupId>
<artifactId>mssql-jdbc</artifactId>
<version>6.4.0.jre8</version>
<!-- <scope>runtime</scope>-->
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<!-- add-begin-->
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>3.15-beta2</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>3.15-beta2</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml-schemas</artifactId>
<version>3.15-beta2</version>
<type>jar</type>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-scratchpad</artifactId>
<version>3.0.2-FINAL</version>
</dependency>
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.8.0</version>
</dependency>
<dependency>
<groupId>com.belerweb</groupId>
<artifactId>pinyin4j</artifactId>
<version>2.5.0</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.25</version>
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>1.2.3</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.54</version>
</dependency>
<dependency>
<groupId>net.sf.json-lib</groupId>
<artifactId>json-lib</artifactId>
<version>2.4</version>
<classifier>jdk15</classifier>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.0.26</version>
<!-- <scope>provided</scope>-->
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>1.1.10</version>
</dependency>
<dependency>
<groupId>com.squareup.okhttp3</groupId>
<artifactId>okhttp</artifactId>
<version>4.9.0</version>
</dependency>
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
<version>4.5.2</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-autoconfigure</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>
<!-- add-end-->
</dependencies>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>${spring-boot.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.1</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<version>${spring-boot.version}</version>
<configuration>
<mainClass>com.my.tst.TstApplication</mainClass>
<skip>true</skip>
</configuration>
<executions>
<execution>
<id>repackage</id>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
<!--将resources下的文件包含到资源中-->
<resources>
<resource>
<directory>src/main/resources</directory>
</resource>
</resources>
</build>
</project>
接下来对目录结构进行一些调整,习惯上使用yml代替了原来的properties,添加了log相关的xml配置,mapper存放数据库映射xml文件,static存放一些js、css等静态文件,templates存放html视图文件。MasterDataSourceConfig是数据库连接池的设置,dao、entity、mapper是mybatis数据库的映射文件。
log4j.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE log4j:configuration SYSTEM
"http://logging.apache.org/log4j/1.2/apidocs/org/apache/log4j/xml/doc-files/log4j.dtd">
<log4j:configuration debug="false" >
<appender name="myConsole" class="org.apache.log4j.ConsoleAppender">
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="[%d{dd HH:mm:ss,SSS\} %-5p] [%t] %c{2\} - %m%n"/>
</layout>
<!--过滤器设置输出的级别-->
<filter class="org.apache.log4j.varia.LevelRangeFilter">
<param name="levelMin" value="debug" />
<param name="levelMax" value="warn" />
<param name="AcceptOnMatch" value="true" />
</filter>
</appender>
<appender name="myFile" class="org.apache.log4j.RollingFileAppender">
<param name="File" value="D:/dubbo/logs/provider/rollingLog/dubbo.log" /><!-- 设置日志输出文件名 -->
<!-- 设置是否在重新启动服务时,在原有日志的基础添加新日志 -->
<param name="Append" value="true" />
<param name="MaxFileSize" value="10MB" />
<param name="MaxBackupIndex" value="10" />
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%p (%c:%L)- %m%n" />
</layout>
</appender>
<appender name="activexAppender" class="org.apache.log4j.DailyRollingFileAppender">
<param name="File" value="D:/dubbo/logs/provider/dailyLog/dubbo.log" />
<param name="DatePattern" value="'.'yyyy-MM-dd'.log'" />
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="[%d{MMdd HH:mm:ss SSS\} %-5p] [%t] %c{3\} - %m%n" />
</layout>
</appender>
<!-- 指定logger的设置,additivity指示是否遵循缺省的继承机制-->
<logger name="com.runway.bssp.activeXdemo" additivity="false">
<appender-ref ref="activexAppender" />
</logger>
<!-- 根logger的设置-->
<root>
<priority value ="debug"/>
<appender-ref ref="myConsole"/>
<appender-ref ref="myFile"/>
</root>
</log4j:configuration>
logback-spring.xml
<?xml version="1.0" encoding="UTF-8"?>
<!-- 日志级别从低到高分为TRACE < DEBUG < INFO < WARN < ERROR < FATAL,如果设置为WARN,则低于WARN的信息都不会输出 -->
<!-- scan:当此属性设置为true时,配置文件如果发生改变,将会被重新加载,默认值为true -->
<!-- scanPeriod:设置监测配置文件是否有修改的时间间隔,如果没有给出时间单位,默认单位是毫秒。当scan为true时,此属性生效。默认的时间间隔为1分钟。 -->
<!-- debug:当此属性设置为true时,将打印出logback内部日志信息,实时查看logback运行状态。默认值为false。 -->
<configuration scan="true" scanPeriod="10 seconds">
<!--<include resource="org/springframework/boot/logging/logback/base.xml" />-->
<contextName>logback</contextName>
<!-- name的值是变量的名称,value的值时变量定义的值。通过定义的值会被插入到logger上下文中。定义变量后,可以使“${}”来使用变量。 -->
<property name="log.path" value="logs" />
<!-- 彩色日志 -->
<!-- 彩色日志依赖的渲染类 -->
<conversionRule conversionWord="clr" converterClass="org.springframework.boot.logging.logback.ColorConverter" />
<conversionRule conversionWord="wex" converterClass="org.springframework.boot.logging.logback.WhitespaceThrowableProxyConverter" />
<conversionRule conversionWord="wEx" converterClass="org.springframework.boot.logging.logback.ExtendedWhitespaceThrowableProxyConverter" />
<!-- 彩色日志格式 -->
<property name="CONSOLE_LOG_PATTERN" value="${CONSOLE_LOG_PATTERN:-%clr(%d{yyyy-MM-dd HH:mm:ss.SSS}){faint} %clr(${LOG_LEVEL_PATTERN:-%5p}) %clr(${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}}"/>
<!--输出到控制台-->
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
<!--此日志appender是为开发使用,只配置最底级别,控制台输出的日志级别是大于或等于此级别的日志信息-->
<encoder>
<pattern>${CONSOLE_LOG_PATTERN}</pattern>
<!-- 设置字符集 -->
<charset>UTF-8</charset>
</encoder>
</appender>
<!--输出到文件-->
<!-- 时间滚动输出 level为 DEBUG 日志 -->
<appender name="DEBUG_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<!-- 正在记录的日志文件的路径及文件名 -->
<file>${log.path}/log_debug.log</file>
<!--日志文件输出格式-->
<encoder>
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
<charset>UTF-8</charset> <!-- 设置字符集 -->
</encoder>
<!-- 日志记录器的滚动策略,按日期,按大小记录 -->
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!-- 日志归档 -->
<fileNamePattern>${log.path}/debug/log-debug-%d{yyyy-MM-dd}.%i.log</fileNamePattern>
<timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<maxFileSize>100MB</maxFileSize>
</timeBasedFileNamingAndTriggeringPolicy>
<!--日志文件保留天数-->
<maxHistory>7</maxHistory>
</rollingPolicy>
<!-- 此日志文件只记录debug级别的 -->
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>debug</level>
<onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch>
</filter>
</appender>
<!-- 时间滚动输出 level为 INFO 日志 -->
<appender name="INFO_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<!-- 正在记录的日志文件的路径及文件名 -->
<file>${log.path}/log_info.log</file>
<!--日志文件输出格式-->
<encoder>
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
<charset>UTF-8</charset>
</encoder>
<!-- 日志记录器的滚动策略,按日期,按大小记录 -->
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!-- 每天日志归档路径以及格式 -->
<fileNamePattern>${log.path}/info/log-info-%d{yyyy-MM-dd}.%i.log</fileNamePattern>
<timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<maxFileSize>100MB</maxFileSize>
</timeBasedFileNamingAndTriggeringPolicy>
<!--日志文件保留天数-->
<maxHistory>7</maxHistory>
</rollingPolicy>
<!-- 此日志文件只记录info级别的 -->
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>info</level>
<onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch>
</filter>
</appender>
<!-- 时间滚动输出 level为 WARN 日志 -->
<appender name="WARN_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<!-- 正在记录的日志文件的路径及文件名 -->
<file>${log.path}/log_warn.log</file>
<!--日志文件输出格式-->
<encoder>
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
<charset>UTF-8</charset> <!-- 此处设置字符集 -->
</encoder>
<!-- 日志记录器的滚动策略,按日期,按大小记录 -->
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>${log.path}/warn/log-warn-%d{yyyy-MM-dd}.%i.log</fileNamePattern>
<timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<maxFileSize>100MB</maxFileSize>
</timeBasedFileNamingAndTriggeringPolicy>
<!--日志文件保留天数-->
<maxHistory>7</maxHistory>
</rollingPolicy>
<!-- 此日志文件只记录warn级别的 -->
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>warn</level>
<onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch>
</filter>
</appender>
<!-- 时间滚动输出 level为 ERROR 日志 -->
<appender name="ERROR_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<!-- 正在记录的日志文件的路径及文件名 -->
<file>${log.path}/log_error.log</file>
<!--日志文件输出格式-->
<encoder>
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
<charset>UTF-8</charset> <!-- 此处设置字符集 -->
</encoder>
<!-- 日志记录器的滚动策略,按日期,按大小记录 -->
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>${log.path}/error/log-error-%d{yyyy-MM-dd}.%i.log</fileNamePattern>
<timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<maxFileSize>100MB</maxFileSize>
</timeBasedFileNamingAndTriggeringPolicy>
<!--日志文件保留天数-->
<maxHistory>7</maxHistory>
</rollingPolicy>
<!-- 此日志文件只记录ERROR级别的 -->
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>ERROR</level>
<onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch>
</filter>
</appender>
<!--
<logger>用来设置某一个包或者具体的某一个类的日志打印级别、
以及指定<appender>。<logger>仅有一个name属性,
一个可选的level和一个可选的addtivity属性。
name:用来指定受此logger约束的某一个包或者具体的某一个类。
level:用来设置打印级别,大小写无关:TRACE, DEBUG, INFO, WARN, ERROR, ALL 和 OFF,
还有一个特俗值INHERITED或者同义词NULL,代表强制执行上级的级别。
如果未设置此属性,那么当前logger将会继承上级的级别。
addtivity:是否向上级logger传递打印信息。默认是true。
-->
<!--<logger name="org.springframework.web" level="info"/>-->
<!--<logger name="org.springframework.scheduling.annotation.ScheduledAnnotationBeanPostProcessor" level="INFO"/>-->
<!--
使用mybatis的时候,sql语句是debug下才会打印,而这里我们只配置了info,所以想要查看sql语句的话,有以下两种操作:
第一种把<root level="info">改成<root level="DEBUG">这样就会打印sql,不过这样日志那边会出现很多其他消息
第二种就是单独给dao下目录配置debug模式,代码如下,这样配置sql语句会打印,其他还是正常info级别:
-->
<!--
root节点是必选节点,用来指定最基础的日志输出级别,只有一个level属性
level:用来设置打印级别,大小写无关:TRACE, DEBUG, INFO, WARN, ERROR, ALL 和 OFF,
不能设置为INHERITED或者同义词NULL。默认是DEBUG
可以包含零个或多个元素,标识这个appender将会添加到这个logger。
-->
<!-- 异步输出 -->
<appender name="INFO_FILE_QUEUE" class="ch.qos.logback.classic.AsyncAppender">
<discardingThreshold>0</discardingThreshold>
<queueSize>1024</queueSize>
<appender-ref ref="INFO_FILE" />
</appender>
<!--开发环境:打印控制台-->
<springProfile name="dev">
<logger name="org.springframework" level="info"/>
<logger name="springfox.documentation" level="info"/>
<logger name="druid.sql" level="info"/>
<logger name="io.netty" level="info"/>
<logger name="org.hibernate" level="info"/>
<logger name="io.lettuce" level="info"/>
<logger name="org.apache.commons" level="info"/>
<root level="debug">
<appender-ref ref="CONSOLE" />
<appender-ref ref="DEBUG_FILE" />
<appender-ref ref="INFO_FILE" />
<appender-ref ref="WARN_FILE" />
<appender-ref ref="ERROR_FILE" />
</root>
</springProfile>
<!--Test环境:输出到文件-->
<springProfile name="test">
<root level="info">
<appender-ref ref="CONSOLE" />
<appender-ref ref="DEBUG_FILE" />
<appender-ref ref="INFO_FILE" />
<appender-ref ref="ERROR_FILE" />
<appender-ref ref="WARN_FILE" />
</root>
</springProfile>
<!--生产环境:输出到文件-->
<springProfile name="prod">
<root level="info">
<appender-ref ref="CONSOLE" />
<appender-ref ref="DEBUG_FILE" />
<appender-ref ref="INFO_FILE" />
<appender-ref ref="ERROR_FILE" />
<appender-ref ref="WARN_FILE" />
</root>
</springProfile>
</configuration>
application.yml
# 公共配置,一般不需要修改
server:
port: 81
undertow:
# 设置IO线程数, 它主要执行非阻塞的任务,它们会负责多个连接, 默认设置每个CPU核心一个线程
# 不要设置过大,如果过大,启动项目会报错:打开文件数过多
io-threads: 4
# 阻塞任务线程池, 当执行类似servlet请求阻塞操作, undertow会从这个线程池中取得线程
# 它的值设置取决于系统线程执行任务的阻塞系数,默认值是IO线程数*8
worker-threads: 32
# 以下的配置会影响buffer,这些buffer会用于服务器连接的IO操作,有点类似netty的池化内存管理
# 每块buffer的空间大小,越小的空间被利用越充分
buffer-size: 1024
# 是否分配的直接内存(NIO直接分配的堆外内存)
direct-buffers: true
spring:
application:
name: tst
profiles:
active: dev
thymeleaf:
prefix: classpath:/templates/
mode: HTML
cache: false
encoding: UTF-8
servlet:
content-type: text/html
servlet:
multipart:
max-file-size: -1
max-request-size: -1
logging:
config: classpath:logback-spring.xml
application-dev.yml
server:
port: 8088
master:
datasource:
url: jdbc:sqlserver://localhost:1433; DatabaseName=YLAdm
driver-class-name: com.microsoft.sqlserver.jdbc.SQLServerDriver
username: sa
password: 123
druid:
enable: true
async-init: true # 异步初始化连接
validation-query: SELECT 1 # 检查存活SQL,心跳检测语句
test-while-idle: true # 开启心跳检测
test-on-borrow: false
test-on-return: false
pool-prepared-statements: true
time-between-eviction-runs-millis: 60000 # 心跳检测时间
max-wait: 60000 # 60秒
web-stat-filter:
enabled: false # 关闭状态监控
USERSDao.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.my.tst.dao.USERSDao">
<insert id="add" parameterType="com.my.tst.entity.USERS">
insert into USERS(ACCOUNT,PASSWORD,NAME,SEX,TEL,QQ,EMAIL,IDCARD,STUT,ADDTIME,MONEY,PHOTOPATH,ID,TIP,DEPARTID) values(#{ACCOUNT},#{PASSWORD},#{NAME},#{SEX},#{TEL},#{QQ},#{EMAIL},#{IDCARD},#{STUT},#{ADDTIME},#{MONEY},#{PHOTOPATH},#{ID},#{TIP},#{DEPARTID})
</insert>
<delete id="delete" parameterType="String">
delete FROM USERS WHERE ID = #{ID}
</delete>
<select id="getMod" resultType="com.my.tst.entity.USERS" parameterType="String">
SELECT * FROM [USERS] WHERE [ID] = #{ID}
</select>
<update id="update" parameterType="com.my.tst.entity.USERS">
update USERS set ACCOUNT=#{ACCOUNT},PASSWORD=#{PASSWORD},NAME=#{NAME},SEX=#{SEX},TEL=#{TEL},QQ=#{QQ},EMAIL=#{EMAIL},IDCARD=#{IDCARD},STUT=#{STUT},ADDTIME=#{ADDTIME},MONEY=#{MONEY},PHOTOPATH=#{PHOTOPATH},TIP=#{TIP},DEPARTID=#{DEPARTID} WHERE ID = #{ID}
</update>
<select id="getModBySql" resultType="com.my.tst.entity.USERS" parameterType="String">
${_parameter}
</select>
<select id="getListBySql" resultType="com.my.tst.entity.USERS" parameterType="String">
${_parameter}
</select>
<select id="getCountBySql" resultType="int" parameterType="String">
${_parameter}
</select>
</mapper>
USERSDao.java
package com.my.tst.dao;
import com.my.tst.entity.USERS;
import org.apache.ibatis.annotations.Param;
import java.util.List;
public interface USERSDao {
int add(USERS m);
int delete(String v);
USERS getMod(String v);
int update(USERS m);
USERS getModBySql(String sql);
List<USERS> getListBySql(String sql);
int getCountBySql(String sql);
}
USERS.java
package com.my.tst.entity;
import org.springframework.format.annotation.DateTimeFormat;
import java.math.BigDecimal;
import java.util.Date;
public class USERS {
private String ACCOUNT;
public String getACCOUNT(){return this.ACCOUNT;}
public void setACCOUNT(String ACCOUNT){this.ACCOUNT=ACCOUNT;}
private String PASSWORD;
public String getPASSWORD(){return this.PASSWORD;}
public void setPASSWORD(String PASSWORD){this.PASSWORD=PASSWORD;}
private String NAME;
public String getNAME(){return this.NAME;}
public void setNAME(String NAME){this.NAME=NAME;}
private String TEL;
public String getTEL(){return this.TEL;}
public void setTEL(String TEL){this.TEL=TEL;}
private String QQ;
public String getQQ(){return this.QQ;}
public void setQQ(String QQ){this.QQ=QQ;}
private String EMAIL;
public String getEMAIL(){return this.EMAIL;}
public void setEMAIL(String EMAIL){this.EMAIL=EMAIL;}
private String IDCARD;
public String getIDCARD(){return this.IDCARD;}
public void setIDCARD(String IDCARD){this.IDCARD=IDCARD;}
private int STUT;
public int getSTUT(){return this.STUT;}
public void setSTUT(int STUT){this.STUT=STUT;}
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date ADDTIME;
public Date getADDTIME(){return this.ADDTIME;}
public void setADDTIME(Date ADDTIME){this.ADDTIME=ADDTIME;}
private BigDecimal MONEY;
public BigDecimal getMONEY(){return this.MONEY;}
public void setMONEY(BigDecimal MONEY){this.MONEY=MONEY;}
private String PHOTOPATH;
public String getPHOTOPATH(){return this.PHOTOPATH;}
public void setPHOTOPATH(String PHOTOPATH){this.PHOTOPATH=PHOTOPATH;}
private String ID;
public String getID(){return this.ID;}
public void setID(String ID){this.ID=ID;}
private String TIP;
public String getTIP(){return this.TIP;}
public void setTIP(String TIP){this.TIP=TIP;}
private String DEPARTID;
public String getDEPARTID(){return this.DEPARTID;}
public void setDEPARTID(String DEPARTID){this.DEPARTID=DEPARTID;}
public USERS (){}
}
USERSSrv.java
package com.my.tst.service;
import com.my.tst.dao.USERSDao;
import com.my.tst.entity.USERS;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
@Service
public class USERSSrv extends BaseSrv {
@Autowired
private USERSDao usersDao;
public int add(USERS m){return usersDao.add(m);}
public int delete(String v){return usersDao.delete(v);}
public USERS getMod(String v){return usersDao.getMod(v);}
public int update(USERS m){return usersDao.update(m);}
public USERS getModBySql(String sql){return usersDao.getModBySql(sql);}
public List<USERS> getListBySql(String sql){return usersDao.getListBySql(sql);}
public int getCountBySql(String sql){return usersDao.getCountBySql(sql);}
public List<USERS> getListBySqlPage(String sql,int page,int pageSize){
List<USERS> r=usersDao.getListBySql(sql);
int pged = page*pageSize;
if(pged>r.size()){pged = r.size();}
return r.subList((page-1)*pageSize,pged);
}
}
BaseSrv.java
package com.my.tst.service;
public class BaseSrv {
}
MasterDataSourceConfig.java
package com.my.tst.Cfg;
import com.alibaba.druid.pool.DruidDataSource;
import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.SqlSessionFactoryBean;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;
import javax.sql.DataSource;
@Configuration
// 扫描 Mapper 接口并容器管理
@MapperScan(basePackages = MasterDataSourceConfig.PACKAGE, sqlSessionFactoryRef = "masterSqlSessionFactory")
public class MasterDataSourceConfig {
//
static final String PACKAGE = "com.my.tst";
static final String MAPPER_LOCATION = "classpath:mapper/*.xml";
@Value("${master.datasource.url}")
private String url;
@Value("${master.datasource.username}")
private String user;
@Value("${master.datasource.password}")
private String password;
@Value("${master.datasource.driver-class-name}")
private String driverClass;
@Value("${master.datasource.druid.validation-query}")
private String validation;
@Value("${master.datasource.druid.test-while-idle}")
private boolean testwhilidle;
@Value("${master.datasource.druid.test-on-borrow}")
private boolean testonborrow;
@Value("${master.datasource.druid.test-on-return}")
private boolean testonreturn;
@Value("${master.datasource.druid.time-between-eviction-runs-millis}")
private Long timebetweenevictionrunsmillis;
@Bean(name = "masterDataSource")
@Primary
public DataSource masterDataSource() {
DruidDataSource dataSource = new DruidDataSource();
dataSource.setDriverClassName(driverClass);
dataSource.setUrl(url);
dataSource.setUsername(user);
dataSource.setPassword(password);
dataSource.setTestOnBorrow(testonborrow);
dataSource.setTestOnReturn(testonreturn);
dataSource.setValidationQuery(validation);//心跳sql
dataSource.setTestWhileIdle(testwhilidle);//开启心跳
dataSource.setTimeBetweenEvictionRunsMillis(timebetweenevictionrunsmillis);//心跳检测时间
return dataSource;
}
@Bean(name = "masterTransactionManager")
@Primary
public DataSourceTransactionManager masterTransactionManager() {
return new DataSourceTransactionManager(masterDataSource());
}
@Bean(name = "masterSqlSessionFactory")
@Primary
public SqlSessionFactory masterSqlSessionFactory(@Qualifier("masterDataSource") DataSource masterDataSource)
throws Exception {
final SqlSessionFactoryBean sessionFactory = new SqlSessionFactoryBean();
sessionFactory.setDataSource(masterDataSource);
sessionFactory.setMapperLocations(new PathMatchingResourcePatternResolver()
.getResources(MasterDataSourceConfig.MAPPER_LOCATION));
return sessionFactory.getObject();
}
}
Index.java
package com.my.tst.Control;
import com.my.tst.entity.USERS;
import com.my.tst.service.USERSSrv;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.servlet.ModelAndView;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import java.util.ArrayList;
import java.util.List;
@Controller
@RequestMapping("/")
public class Index {
@Resource
private USERSSrv usersrv;
@RequestMapping("/")
public String index(){
return "index";
}
@RequestMapping("/getUser")
@ResponseBody
public USERS getuser(){
USERS u = usersrv.getMod("0");
return u;
}
@RequestMapping("/getUserList")
@ResponseBody
public List<USERS> getuserList(){
List<USERS> ls = usersrv.getListBySqlPage("select * from USERS ",1,10);
return ls;
}
}
index.html
<html>
<head>
<title>test</title>
<script src="/js/jquery-1.11.2.min.js"></script>
<script>
$(function () {
getnm();
})
function getnm(){
$.ajax({
type:"get",
url:"/getUser",
data: {},
dataType: "json",
success: function (d) {
$("#msg").html(JSON.stringify(d));
}
})
}
</script>
</head>
<body>
<h1>hello word!!!</h1>
<div id="msg">
</div>
</body>
</html>
数据库我用的sqlserver2008 这里不多讲了。
运行调试看看:

在浏览器输入:http://localhost:8088
最后是打包jar:直接用maven打包

最后我遇到的问题(有兴趣的可以看看):运行时卡在 [main] pool.DruidDataSource - {dataSource-1} inited

1万+

被折叠的 条评论
为什么被折叠?



