SSM三层配置分别为:Spring,SpringMVC,Mybaits。
今天呢,把SSM三层框架整合到eclipse里面来,具体我会把配置和依赖都写进来。
呃呃呃,创建MAVEN项目就不用我说了吧,哈哈。
我呢,把所需要的类放在创建的分层里,首先,先来说一下MAVEN配置的依赖文件吧,pom.xml需用到的。
3.1
4.3.20.RELEASE
UTF-8
javax
javaee-api
8.0
provided
org.glassfish.web
javax.servlet.jsp.jstl
1.2.2
org.springframework
spring-context
${springframework.version}
org.springframework
spring-webmvc
${springframework.version}
org.springframework
spring-aspects
${springframework.version}
org.springframework
spring-jdbc
${springframework.version}
org.springframework
spring-test
${springframework.version}
mysql
mysql-connector-java
5.1.45
org.slf4j
slf4j-log4j12
1.7.25
org.apache.httpcomponents
httpclient
4.5.3
org.slf4j
slf4j-api
1.7.25
org.slf4j
slf4j-simple
1.7.25
com.mchange
c3p0
0.9.5.2
com.baomidou
mybatis-plus
3.0.5
com.fasterxml.jackson.core
jackson-databind
2.9.1
commons-fileupload
commons-fileupload
1.3.3
commons-dbutils
commons-dbutils
1.6
com.sun.mail
javax.mail
1.6.2
javax.activation
activation
1.1.1
commons-beanutils
commons-beanutils-bean-collections
1.8.3
com.alibaba
fastjson
1.2.47
org.apache.commons
commons-lang3
3.3.2
com.github.wxpay
wxpay-sdk
0.0.3
junit
junit
4.12
test
org.hamcrest
hamcrest-library
1.3
这是我需要用到的,你们看着使用吧,还可以去网上查找你们需要的版本或者依赖。
建立MAVEN项目后会是类似于下面图片的。
java里面放分层的
、
resources里面放置配置xml等文件。
先说完配置文件吧。
applicationContext如下:
springMVC如下:
spring-Mybaits如下:
C3P0的配置如下:
#jdbc基本信息
c3p0.driverClass=com.mysql.jdbc.Driver
c3p0.jdbcUrl=jdbc:mysql://localhost:3306/book?useUnicode=true&useSSL=false&characterEncoding=UTF-8&allowMultiQueries=true
c3p0.user=root
c3p0.password=root
#c3p0最基本配置参数为:acquireIncrement、initialPoolSize、maxPoolSize、maxIdleTime、minPoolSize
#配置参照文档:https://www.mchange.com/projects/c3p0/#basic_pool_configuration
#c3p0连接池信息
c3p0.minPoolSize=3
c3p0.maxPoolSize=25
#当连接池中的连接耗尽的时候c3p0一次同时获取的连接数
c3p0.acquireIncrement=3
c3p0.initialPoolSize=7
#定义在从数据库获取新连接失败后重复尝试的次数
c3p0.acquireRetryAttempts=60
#两次连接中间隔时间,单位毫秒
c3p0.acquireRetryDelay=1000
#连接关闭时默认将所有未提交的操作回滚
c3p0.autoCommitOnClose=false
#当连接池用完时客户端调用getConnection()后等待获取新连接的时间,超时后将抛出SQLException,如设为0则无限期等待。单位毫秒
c3p0.checkoutTimeout=3000
#每120秒检查所有连接池中的空闲连接。Default: 0
c3p0.idleConnectionTestPeriod=120
#最大空闲时间,60秒内未使用则连接被丢弃。若为0则永不丢弃。Default: 0
c3p0.maxIdleTime=60
#如果设为true那么在取得连接的同时将校验连接的有效性。Default: false
c3p0.testConnectionOnCheckin=true
#JDBC的标准参数,用以控制数据源内加载的PreparedStatements数量。但由于预缓存的statements属于单个connection而不是整个连接池。
#所以设置这个参数需要考虑到多方面的因素。如果maxStatements与 maxStatementsPerConnection均为0,则缓存被关闭。默认值为 0
c3p0.maxStatements=300
#定义连接池内单个连接所拥有的最大缓存statements数
c3p0.maxStatementsPerConnection=30
log4j的配置如下:
#定义LOG输出级别:
#ALL输出所有日志,如果换成DEBUG表示输出DEBUG以上级别日志
#log4j.rootLogger的第一个参数DEBUG定义所有日志的级别,第二个以后是定义的引用变量
log4j.rootLogger=DEBUG, stdout, logfile
#定义stdout引用的日志输出目的地为控制台
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
#指定控制台日志输出格式由PatternLayout类进行处理
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
#指定日志输出时的具体格式
log4j.appender.stdout.layout.ConversionPattern=%d %p [%c] - %m%n
#定义logfile引用的日志输出为每日滚动生成的文件,由DailyRollingFileAppender类进行处理,文件大小到达指定尺寸的时候产生一个新的文件
log4j.appender.logfile=org.apache.log4j.DailyRollingFileAppender
#指定日志文件的输出目录和文件名
log4j.appender.logfile.File=D://log/bookstore.log
#定义日志文件的大小
#log4j.appender.logfile.MaxFileSize=512KB
#定义日志文件生成的数量
#log4j.appender.logfile.MaxBackupIndex=3
#定义日志文件的输出级别
log4j.appender.File.Threshold = DEBUG
log4j.appender.File.layout = org.apache.log4j.PatternLayout
log4j.appender.File.layout.ConversionPattern =[%p] [%d{yyyy-MM-dd HH\:mm\:ss}][%c]%m%n
log4j.appender.logfile.layout=org.apache.log4j.PatternLayout
log4j.appender.logfile.layout.ConversionPattern=%d %p [%c] - %m%n
log4j.logger.com.bs.mall=DEBUG
log4j.logger.com.ibatis=DEBUG
log4j.logger.com.ibatis.common.jdbc.SimpleDataSource=DEBUG
log4j.logger.com.ibatis.common.jdbc.ScriptRunner=DEBUG
log4j.logger.com.ibatis.sqlmap.engine.impl.SqlMapClientDelegate=DEBUG
log4j.logger.Java.sql.Connection=DEBUG
log4j.logger.java.sql.Statement=DEBUG
log4j.logger.java.sql.PreparedStatement=DEBUG
配置就是这么多,可以根据你们的需求来代入需要的配置。
注意:记得改配置里数据库的地址和自己的用户和密码,我的是本地的,没开的话是连接不上的。
然后分层的是pojo实体类,service是业务逻辑层,dao是数据访问层,controller是请求处理层,而mapper层则是映射。
注意:如果不懂@注解是什么意思的话,可以看看我前面的文章有解释。
从pojo实体类开始吧,我先创建的是一个种类的类,封装起来。
public class Category {
private String bookCategory;
public String getBookCategory() {
return bookCategory;
}
public void setBookCategory(String bookCategory) {
this.bookCategory = bookCategory;
}
public Category(String bookCategory) {
super();
this.bookCategory = bookCategory;
}
public Category() {
super();
// TODO Auto-generated constructor stub
}
@Override
public String toString() {
return "Category [bookCategory=" + bookCategory + "]";
}
}
加入他的get,set和tostring方法。
然后,在mapper写分类的方法。
public interface AllContentMapper {
// 查询所有的分类
List selectClassifyById();
}
接着去mapper.xml映射所需要的sql语句。
注意:这里的resultType可以直接映射到实体类,而parameterType是需要加上resultMap的配置的,我这里是为了方便直接映射到实体类。
接下来是dao接口层的配置:
public interface AllContentDao {
// 查询所有的分类
List referClassifyByBookId();
}
然后是dao层实现接口的配置:
@Repository
public class AllContentDaoImpl implements AllContentDao {
@Autowired
private AllContentMapper acm;
// 查询所有的分类
@Override
public List referClassifyByBookId() {
return acm.selectClassifyById();
}
然后是service层的接口:
public interface AllContentService {
// 查询所有的分类
List selectClassifyById();
}
实现service接口的类:
@Service
public class AllContentServiceImpl implements AllContentService {
@Autowired
private AllContentDao acd;
// 查询所有的分类
@Override
public List selectClassifyById() {
return acd.referClassifyByBookId();
}
}
最后,是测试一下是否能够成功运行,在controller层里:
@RestController
public class AllContentController {
@Autowired
private AllContentService acs;
// 查询所有的分类
@GetMapping("selectBook")
public List findSelectBookCategory(){
return acs.selectClassifyById();
}
}