致虚极,守静笃
1. Spring概述
Spring是一种轻量级开源框架,通常服务器端采用三层体系架构,分别为表现层(web)、业务逻辑层(service)、持久层(dao)
一般开发的三层架构为:数据访问层(DAL Data Access Layer)、业务逻辑层(BLL Business Logic Layer)、表现层(UI User Interface)、实体类库<不属于上面任何一层>(Model)
模块
Core Container(核心容器)
- Beans模块:提供了BeanFactory工厂
- Core核心模块:包括Ioc和DI
- Context上下文模块:建立在Beans和Core模块基础之上,访问定义和配置的任何对象的媒介,ApplicationContext接口是上下文的焦点
- Context-support模块:提供了第三方嵌入Spring的集成支持,比如缓存,邮件服务,任务调度、模板引擎
- SpEl模块:Spring3.0新增的模块,提供了Spring Expression Language支持
Data Access/Integration
- JDBC模块:提供JDBC抽象层,减少数据库操作
- ORM模块:对流行的对象映射API,包括JPA、JDO和Hibernate提供了集成层支持
- OXM模块:提供了一个支持对象/XML映射的抽象层实现,如JAXB、Castor、XMLBans、JiBX、XStream
- JMS模块:Java消息传递服务
- Transaction模块:对特殊接口实现和所有实体类声明式的事务管理
Web
WebSocket模块:spring4.0新增,提供WebSockte以及ScokJS和对STOMP的支持
Servlet模块:也称spring-mvc模块
Web模块:基本的web开发集成特性
Portlet模块:提供了在Portlet环境中使用MVC实现
其他模块
- AOP模块:提供了面向切面编程
- Aspects模块:AspectJ的集成功能
- Instrumentation模块:提供了类工具的支持和类加载器的实现,可以在特定的应用服务器中使用
- Messaging模块:Spring4.0新增,对消息传递体系结构和协议的支持
- Test 模块:对单元测试和集成测试,使用 JUnit 或 TestNG 框架的测试
Spring框架包
- Spring框架压缩包/springframework-3.2.13.RELEASE-dist.zip
- 第三方依赖包/ commons-logging.1.2
使用的设计模式
工厂设计模式(IOC容器)
单例模式
xml(默认为单例):
1
<bean id="userService" class="top.snailclimb.UserService" scope="singleton"/>
注解:
@Scope(value = “singleton”)
原型模式
xml:
1
<bean id="userService" class="top.snailclimb.UserService" scope="prototype"/>
注解:
@Scope(value = “prototype”)
代理设计模式(AOP\AspectJ)
模板方法
Spring 中
jdbcTemplate
、hibernateTemplate
等以 Template 结尾的对数据库操作的类观察者模式
Spring 事件驱动模型
适配者模式
Spring AOP 的增强或通知(Advice)使用到了适配器模式、spring MVC 中也是用到了适配器模式适配
Controller
装饰者模式
根据客户的需求能够动态切换不同的数据源
Spring Boot
2. Spring IOC容器(思想:控制反转,Inversion of Control)
BeanFactory
这种加载方式开发并不多用,BeanFactory 接口有多个实现类,最常见的是 org.springframework.beans.factory.xml.XmlBeanFactory,它是根据 XML 配置文件中的定义装配 Bean 的。
1 | BeanFactory beanFactory = new XmlBeanFactory(new FileSystemResource("D://applicationContext.xml")); |
ApplicationContext
ApplicationContext 是 BeanFactory 的子接口,也被称为应用上下文。该接口的全路径为 org.springframework.context.ApplicationContext,它不仅提供了 BeanFactory 的所有功能,还添加了对 i18n(国际化)、资源访问、事件传播等方面的良好支持
ClassPathXmlApplicationContext
该类从类路径 ClassPath 中寻找指定的 XML 配置文件
1 | ApplicationContext applicationContext = new ClassPathXmlApplicationContext(String configLocation); |
FileSystemXmlApplicationContext
灵活性不强,不推荐使用,从硬盘的绝对路径下加载配置文件,
1 | ApplicationContext applicationContext = new FileSystemXmlApplicationContext(String configLocation); |
XmlWebApplicationContext
从Web系统中的XML文件载入上下文定义信息
配置文件
Web 服务器实例化 ApplicationContext 容器通常使用基于 ContextLoaderListener 实现的方式,它只需要在 web.xml 中添加如下代码
1 | <!--指定Spring配置文件的位置,有多个配置文件时,以逗号分隔--> |
区别
BeanFactory 和 ApplicationContext 都是通过 XML 配置文件加载 Bean 的
如果 Bean 的某一个属性没有注入,则使用 BeanFacotry 加载后,在第一次调用 getBean() 方法时会抛出异常,而 ApplicationContext 则在初始化时自检,这样有利于检查所依赖的属性是否注入。
备注
实现IOC思想需要DI做支持
3. Spring DI(方法:Dependency Injection,依赖注入)
- 依赖注入方式
- 基于XML装配
- Setter注入(值类型用
value
注入 引用类型用ref
注入)
1 |
|
- 构造方法注入(值类型用
value
注入 引用类型用ref
注入)
1 | <!--1.使用构造注入方式装配User实例 --> |
- 函数注入(实际上set注入,spring特有,为了简化
写法 )
1 | xmlns:p="http://www.springframework.org/schema/p" |
- spel注入
1 | <!--SpEL特性:(1)、使用Bean的ID来引用Bean;(2)、调用方法和访问对象的属性;(3)、对值进行算术、关系和逻辑运算;(4)、正则表达式匹配;(5)、集合操作--> |
- Spring配置别名
1 | <!--设置别名:在获取Bean的时候可以使用别名获取--> |
基于注解装配
1
2
3<!--使用 context 命名空间 ,通知Spring扫描指定包下所有Bean类,进行注解解析-->
<context:component-scan base-package="com.itheima.annotation" />
注解名称 说明 @Component 此注解尽量少用,可以使用此注解描述 Spring 中的 Bean,但它是一个泛化的概念,仅仅表示一个组件(Bean),并且可以作用在任何层次。使用时只需将该注解标注在相应类上即可 @Repository 用于将数据访问层(DAO层)的类标识为 Spring 中的 Bean,其功能与 @Component 相同 @Service 通常作用在业务层(Service 层),用于将业务层的类标识为 Spring 中的 Bean,其功能与 @Component 相同 @Controller 通常作用在控制层(如 Struts2 的 Action),用于将控制层的类标识为 Spring 中的 Bean,其功能与 @Component 相同 @Autowired 用于对 Bean 的属性变量、属性的 Set 方法及构造函数进行标注,配合对应的注解处理器完成 Bean 的自动配置工作。默认按照 Bean 的类型进行装配 @Resource 其作用与 Autowired 一样。其区别在于 @Autowired 默认按照 Bean 类型装配,而 @Resource 默认按照 Bean 实例名称进行装配name :按实例名称进行装配,type :按 Bean 类型进行装配 @Qualifier 与 @Autowired 注解配合使用,会将默认的按 Bean 类型装配修改为按 Bean 的实例名称装配,Bean 的实例名称由 @Qualifier 注解的参数指定 @RunWith(SpringJUnit4ClassRunner.class) 创建Junit容器 @ContextConfiguration(“classpath:.xml”) 指定容器的配置文件 注意
@Value(“123”)值注入如果没有Set方法则通过反射field赋值,有则通过set赋值
@AutoWired和@Resource的区别?
@AutoWired默认以类型进行查找,@Resource默认以名称进行查找
@AutoWired(required=false) + @Qualifier(“user”) == @Resource(name=”user”)
其中@Resource注解是jdk1.6后才有的
自动装配
autowire名称 说明 byName 根据 Property 的 name 自动装配,如果一个 Bean 的 name 和另一个 Bean 中的 Property 的 name 相同,则自动装配这个 Bean 到 Property 中。 byType 根据 Property 的数据类型(Type)自动装配,如果一个 Bean 的数据类型兼容另一个 Bean 中 Property 的数据类型,则自动装配。 constructor 根据构造方法的参数的数据类型,进行 byType 模式的自动装配。 autodetect 如果发现默认的构造方法,则用 constructor 模式,否则用 byType 模式。 no 默认情况下,不使用自动装配,Bean 依赖必须通过 ref 元素定义。 1
2
3
4
5
6
7<!-- 使用bean元素的autowire属性完成自动装配 -->
<bean id="userDao"
class="com.itheima.annotation.UserDaoImpl" />
<bean id="userService"
class="com.itheima.annotation.UserServiceImpl" autowire="byName" />
<bean id="userController"
class="com.itheima.annotation.UserController" autowire="byName"/>
4. Bean
- 实例化Bean:
- 构造方法
1 | <bean id="bean1" class="com.itheima.instance.constructor.Bean1" /> |
- 静态工厂实例化
1 | <bean id="bean2" |
- 实例工厂实例化
1 | <!-- 配置工厂 --> |
bean
元素的常用属性
属性名称 | 描述 |
---|---|
id | 是一个 Bean 的唯一标识符,Spring 容器对 Bean 的配置和管理都通过该属性完成,没有id看name,name也没有看class |
name | Spring 容器同样可以通过此属性对容器中的 Bean 进行配置和管理,name 属性中可以为 Bean 指定多个名称,每个名称之间用逗号或分号隔开 |
class | 该属性指定了 Bean 的具体实现类,它必须是一个完整的类名,使用类的全限定名 |
scope | 用于设定 Bean 实例的作用域,其属性值有 singleton(单例)、prototype(原型)、request、session 和 global Session。其默认值是 singleton |
constructor-arg | |
property | |
ref | |
value | |
list | 用于封装 List 或数组类型的依赖注入 |
set | 用于封装 Set 类型属性的依赖注入 |
map | 用于封装 Map 类型属性的依赖注入 |
entry |
bean
中的scope(作用域)
作用域名称 | 说明 |
---|---|
singleton | 单例模式,bean的默认值,使用 singleton 定义的 Bean 在 Spring 容器中只有一个实例,singleton作用域是Spring中的缺省作用域 |
prototype | 原型模式,每次通过 Spring 容器获取 prototype 定义的 Bean 时,容器都将创建一个新的 Bean 实例 |
request | 在一次 HTTP 请求中,容器会返回该 Bean 的同一个实例。而对不同的 HTTP 请求,会返回不同的实例,该作用域仅在当前 HTTP Request 内有效,Web环境下,对象与request生命周期一致 |
session | Web环境下,对象与session生命周期一致,在一次 HTTP Session 中,容器会返回该 Bean 的同一个实例,该作用域仅在当前 HTTP Session 内有效 |
global Session | 在一个全局的 HTTP Session 中,容器会返回该 Bean 的同一个实例。该作用域仅在使用 portlet context 时有效 |
application | 为每个ServletContext对象创建一个实例,仅在使用portlet上下文时有效 |
websocket | 为每个webSocket对象创建一个实例,仅在Web相关的ApplicationContext中生效 |
**注意 **
与struts整合时候,务必要用prototype多例,因为struts2在每次请求都会创建一个新的Action,若为单例,在多请求情况下,每个请求找找spring拿的都是同一个action。
- singleton 作用域下bean的生命周期
(1)配置一个方法作为生命周期初始化方法,spring会在对象创建之后立刻调用 init-method
(2)配置一个方法作为生命周期的销毁方法,spring容器在关闭并销毁所有容器中的对象之前调用destory-method
1 | <bean init-method="init" destory-method="destory"></bean> <!-- 对应注解为@PostConstruct --> |
5. AOP(Aspect Oriented Programming)
- 目前最流行的 AOP 框架有两个,分别为 Spring AOP 和 AspectJ。
- AOP专业术语
名称 | 说明 |
---|---|
Joinpoint(连接点) | 指那些被拦截到的点,在 Spring 中,可以被动态代理拦截目标类的方法。 |
Pointcut(切入点) | 指要对哪些 Joinpoint 进行拦截,即被拦截的连接点。 |
Advice(通知) | 指拦截到 Joinpoint 之后要做的事情,即对切入点增强的内容。 |
Target(目标) | 指代理的目标对象。 |
Weaving(织入) | 指把增强代码应用到目标上,生成代理对象的过程,将通知应用到连接点形成切入点的过程。 |
Proxy(代理) | 指生成的代理对象,将通知织入到目标对象之后形成的代理对象。 |
Aspect(切面) | 切入点和通知的结合。 |
- Spring AOP
- JDK动态代理
- 栗子
(1)接口UserDao
1 | package com.itheima.jdk; |
(2) 接口实现类UserDaoImpl
1 | package com.itheima.jdk; |
(3) 切面类MyAspect
1 | package com.itheima.jdk; |
(4) 代理类JdkProxy
1 | package com.itheima.jdk; |
(5) 测试
1 | package com.itheima.jdk; |
- CGLIB动态代理(没有实现接口的类)
(1) 目标类UserDao
1 | package com.itheima.cglib; |
(2) 切面类MyAspect
1 | package com.itheima.jdk; |
(3) 代理类CglibProxy
1 | package com.itheima.cglib; |
(4) 测试
1 | package com.itheima.cglib; |
- 基于代理类的AOP实现
通知名字 | 英文 | 说明 | 使用场景 |
---|---|---|---|
前置通知 | Before Advice | 在某连接点(join point)之前执行的通知,但这个通知不能阻止连接点前的执行(除非它抛出一个异常) | |
环绕通知 | Around Advice | 包围一个连接点(join point)的通知,如方法调用。这是最强大的一种通知类型。 环绕通知可以在方法调用前后完成自定义的行为。它也会选择是否继续执行连接点或直接返回它们自己的返回值或抛出异常来结束执行。 环绕通知是最常用的一种通知类型。大部分基于拦截的AOP框架,例如Nanning和JBoss4,都只提供环绕通知。 | 控制事务 权限控制 |
抛出异常后通知 | After Throwing Advice | 在方法抛出异常退出时执行的通知。 | 异常处理 控制事务 |
返回后通知【后置通知】 | After Returning Advice | 在某连接点(join point)正常完成后执行的通知:例如,一个方法没有抛出任何异常,正常返回。 | 记录日志(方法已经成功调用) |
最终通知 | After Advice | 当某连接点退出的时候执行的通知(不论是正常返回还是异常退出)。 | 记录日志(方法已经调用,但不一定成功) |
- 栗子
(1) 导入新包
aopalliance-1.0.jar
spring-aop-4.3.6.RELEASE.jar
(2) 接口UserDao
1 | package com.itheima.factorybean; |
(3) 实现类
1 | package com.itheima.factorybean; |
(4) 切面类MyAspect
1 | package com.itheima.factorybean; |
(5) 配置文件applicationContext.xml
1 |
|
(6) 测试
1 | package com.itheima.factorybean; |
- AspectJ
基于Java语言的AOP框架
- 基于XML的声明式
execution(* com.itheima.jdk.*.*(..)) 第一个星:返回值类型,第二个:类名,第三个:方法名,括号里面的点:任意参数
- 栗子
(1) 导入新包
- spring-aspects-4.3.6.RELEASE.jar
- aspectjweaver-1.8.10.jar
(2) 切面类MyAspect
1 | package com.itheima.aspectj.xml; |
(3) 配置文件
1 |
|
(4) 测试
1 | package com.itheima.aspectj.xml; |
- 基于注解的声明式
(1) 在基于xml的声明上,重新写一个切面类
1 | package com.itheima.aspectj.annotation; |
(2) 配置文件
1 |
|
(3) 测试
1 | package com.itheima.aspectj.annotation; |
6. Spring 数据库开发
Spring JdbcTemplate解析,推荐使用MyBatis
- 栗子
(1) 导入新包
- mysql-connector-java-5.1.8.jar
- spring-jdbc-4.3.6.RELEASE.jar
- spring-tx-4.3.6.RELEASE.jar
(2) 配置文件
1 |
|
(3) 实体类
1 | package com.itheima.jdbc; |
(4) 数据访问类接口Dao
1 | package com.itheima.jdbc; |
(5) 数据访问类实现类
1 | package com.itheima.jdbc; |
(6) 测试
1 | package com.itheima.jdbc; |
7.Spring事务管理
- 事务管理核心接口
- PlatformTransactionManager(接口是Spring提供的平台事务管理器)
方法 | 类型 | 说明 |
---|---|---|
TransactionStatus getTransaction(TransactionDefinition definition) | 普通 | 用于获取事务状态信息 |
void commit(TransactionStatus status) | 普通 | 用于提交事务 |
void rollback(TransactionStatus status) | 普通 | 用于回滚事务 |
- TransactionDefinition(接口是事务定义(描述)的对象)
方法 | 类型 | 说明 |
---|---|---|
String getName( ) | 普通 | 获取事务对象名称 |
int getIsolationLevel( ) | 普通 | 获取事务的隔离级别 |
int getPropagationBehavior( ) | 普通 | 获取事务的传播行为 |
int getTimeout( ) | 普通 | 获取事务的超时时间 |
boolean isReadOnly( ) | 普通 | 获取事务是否可读 |
- TransactionStatus(事务的状态)
是否有保存点
是否一个新的事务
事务是否已经提交
- 基于XML方式声明式事务
- 栗子
(1) 导入新包
- aopalliance-1.0.jar
- aspectjweaver-1.8.10.jar
- spring-aop-4.3.6.RELEASE.jar
- spring-aspects-4.3.6.RELEASE.jar
- mysql-connector-java-5.1.8.jar
- spring-tx-4.3.6.RELEASE.jar
(2) 配置文件
1 |
|
(3) 在上一次的AccountDao接口加方法
1 | public void transfer(String outUser,String inUser,Double money); |
(4) 实现类
1 |
|
(5) 测试
1 | package com.itheima.jdbc; |
- 基于注解方式声明式事务
(1) 在实现类增加注解
1 |
|
(2) 修改配置文件
1 |
|
(3) 测试
8. MyBatis
持久层框架
- 工作原理
- 栗子
(1) 导入新包
- mybatis-3.4.2.jar
- mysql-connector-java-5.1.40-bin.jar
(2) 配置日志信息log4j.properties
1 | # Global logging configuration |
(3) 持久类entity
1 | package com.itheima.po; |
(4) 映射文件
1 |
|
(5) MyBatis配置文件
1 |
|
(6) 测试
1 | package com.itheima.test; |
附:MySQL语句
1 | create table if not exists `t_customer`( |
- SqlSession
是MyBatis的关键对象,是执行持久化操作的独享,类似于JDBC中的Connection,线程不安全,使用完要确保finally关闭它
- SqlSessionFactory源码
1 | package org.apache.ibatis.session; |
- MyBatis配置文件
- 栗子
(1) log4j.properties【用于控制台输出】
1 | # Global logging configuration |
(2) db.properties文件
1 | jdbc.driver=com.mysql.jdbc.Driver |
(3) MyBatis配置文件
1 |
|
(4) 映射文件+动态SQL
1 |
|
(5) MyBatis工具类
1 | package edu.hhtc.jsj.utils; |
(6) 测试
1 | import edu.hhtc.jsj.dao.StudentDao; |
- 关联映射
操作多张联合表
- 栗子
(1) 导入jar包maven
1 |
|
(2) 一对一映射文件
1 |
|
1 |
|
(3) 一对多关系映射
1 |
|
(4) 多对多关系映射
1 |
|
(5) 测试
1 | import edu.hhtc.jsj.pojo.Cource; |
Spring与MyBatis整合
maven导包
1 |
|
(2) log4j.properties控制台输出
1 | # Global logging configuration |
(3)db.properties文件
1 | jdbc.driver=com.mysql.jdbc.Driver |
(4) applicationContext.xml
1 |
|
(5) mybatis-config.xml
1 |
|
(6) 持久层
(7) DAO层接口和映射文件
(8) DAO实现类
(9) Service层和实现层
(10) 测试
9. Sprinng MVC
轻量级web框架
- 栗子
(1)maven导入新包
- spring-web-4.3.6.RELEASE.jar
- spring-webmvc-4.3.6.RELEASE.jar
(2)配置文件web.xml
1 |
|
(3) entity
(4) DAO和映射文件
(5) Service和实现类
(6) 创建Controller类
1 | package edu.hhtc.jsj.controller; |
(7) springmvc-config.xml
1 |
|
(8) View页面
(9) 时间格式化工具
1 | package edu.hhtc.jsj.convert; |
1 | package com.itheima.convert; |
- 工作流程
- 核心类与注解
- DispatcherServlet(前端控制器)
1 | //在web.xml文件中 |
- @Controller
表明类是一个控制器
注意:
1 | <!-- 1.指定需要扫描的包 --> |
@RequestMapping(value=”/hello”,method =RequestMethod.GET)
参数类型:Model,数据类型,HttpServletRequest,HttpServletResponse,HttpSession
返回值类型:String【视图】+参数【Model】、ModelAndView【未解耦】、void【数据,异步请求】
1 | package com.itheima.controller; |
redirect【重定向】+forward【请求转发,修改】
视图解析器
简化view路径
1 | <!-- 定义视图解析器 --> |
10. 数据绑定
- 注解
@RequestParam绑定单个请求参数值;
@PathVariable绑定URI模板变量值;
@CookieValue绑定Cookie数据值
@RequestHeader绑定请求头数据;
@ModelValue绑定参数到命令对象;
@SessionAttributes绑定命令对象到session;
@RequestBody绑定请求的内容区数据并能进行自动类型转换等,例如JSON和RESTful风格。
@RequestPart绑定“multipart/data”数据,除了能绑定@RequestParam能做到的请求参数外,还能绑定上传的文件等。
除了上边提到的注解,我们还可以通过如HttpServletRequest等API得到请求数据,但推荐使用注解方式,因为使用起来更简单。
- 流程
- 简单数据绑定
- 基本数据类型
1 |
|
- POJO类型
1 | /** |
- 乱码
1 | <!-- 配置编码过滤器 --> |
- 包装类POJO
前端的name值如果是POJO子属性,应为:对象.属性 例如user.username
(1) entity
1 | package com.itheima.po; |
(2) Controller
1 | package com.itheima.controller; |
(3) 前端
1 | <%@ page language="java" contentType="text/html; charset=UTF-8" |
- 自定义数据绑定
(1) 自定义日期转换器
1 | package com.itheima.convert; |
1 | package com.itheima.convert; |
(2) Spring MVC配置
1 | <!-- 自定义类型转换器配置 --> |
(3) Controller
1 | package com.itheima.controller; |
- 复杂数据绑定
- 绑定数组
(1) 前端
1 | <%@ page language="java" contentType="text/html; charset=UTF-8" |
(2) Controller
1 |
|
- 绑定集合
(1) 包装类UserVo
1 | package com.itheima.vo; |
(2) 前端
1 | <%@ page language="java" contentType="text/html; charset=UTF-8" |
(3) Controller
1 | /** |
11. JSON数据交互与RESTful支持
- JSON数据转化
(1)导入新包
- jackson-annotations-2.8.8.jar
- jackson-core-2.8.8.jar
- jackson-databind-2.8.8.jar
(2) 注解
- @ResponseBody:直接返回return对象,用于method
- @RequestBody:用于请求的数据绑定到方法的形参中,用于形参上
(3) web.xml
1 |
|
(4) springMVC配置文件
1 | <beans xmlns="http://www.springframework.org/schema/beans" |
(5) entity
1 | package com.itheima.po; |
(6) Controller
1 | package com.itheima.controller; |
(7) 前端
1 | <%-- |
- RESTful风格
一种请求路径的风格
1 | <%-- |
12. 拦截器
类似于过滤器,用于拦截用户请求,做出相应处理;顺序postHandle,afterCompletion与拦截器顺序相反
- 栗子
(1) 设置拦截器1
1 | package edu.hhtc.jsj.interceptor; |
(2) 设置拦截器2
1 | package edu.hhtc.jsj.interceptor; |
(3) 设置拦截器3
1 | package edu.hhtc.jsj.interceptor; |
(4) SpringMVC配置文件
1 |
|
(5) 前端
1 | <%-- |
13. 文件上传和下载
- 上传与下载
(1)导入新包
- commons-io-2.5.jar
- hamcrest-core-1.3.jar
(2) SringMVC配置文件
1 |
|
(2) 前端
1 | <%@ page language="java" contentType="text/html; charset=UTF-8" |
(3) Controller
1 | package edu.hhtc.jsj.controller; |
14. SSM整合
- maven导入jar包
1 | <?xml version="1.0" encoding="UTF-8"?> |
- 文件组织结构
- 数据库设置
- 管理员表(tb_admin)
表名(中文) | 表名(英文) | |||
---|---|---|---|---|
管理员表 | tb_admin | |||
字段名 | 数据类型 | 长度 | 备注 | 说明 |
user_id | varchar | 50 | 主键 | 用户id |
login_name | varchar | 50 | 登录名 | |
user_name | varchar | 255 | 用户名 | |
password | varchar | 100 | 用户密码 | |
phone | varchar | 11 | 手机号 | |
varchar | 30 | 电子邮箱 | ||
user_state | varchar | 2 | 管理员状态 | |
user_creatdata | Datatime | 创建时间 |
- 用户表(tb_user)
表名(中文) | 表名(英文) | |||
---|---|---|---|---|
用户表 | tb_user | |||
字段名 | 数据类型 | 长度 | 备注 | 说明 |
user_id | varchar | 50 | 主键 | 用户id |
login_name | varchar | 50 | 登录名 | |
user_name | varchar | 255 | 用户名 | |
password | varchar | 100 | 用户密码 | |
phone | varchar | 11 | 手机号 | |
varchar | 30 | 电子邮箱 |
- 数字字典表(tb_base_dict)
表名(中文) | 表名(英文) | |||
---|---|---|---|---|
数字字典表 | tb_base_dict | |||
英文名称 | 数据类型 | 长度 | 备注 | 属性项名称 |
dict_id | varchar | 10 | 主键 | 数据字典id |
dict_type_code | varchar | 10 | 数据字典类别代码 | |
dict_type_name | varchar | 10 | 数据字典类别名称 | |
dict_item_name | varchar | 10 | 数据字典项目名称 | |
dict_item_code | varchar | 10 | 数据字典项目代码(可为空) | |
dict_sort | int | 11 | 排序字段 | |
dict_enable | varchar | 2 | 是否可用:1:使用,0:停用 | |
dict_memo | varchar | 50 | 备注 |
- log4j.properties【控制台输出】
1 | log4j.rootLogger=INFO,Console,File |
- db.properties【数据库参数】
1 | jdbc.driver=com.mysql.jdbc.Driver |
- redis.properties【缓存参数】
1 | redis.host=127.0.0.1 |
- resource.properties【字典dict_type_code的值】
1 | customer.from.type=002 |
- spring.xml【Spring配置文件,有redis】
1 |
|
- applicationContext.xml【不用缓存,Spring配置文件,可选】
1 |
|
- redis.properties【缓存参数】
1 | redis.host=127.0.0.1 |
- mybatis-config.xml【Mybatis配置文件,无redis】
1 |
|
- spring-redis.xml【redis配置文件】
1 |
|
- springmvc-config.xml【springMVC配置文件,无redis】
1 |
|
- springmvc.xml【有缓存,SpringMVC配置文件】
1 |
|
- generatorConfig.xml【自动生成缓存配置文件,有redis】
1 |
|
- web.xml【有redis】
1 |
|
- web.xml【无缓存】
1 |
|
- entity【实体类】
1 | package cn.com.byte1024.entity; |
- DAO【数据访问层】
1 | package cn.com.byte1024.mapper; |
- Mapper【数据访问层映射文件】
1 |
|
- service【业务逻辑层接口】
1 | package cn.com.byte1024.service; |
- service.impl【业务逻辑层实现类】
1 | package cn.com.byte1024.service.impl; |
- Controller【控制表现层】
1 | package cn.com.byte1024.controller; |
- 前端
1 | <%@ page language="java" import="java.util.*" pageEncoding="utf-8"%> |
15. 总结
总结了JavaSSM企业框架,明白要做的事情还有很多,要走的路还有很长,时间很短,却要做很多来不及的事情,随心出发最好。