学习《Spring 3.x 企业应用开发实战》Day-1
Day-1 记录自己学习spring的笔记
提要:根据《Spring 3.x 企业应用开发实战》开头一个用户登录的例子,按照上面敲的。
1.项目分层
aaarticlea/png;base64,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" alt="" />
dao:持久层
domain:领域对象(个人理解为数据表映射成一个Java类)
service:业务层
web:展现层
2.构建数据表
2.1 数据库采用MySql 5.x 版本
2.2 建立两个数据表 user 和 user_log 表 user 用来存放用户信息,user_log用来存放user登录信息
2.3 user:
aaarticlea/png;base64,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" alt="" />
user_log:
aaarticlea/png;base64,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" alt="" />
3.编写UserDao、LoginLogDao类
3.1 UserDao
package com.zwy.dao; import java.sql.ResultSet;
import java.sql.SQLException; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.RowCallbackHandler;
import org.springframework.stereotype.Repository; import com.zwy.domain.User; /**
* 通过@Repository注解定义一个DAO
* */
@Repository
public class UserDao {
@Autowired//自动注入JdbcTemplate
private JdbcTemplate jdbcTemplate; /**
* 查询用户是否存在
* */
public int getMacthCount(String username,String password){
String sql="SELECT COUNT(*) FROM user WHERE user_name=? and password=? ";
return jdbcTemplate.queryForInt(sql, username,password);
}
/**
* 根据username找到相应的user 记录(对象)
* */
public User findUserByUserName(final String username){
String sql="SELECT id,user_name,credits FROM user WHERE user_name=?";
final User user=new User();
jdbcTemplate.query(sql, new Object[]{username}, new RowCallbackHandler() {
public void processRow(ResultSet reSet) throws SQLException {
user.setId(reSet.getInt("id"));
user.setUserName(reSet.getString("user_name"));
user.setCredits(reSet.getInt("credits"));
}
});
return user;
}
/**
* 根据useid更新相应的user (对象)在数据库中的记录
* 更新积分,登录IP,登录时间
* */
public void updateLoginInfo(User user){
String sql="UPDATE user SET credits=?,last_ip=?,last_time=?"
+" WHERE id=?";
jdbcTemplate.update(sql, user.getCredits(),user.getLastIp(),user.getLastTime(),user.getId());
}
}
3.2 LoginLogDao类
package com.zwy.dao; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Repository; import com.zwy.domain.UserLog; @Repository
public class LoginLogDao {
@Autowired
private JdbcTemplate jdbcTemplate; /**
* 插入一条登录记录
* */
public void insertLoginLog(UserLog user){
String sql="INSERT INTO user_log(user_id,ip,log_time)"
+" VALUES (?,?,?)";
jdbcTemplate.update(sql,user.getUserId(),user.getIp(),user.getLogTime());
}
}
省略了domain 实体类的代码
4.业务层UserService的代码
通过业务层组织持久化层的DAO完成业务逻辑操作
package com.zwy.service; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import com.zwy.dao.LoginLogDao;
import com.zwy.dao.UserDao;
import com.zwy.domain.User;
import com.zwy.domain.UserLog; @Service
public class UserService {
@Autowired
private UserDao userDao;
@Autowired
private LoginLogDao loginLogDao;
/**
* 登录业务
* */
public boolean userLogin(String username,String password){
int count=userDao.getMacthCount(username, password);
return count>0;
}
/**
* 根据username找到User对象
* */
public User finUserByUserName(String username){
User user=userDao.findUserByUserName(username);
return user;
}
/**
* 成功登录,更新user的积分并添加到user_log
* */
public void successLoginLog(User user){
if(user!=null){
user.setCredits(5+user.getCredits());
UserLog userLog=new UserLog();
userLog.setUserId(user.getId());
userLog.setIp(user.getLastIp());
userLog.setLogTime(user.getLastTime());
userDao.updateLoginInfo(user);
loginLogDao.insertLoginLog(userLog);
}
}
}
5.配置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:p="http://www.springframework.org/schema/p"
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-3.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.0.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx-3.0.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-3.0.xsd
">
<!--1. 扫描类包,把标注spring注解的类自动转化成bean,同时完成bean的注入 -->
<context:component-scan base-package="com.zwy.dao"/>
<context:component-scan base-package="com.zwy.service" />
<!-- 2.定义一个使用DBCP的数据源 -->
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"
destroy-method="close"
p:driverClassName="com.mysql.jdbc.Driver"
p:url="jdbc:mysql://192.168.1.106:3306/spring"
p:username="root"
p:password="123456"
/>
<!-- 3.定义Spring-JDBC模板bean-->
<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate" p:dataSource-ref="dataSource" />
<!--4.配置事务管理器-->
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"
p:dataSource-ref="dataSource"
/>
<!--5.配置AOP,让service包下的方法处于增强事务中-->
<aop:config proxy-target-class="true">
<aop:pointcut expression=" execution(* com.zwy.service..*(..))" id="serviceMethod"/>
<aop:advisor advice-ref="txAdvice" pointcut-ref="serviceMethod"/>
</aop:config>
<tx:advice id="txAdvice" transaction-manager="transactionManager">
<tx:attributes>
<tx:method name="*"/>
</tx:attributes>
</tx:advice>
</beans>
6.在Junit4下测试Service的方法
package com.zwy.service; import java.util.Date; import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; import com.zwy.domain.User; @RunWith(SpringJUnit4ClassRunner.class)//1.基于junit4的spring测试框架
@ContextConfiguration(locations={"/applicationContext.xml"})//2.启动spring容器
public class TestService { @Autowired
private UserService userService; @org.junit.Test
public void userLogin(){
boolean b1=userService.userLogin("admin", "123456");
boolean b2=userService.userLogin("admin", "1111");
System.out.println(b1+","+b2);
}
@org.junit.Test
public void findUser(){
User user=userService.finUserByUserName("admin");
System.out.println(user);
}
@Test
public void successLog(){
User user=userService.finUserByUserName("admin");
user.setLastIp("192.168.1.101");
user.setLastTime(new Date());
userService.successLoginLog(user);
}
}
7.编写Web层,用到SpringMVC框架
ModelAndView 是这个包下的org.springframework.web.servlet.ModelAndView;不要搞成其他包下相同名字的类
package com.zwy.web; import java.util.Date; import javax.servlet.http.HttpServletRequest; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView; import com.zwy.domain.User;
import com.zwy.service.UserService; //标注成为springMVC controller
@Controller
public class LoginController { @Autowired
private UserService userService;
//来自处理index.html
@RequestMapping(value="/index.html")
public String loginPage(){
return "login";
}
//来自处理loginCheck.html的请求
@RequestMapping(value="/loginCheck.html")
public ModelAndView loginCheck(HttpServletRequest request,LoginCommod loginCommod){
boolean isLogin=userService.userLogin(loginCommod.getUsername(), loginCommod.getPassword());
if(isLogin){
User user=userService.finUserByUserName(loginCommod.getUsername());
user.setLastIp(request.getRemoteAddr());
user.setLastTime(new Date());
userService.successLoginLog(user);
request.getSession().setAttribute("user", user);
return new ModelAndView("main");
}else {
//参数1:逻辑视图名 参数2:数据模型 ---参数3:数据对象
//request会以(数据模型,数据对象)的形势返回。
return new ModelAndView("login", "error", "用户名或者密码错误!");
}
} }
package com.zwy.web;
//封装了form表单提交的信息
public class LoginCommod {
private String username;
private String password;
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
} }
8配置web.xml
web容器自动启动Spring容器
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.5" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
<!--1. 从类路径下加载spring配置文件,classpath关键字特指类路径下加载 -->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:applicationContext.xml</param-value>
</context-param>
<!-- 2.负责启动spring容器监听器,它将引用1处的上下文参数获得spring配置文件地址 -->
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<!-- spring MVC主控制的servlet -->
<servlet>
<!-- spring MVC的配置文件的名字 serviletName-servlet.xml -->
<servlet-name>zwy</servlet-name>
<servlet-class> org.springframework.web.servlet.DispatcherServlet</servlet-class>
<!--
1)load-on-startup元素标记容器是否在启动的时候就加载这个servlet(实例化并调用其init()方法)。
2)正数的值越小,该servlet的优先级越高,应用启动时就越先加载。
-->
<load-on-startup>2</load-on-startup>
</servlet>
<!-- spring MVC处理的URL -->
<servlet-mapping>
<servlet-name>zwy</servlet-name>
<url-pattern>*.html</url-pattern>
</servlet-mapping>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
</web-app>
9.配置zwy-servlet.xml
放在WEB-INF目录下,放在src目录下报错
<?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:p="http://www.springframework.org/schema/p"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.0.xsd
">
<!-- 1.扫描web包,应用Spring注解 -->
<context:component-scan base-package="com.zwy.web" />
<!--
2.配置视图解析器,将ModelAndView及字符串解析为具体的页面
prefix指定在视图名所添加的前缀
suffix指定在视图名后添加的后缀
InternalResourceViewResolver:通过在逻辑视图名前后加后缀
-->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"
p:viewClass="org.springframework.web.servlet.view.JstlView"
p:prefix="/WEB-INF/jsp/"
p:suffix=".jsp"
/>
</beans>
**注意 加入log4j日志框架,否则Spring框架会报错
学习《Spring 3.x 企业应用开发实战》Day-1的更多相关文章
- Spring 3.x 实践 第一个例子(Spring 3.x 企业应用开发实战读书笔记第二章)
前言:工作之后一直在搞android,现在需要更多和后台的人员交涉,技术栈不一样,难免鸡同鸭讲,所以稍稍学习下. 这个例子取自于<Spring 3.x 企业应用开发实战>一书中的第二章,I ...
- Spring 3.x企业实用开发实战(1)
有关Spring的介绍这里就不赘述了,主要是学习了陈雄华版的<Spring 3.x企业应用开发实战>并做了一点笔记,以助于后期的回顾和复习. 废话不多说,直接进入主题,以下所有代码基于&l ...
- 《精通Spring 4.X企业应用开发实战》读书笔记1-1(IoC容器和Bean)
很长一段时间关注在Java Web开发的方向上,提及到Jave Web开发就绕不开Spring全家桶系列,使用面向百度,谷歌的编程方法能够完成大部分的工作.但是这种不系统的了解总觉得自己的知识有所欠缺 ...
- 《精通Spring+4.x++企业应用开发实战》读后感
引言 还记得大三时上培训班的是时候,当时的培训老师说自己是本地讲解spring最好的讲师,但是后来等我实习了看了<Spring 3.x 企业应用开发实战>以及后续版本<精通Sprin ...
- 《精通Spring 4.x 企业应用开发实战》学习笔记
第四章 IoC容器 4.1 IoC概述 IoC(Inverse of Control 控制反转),控制是指接口实现类的选择控制权,反转是指这种选择控制权从调用类转移到外部第三方类或容器的手中. 也就是 ...
- 《Spring 3.x 企业应用开发实战》目录
图书信息:陈雄华 林开雄 编著 ISBN 978-7-121-15213-9 概述: 第1章:对Spring框架进行宏观性的概述,力图使读者建立起对Spring整体性的认识. 第2章:通过一个简单的例 ...
- Spring 3.x企业应用开发实战(14)----事务
Spring虽然提供了灵活方便的事务管理功能,但这些功能都是基于底层数据库本身的事务处理机制工作的.要深入了解Spring的事务管理和配置,有必要先对数据库事务的基础知识进行学习. 何为数据库事务 “ ...
- Spring 3.x企业应用开发实战(9-1)----依赖注入
Spring中的依赖注入方式:属性注入.构造函数注入和工厂方式注入. 1.属性注入 属性注入即通过setXxx()方法注入Bean的属性值或依赖对象. 属性注入要求Bean提供一个默认的构造函数,在J ...
- Spring 3.x企业应用开发实战(11)----基于@AspectJ配置切面
1.@AspectJ的JDK必须是JDK 5.0+ 基于@AspectJ配置切面 @AspectJ采用注解描述切点.增强,两者只是表达式方式不同,效果相同. @AspectJ语法基础-----切点表达 ...
随机推荐
- Javascript 类数组(Array-like)对象
Javascript中的类数组对象(Array-like object)指的是一些看起来像数组但又不是数组的对象.Javascript中的arguments变量.document.getElement ...
- 基于Qt QGraphicsView的多点触摸绘图
本应用于基于QGraphicsView框架,实现多点触摸. 工程仅仅演示了多点触摸绘图,源自我前段时间一款基于Qt的绘图软件. 工程结构: kmp.h 定义了枚举 slide.h/cpp 定义了派生于 ...
- int*-------int
a=(int)((int*)0 + 4)求a是多少 大家看图应该明白了 十六进制0x00000010转换为十进制就是16
- Android 即时语音聊天工具 开发
使用融云SDK 1. 功能需求分析 1.1 核心功能需求: * 即时通讯 * 文字聊天 * 语音聊天 1.2 辅助功能需求: * 注册.登录 * 好友添加功能 * 好友关系管理 2. 融云即时通讯平台 ...
- Dao操作的抽取,BaseDao
Dao操作通用的步骤: 0. 写SQL语句 1. 获取连接 2. 创建stmt 3. 执行sql a) 更新 b) 查询 4. 关闭/异常 代码: BaseDao /** * 通用的dao,自己写的所 ...
- Vim的学习心得
现在的工作是在unix平台,平时是用UE的ftp功能来写代码的,有时候文件大了,传输就很慢,而且经常不是很稳定.下定决心要学学Vim(现在应该没有人用原始的vi了吧),在经过二周的使用后,发现Vim实 ...
- MAC 开发工具
web开发编辑器 Espresso下载地址 密码: i9hr
- 支付宝集成获取私钥与公钥-b
项目需要,需要在客户端集成支付宝接口.就研究了一下:因为使用支付宝接口,就需要到支付宝官网:注册帐号,并申请.下面讲的是申请好之后的操作.登录成功之后, 店家我的商家服务—在页面的下方找到——&g ...
- 解决win8与VC++6.0不兼容问题
找到VC++6.0安装文件夹Bin下的MSDEV.EXE程序 将MSDEV名字改为MSDEV1(或MSDEV2,3...) 右击改好的MSDEV1,打开属性面板,选择兼容性,勾上“在兼容模式下运行”, ...
- 火星02坐标转换为WGS84坐标
import java.io.BufferedReader; import java.io.File; import java.io.FileNotFoundException; import jav ...