spring基础学习-简单实例(一)
2014-04-19 11:23
176 查看
spring概要介绍:spring是一个轻量级开源框架,以IoC(Inverse of Control:控制反转)和AOP(Aspect Oriented Programming:面向切面编程)
为内核,兼具功能强大的的原生展现层spring mvc,原生持久层spring jdbc和原生业务层等技术,并且以海纳百川的胸怀整合了开源世界里众多
著名的第三方框架和类库,已经逐渐成为使用最多的JavaEE企业级应用开源框架.
通过spring提供的IoC容器,我们可以将对象之间的依赖关系交给spring管理,从而避免类和类之间的过度耦合,通过spring提供的AOP功能,
方便了面向切面编程,使许多用传统OOP不容易实现的功能可以用AOP轻松的实现,同时在spring中,我们还可以灵活的管理事务.
引用:spring的源码设计精妙,结构清晰,匠心独运,可以说是学习java技术的最佳实践范例.
下面通过一个简单的项目来展示一下开发spring web应用的整体过程,本项目用的是spring原生的展现层spring MVC,原生持久层和spring原生
的持久层spring JDBC.闲话少说,让我们开始spring的学习之旅吧!
1.功能简介.
本项目的主要目的是实现一个登陆功能,登陆页面提供一个简单的带有用户名和密码的输入表单,用户输入后提交表单,服务器程序检查是否
存在此用户名和密码的用户,如果没有返回到登陆页面,并给出错误提示,如果有记录用户成功登陆日志,并更新用户的最后登陆时间,登陆IP,
以及登陆次数.最后重定向到欢迎页面.
2.环境准备.
myeclipse10,jdk1.6,tomcat7.x,mysql5.x.
如何配置jdk和tomcat环境变量,安装myeclipse,jdk,mysql和在myeclipse中集成tomcat和jdk等这些操作在这里不做详细介绍.
a.创建库表.
然后在mysql的命令行窗口通过执行source C:\Users\10120-sdx\Desktopspring-demo.sql也可达到相同的效果.
其中在创建表的语句中engine=innodb的意思是指定表的引擎为innodb类型,该类型表支持事务,而mysql默认采用的引擎不支持事务,
仅存储数据,但是采用默认的引擎读写速度快.
b.创建项目.
首先打开myeclipse工具,通过Window-Preference-General-workspace-Text file encoding将myeclipse的工作空间的编码格式设置为utf8,
否则myecipse采用系统默认的GBK编码格式.
然后创建一个名为spring-demo的web项目,并导入需要的jar包,本项目用的是spring3.x,spring3.x采用模块化的包,
如org.springframework.<module>-<version>.jar,其中module包括core,benas,context,jdbc,transaction,web,aop,asm等.
最好还需要引入mysql数据库驱动类库mysql.jar,数据源类库commons-dbcp.jar,对象池类库commons-pool.jar,日志类库
common-logging.jar和log4j.jar等.
3.项目编码.
在创建好的spring-demo项目中同时创建4个包:com.ilucky.spring.demo.service,com.ilucky.spring.demo.dao,
com.ilucky.spring.demo.web和com.ilucky.spring.demo.model.其中包的规划对于大型项目来说特别重要,
它直接关系到项目的部署和分发的方便性,但是对于我们这个小项目来说不用考虑那么多.
a.model的创建.
model包括user和LoginLog,一般model要实现Serializable接口,以便可以序列化.直接看代码.
这三个字段我们都可以通过userId字段在User表中查询出来.那么为什么要这么设计表呢,因为适当的冗余字段可以提高数据库效率和简化项目操作.
举例说明,上面的LoginLog表中的数据我们都要写入日志,如果按照如上设计表结构我们每次写入日志时只需要查询LoginLog这一张表即可
不需要关联User表,即在日志中写入userid:1-userName:admin-userVisitIp:192.168.0.1-userVisitTime:2014/04/19 11:13:00登录.相反,
如果读登录日志表时还需要关联User表,这样会大大的降低效率.
时间不早了,亲们该吃午饭了,下午咱们继续spring实践......
为内核,兼具功能强大的的原生展现层spring mvc,原生持久层spring jdbc和原生业务层等技术,并且以海纳百川的胸怀整合了开源世界里众多
著名的第三方框架和类库,已经逐渐成为使用最多的JavaEE企业级应用开源框架.
通过spring提供的IoC容器,我们可以将对象之间的依赖关系交给spring管理,从而避免类和类之间的过度耦合,通过spring提供的AOP功能,
方便了面向切面编程,使许多用传统OOP不容易实现的功能可以用AOP轻松的实现,同时在spring中,我们还可以灵活的管理事务.
引用:spring的源码设计精妙,结构清晰,匠心独运,可以说是学习java技术的最佳实践范例.
下面通过一个简单的项目来展示一下开发spring web应用的整体过程,本项目用的是spring原生的展现层spring MVC,原生持久层和spring原生
的持久层spring JDBC.闲话少说,让我们开始spring的学习之旅吧!
1.功能简介.
本项目的主要目的是实现一个登陆功能,登陆页面提供一个简单的带有用户名和密码的输入表单,用户输入后提交表单,服务器程序检查是否
存在此用户名和密码的用户,如果没有返回到登陆页面,并给出错误提示,如果有记录用户成功登陆日志,并更新用户的最后登陆时间,登陆IP,
以及登陆次数.最后重定向到欢迎页面.
2.环境准备.
myeclipse10,jdk1.6,tomcat7.x,mysql5.x.
如何配置jdk和tomcat环境变量,安装myeclipse,jdk,mysql和在myeclipse中集成tomcat和jdk等这些操作在这里不做详细介绍.
a.创建库表.
drop database if exists spring_demo; create database spring_demo default character set utf8; use spring_demo; create table sd_user( user_id int auto_increment primary key, user_name varchar(40), user_password varchar(40), user_visit_count int, user_visit_ip varchar(40), user_visit_time datetime )engine=innodb; create table sd_user_login_log( login_log_id int auto_increment primary key, user_id int, user_name varchar(40), user_visit_ip varchar(40), user_visit_time datetime )engine=innodb; insert into sd_user(user_name,user_password) values('admin','123456'); show tables; select * from sd_user;将上述创建库表的语句直接复制到mysql的命令行窗口执行即可,当然也可以将上述创建库表的语句放到spirng-demo.sql文件中,
然后在mysql的命令行窗口通过执行source C:\Users\10120-sdx\Desktopspring-demo.sql也可达到相同的效果.
其中在创建表的语句中engine=innodb的意思是指定表的引擎为innodb类型,该类型表支持事务,而mysql默认采用的引擎不支持事务,
仅存储数据,但是采用默认的引擎读写速度快.
b.创建项目.
首先打开myeclipse工具,通过Window-Preference-General-workspace-Text file encoding将myeclipse的工作空间的编码格式设置为utf8,
否则myecipse采用系统默认的GBK编码格式.
然后创建一个名为spring-demo的web项目,并导入需要的jar包,本项目用的是spring3.x,spring3.x采用模块化的包,
如org.springframework.<module>-<version>.jar,其中module包括core,benas,context,jdbc,transaction,web,aop,asm等.
最好还需要引入mysql数据库驱动类库mysql.jar,数据源类库commons-dbcp.jar,对象池类库commons-pool.jar,日志类库
common-logging.jar和log4j.jar等.
3.项目编码.
在创建好的spring-demo项目中同时创建4个包:com.ilucky.spring.demo.service,com.ilucky.spring.demo.dao,
com.ilucky.spring.demo.web和com.ilucky.spring.demo.model.其中包的规划对于大型项目来说特别重要,
它直接关系到项目的部署和分发的方便性,但是对于我们这个小项目来说不用考虑那么多.
a.model的创建.
model包括user和LoginLog,一般model要实现Serializable接口,以便可以序列化.直接看代码.
package com.ilucky.spring.demo.model; import java.io.Serializable; import java.util.Date; /** * @author IluckySi * @date 20140419 */ public class User implements Serializable { private static final long serialVersionUID = 1L; private int userId; private String userName; private String userPassword; private int userVisitCount; private String userVisitIp; private Date userVisitTime; public int getUserId() { return userId; } public void setUserId(int userId) { this.userId = userId; } public String getUserName() { return userName; } public void setUserName(String userName) { this.userName = userName; } public String getUserPassword() { return userPassword; } public void setUserPassword(String userPassword) { this.userPassword = userPassword; } public int getUserVisitCount() { return userVisitCount; } public void setUserVisitCount(int userVisitCount) { this.userVisitCount = userVisitCount; } public String getUserVisitIp() { return userVisitIp; } public void setUserVisitIp(String userVisitIp) { this.userVisitIp = userVisitIp; } public Date getUserVisitTime() { return userVisitTime; } public void setUserVisitTime(Date userVisitTime) { this.userVisitTime = userVisitTime; } public static long getSerialversionuid() { return serialVersionUID; } }
package com.ilucky.spring.demo.model; package com.ilucky.spring.demo.model; import java.io.Serializable; import java.util.Date; /** * @author IluckySi * @date 20140419 */ public class LoginLog implements Serializable { private static final long serialVersionUID = 1L; private String loginLogId; private int userId; private String userName; private String userVisitIp; private Date userVisitTime; public String getLoginLogId() { return loginLogId; } public void setLoginLogId(String loginLogId) { this.loginLogId = loginLogId; } public int getUserId() { return userId; } public void setUserId(int userId) { this.userId = userId; } public String getUserName() { return userName; } public void setUserName(String userName) { this.userName = userName; } public String getUserVisitIp() { return userVisitIp; } public void setUserVisitIp(String userVisitIp) { this.userVisitIp = userVisitIp; } public Date getUserVisitTime() { return userVisitTime; } public void setUserVisitTime(Date userVisitTime) { this.userVisitTime = userVisitTime; } }从上面的两个model中我们发现在LoginLog中存在三个冗余字段,即userName,userVisitIp和userVisitTime,之所以称之为冗余字段,是因为
这三个字段我们都可以通过userId字段在User表中查询出来.那么为什么要这么设计表呢,因为适当的冗余字段可以提高数据库效率和简化项目操作.
举例说明,上面的LoginLog表中的数据我们都要写入日志,如果按照如上设计表结构我们每次写入日志时只需要查询LoginLog这一张表即可
不需要关联User表,即在日志中写入userid:1-userName:admin-userVisitIp:192.168.0.1-userVisitTime:2014/04/19 11:13:00登录.相反,
如果读登录日志表时还需要关联User表,这样会大大的降低效率.
时间不早了,亲们该吃午饭了,下午咱们继续spring实践......
相关文章推荐
- spring基础学习-简单实例(三)
- spring基础学习-简单实例(二)
- 【Spring学习03】Spring简单入门实例
- Spring学习基础---一个简单的配置案例
- SSM框架(Spring Spring MVC Mybatis)基础入门学习3——Mybits入门实例(实例免费下载!)
- spring 学习(1.3) 入门基础- AOP 实例
- maven基础学习(三)-简单实例(运行)
- 学习Spring MVC,关于注解的Spring MVC,关于控制器的Spring MVC,学习Spring,简单Spring MVC实例
- Spring学习(2)一个简单的AOP实例
- SpringBoot使用Thymeleaf3.0自定义标签,简单实例。快速学习!
- maven基础学习(二)-简单实例(编译-打包-安装)
- spring基础学习之Ioc-反射简单介绍(四)
- Vue2.0基础学习(3)--- 一个简单的实例学习
- Spring基础之简单实例演示
- Spring学习笔记---AOP的简单实例
- maven基础学习(四)-简单实例(使用Archetype生成项目骨架)
- 【Spring学习笔记一】-Spring配置和简单实例
- Android 开发实例教程 零基础学习 1小时入门 图解说明教程 化复杂为简单 配置好的android开发环境 带实例
- 从0开始学习SpringCould(2)--SpringBoot yml简单配置
- salesforce 零基础学习(二十二)Test简单使用