三层架构:
-
数据访问层【数据层】/持久化层/DAL:主要是对数据库进行CRUD操作,不写任何逻辑代码;
-
业务处理层【业务层】/Service层/BLL:主要是业务逻辑的处理,负责表示层与数据层(持久层)的数据的传递和逻辑处理;
-
表现层/界面层/UI:展示数据或提供数据的界面,或者用户看到的界面,例如html,jsp,swing等。Controller控制器、View视图都属于表现层,界面中数据的传递要依靠Controller,传递数据的格式就是模型数据
三层架构规范:
表现层设计:
Controller层:
|-- 无需接口(controller包) -- XxxController -- 例如:UserController
--------------------------------------------------------------------
业务层设计:
service层:
|-- service接口(service包) -- IXxxService -- 例如:IUserService
|-- service实现(service.impl包)-- XxxServiceImpl -- 例如:UserServiceImpl
-----------------------------------------------------------------------------
持久化层设计1:
dao层:
|-- dao接口(dao包) -- IXxxDAO -- 例如:IUserDAO
|-- dao实现(dao.impl包) -- XxxDAOImpl -- 例如:UserDAOImpl
持久化层设计2:
mapper层【无需实现类】:
|-- mapper接口(mapper包) -- XxxMapper -- 例如:UserMapper
--------------------------------------------------------------------------
注意:一般一个domain对象对应一张表,一个dao或mapper组件,一个service组件,一个Controller组件
单独集成Spring:
1. 创建Maven的javaweb项目![](https://i-blog.csdnimg.cn/blog_migrate/a372846af0c671bc5ae3569de9b34106.png)
2. 测试项目首页index.jsp
3.导入Spring的jar包
<!--导入spring容器上下文jar-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.2.4.RELEASE</version>
</dependency>
<!--spring测试-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>5.2.4.RELEASE</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
4. 准备配置文件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" xmlns:aop="http://www.springframework.org/schema/aop" 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/aop http://www.springframework.org/schema/aop/spring-aop.xsd" > <bean id="now" class="java.util.Date" /> </beans>
5. 导入Spring+Mybatis包
<!--集成Mybatis依赖jdbc-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>5.2.4.RELEASE</version>
</dependency><!-- https://mvnrepository.com/artifact/org.mybatis/mybatis -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.4.6</version>
</dependency><!-- mysql驱动包 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.26</version>
</dependency><!--连接池-->
<!-- https://mvnrepository.com/artifact/com.zaxxer/HikariCP -->
<dependency>
<groupId>com.zaxxer</groupId>
<artifactId>HikariCP</artifactId>
<version>3.3.1</version>
</dependency>
<!--spring和mybatis集成需要一个包-->
<!-- https://mvnrepository.com/artifact/org.mybatis/mybatis-spring -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>2.0.6</version>
</dependency>
<!--日志包-->
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
6. 创建jdbc.properties文件
jdbc.username=root
jdbc.password=123456
jdbc.url=jdbc:mysql:///personnel_management
jdbc.driverClassName=com.mysql.jdbc.Driver
7. 创建log4j.properties文件
#全局日志配置
log4j.rootLogger = info,console
#输出局部的日志信息(自己的包中的日志打印方式)
log4j.logger.org.zhangkun=TRACE
### 配置输出到控制台
log4j.appender.console = org.apache.log4j.ConsoleAppender
### 使用System.out打印日志
log4j.appender.console.Target = System.out
### 指定日志的格式布局(日志是有格式的)
log4j.appender.console.layout = org.apache.log4j.PatternLayout
### 日志的打印格式
log4j.appender.console.layout.ConversionPattern = %d{ABSOLUTE} %5p %c{1}:%L - %m%n
8. 导入SpringMVC的jar包
<!--springmvc支持jar包,导入webmvc其实就已经导入web,它依赖于web-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>5.2.4.RELEASE</version>
</dependency>
<!-- https://mvnrepository.com/artifact/commons-fileupload/commons-fileupload -->
<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<version>1.3.3</version>
</dependency><!--后端返回json数据需要-->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.9.10.8</version>
</dependency>
<!--Servlet-->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.0.1</version>
<scope>provided</scope>
</dependency>
<!--jsp支持-->
<dependency>
<groupId>javax.servlet.jsp</groupId>
<artifactId>jsp-api</artifactId>
<version>2.2</version>
<scope>provided</scope>
</dependency>
9.创建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:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx" 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/tx http://www.springframework.org/schema/tx/spring-tx.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd" > <!--引入spring的核心配置文件--> <!--<import resource="classpath:applicationContext.xml"/>--> <!--开启注解--> <mvc:annotation-driven/> <!--静态资源放行--> <mvc:default-servlet-handler/> <!--扫描包--> <context:component-scan base-package="org.zhangkun.controller"/> <!--视图解析器--> <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="prefix" value="/WEB-INF/jsps"/> <property name="suffix" value=".jsp"/> </bean> </beans>
10. 创建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" xmlns:aop="http://www.springframework.org/schema/aop" 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 http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd" > <!--读取配置文件--> <context:property-placeholder location="classpath:jdbc.properties"/> <!--集成Mybatis --> <bean id="dataSource" class="com.zaxxer.hikari.HikariDataSource"> <!--四大金刚--> <property name="username" value="${jdbc.username}"/> <property name="password" value="${jdbc.password}"/> <property name="jdbcUrl" value="${jdbc.url}"/> <property name="driverClassName" value="${jdbc.driver}"/> <!--其他信息--> <property name="connectionTimeout" value="3000"/> <property name="maximumPoolSize" value="10"/> <!--最大闲置时间--> <property name="idleTimeout" value="3000"/> </bean> <!--配置 sqlSessionFactory--> <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> <!--配置数据源--> <property name="dataSource" ref="dataSource"/> <!--扫描mapper.xml的--> <property name="mapperLocations" value="classpath:org/zhangkun/mapper/*Mapper.xml"/> <!--别名包--> <property name="typeAliasesPackage" value="cn.ronghuanet.domain"/> </bean> <!-- mybatis的映射器 --> <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"> <property name="basePackage" value="cn.ronghuanet.mapper"/> </bean> <!--扫描Service--> <context:component-scan base-package="org.zhangkun.service"/> <!--事务配置xml版本--> <!--事务管理器--> <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <property name="dataSource" ref="dataSource"/> </bean> <!--事务的属性--> <aop:config> <!-- execution(* cn.ronghuanet.service.I*Service.*(..)) * 任意返回值 --> <aop:pointcut id="pointcut" expression="execution(* org.zhangkun.service.I*Service.*(..))"/> <aop:advisor advice-ref="txAdvice" pointcut-ref="pointcut"/> </aop:config> <tx:advice id="txAdvice" transaction-manager="transactionManager"> <tx:attributes> <!-- 事务的传播机制 支持 只读--> <tx:method name="find*" propagation="SUPPORTS" read-only="true"/> <tx:method name="get*" propagation="SUPPORTS" read-only="true"/> <tx:method name="select*" propagation="SUPPORTS" read-only="true"/> <tx:method name="query*" propagation="SUPPORTS" read-only="true"/> <!-- 这句话表示有事务 75 和74 是一样的 都是默认就是 propagation="REQUIRED" read-only="false"--> <!-- <tx:method name="*" propagation="REQUIRED" read-only="false"/>--> <tx:method name="*" /> </tx:attributes> </tx:advice> </beans>
11. 配置web.xml文件
<?xml version="1.0" encoding="ISO-8859-1"?> <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" metadata-complete="true"> <!--监听tomcat启动 然后我就去加载Spring 的核心配置文件--> <context-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:applicationContext.xml</param-value> </context-param> <listener> <!-- 这个是 Spring的监听器 它监听到tomcat启动的时候 就会起作用--> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener> <!--配置SpringMVC的核心对象--> <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:spring-mvc.xml</param-value> </init-param> <!--启动顺序--> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>dispatcherServlet</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping> <filter> <filter-name>characterEncodingFilter</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>characterEncodingFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> </web-app>
12. 大致图
插件:
注解事务(事务配置在applicationContext.xml文件最下面)