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的更多相关文章

  1. Spring 3.x 实践 第一个例子(Spring 3.x 企业应用开发实战读书笔记第二章)

    前言:工作之后一直在搞android,现在需要更多和后台的人员交涉,技术栈不一样,难免鸡同鸭讲,所以稍稍学习下. 这个例子取自于<Spring 3.x 企业应用开发实战>一书中的第二章,I ...

  2. Spring 3.x企业实用开发实战(1)

    有关Spring的介绍这里就不赘述了,主要是学习了陈雄华版的<Spring 3.x企业应用开发实战>并做了一点笔记,以助于后期的回顾和复习. 废话不多说,直接进入主题,以下所有代码基于&l ...

  3. 《精通Spring 4.X企业应用开发实战》读书笔记1-1(IoC容器和Bean)

    很长一段时间关注在Java Web开发的方向上,提及到Jave Web开发就绕不开Spring全家桶系列,使用面向百度,谷歌的编程方法能够完成大部分的工作.但是这种不系统的了解总觉得自己的知识有所欠缺 ...

  4. 《精通Spring+4.x++企业应用开发实战》读后感

    引言 还记得大三时上培训班的是时候,当时的培训老师说自己是本地讲解spring最好的讲师,但是后来等我实习了看了<Spring 3.x 企业应用开发实战>以及后续版本<精通Sprin ...

  5. 《精通Spring 4.x 企业应用开发实战》学习笔记

    第四章 IoC容器 4.1 IoC概述 IoC(Inverse of Control 控制反转),控制是指接口实现类的选择控制权,反转是指这种选择控制权从调用类转移到外部第三方类或容器的手中. 也就是 ...

  6. 《Spring 3.x 企业应用开发实战》目录

    图书信息:陈雄华 林开雄 编著 ISBN 978-7-121-15213-9 概述: 第1章:对Spring框架进行宏观性的概述,力图使读者建立起对Spring整体性的认识. 第2章:通过一个简单的例 ...

  7. Spring 3.x企业应用开发实战(14)----事务

    Spring虽然提供了灵活方便的事务管理功能,但这些功能都是基于底层数据库本身的事务处理机制工作的.要深入了解Spring的事务管理和配置,有必要先对数据库事务的基础知识进行学习. 何为数据库事务 “ ...

  8. Spring 3.x企业应用开发实战(9-1)----依赖注入

    Spring中的依赖注入方式:属性注入.构造函数注入和工厂方式注入. 1.属性注入 属性注入即通过setXxx()方法注入Bean的属性值或依赖对象. 属性注入要求Bean提供一个默认的构造函数,在J ...

  9. Spring 3.x企业应用开发实战(11)----基于@AspectJ配置切面

    1.@AspectJ的JDK必须是JDK 5.0+ 基于@AspectJ配置切面 @AspectJ采用注解描述切点.增强,两者只是表达式方式不同,效果相同. @AspectJ语法基础-----切点表达 ...

随机推荐

  1. javascript获取div高度

    DOM的: 获得了div的高度值 = document.getElementById("目标id").offsetHeight;

  2. 你知道HTML标签设计的本意吗? 把HTML标签用到该用的地方去

    "DIV+CSS"这个词汇不知道害了多少人,也许其提出者本意并没有错,但是跟风者从表现曲解了其意思,认为整个页面就应当是DIV+CSS文件的组合.这样做,对于视觉上并没有什么影响, ...

  3. eclipse 比较好的插件

    tomcat 插件 egit github 插件 subeclipse 插件 Properties Editor Properties Editor 编辑java的属性文件,并可以自动存盘为Unico ...

  4. [151225] Python3 实现最大堆、堆排序,解决TopK问题

    参考资料: 1.算法导论,第6章,堆排序 堆排序学习笔记及堆排序算法的python实现 - 51CTO博客 堆排序 Heap Sort - cnblogs 小根堆实现优先队列:Python实现 -cn ...

  5. 转:使用xhprof进行线上PHP性能追踪及分析

    原文来自于:http://avnpc.com/pages/profiler-php-performance-online-by-xhprof 原创作者:AlloVince 之前一直使用基于Xdebug ...

  6. BZOJ 3893 Cow Jog

    Description The cows are out exercising their hooves again! There are \(N\) cows jogging on an infin ...

  7. Flux

    Ken Wheeler 构建React 应用的一套架构.  应用程序架构, 单向数据流方案. Dispatcher 的开源库.   一种全局pub/sub 系统的事件处理器, 用于 向所注册的加调函数 ...

  8. cf B Red and Blue Balls

    思路:把字符串转化为一个二进制,遇到B就是一个数二进制中的1,答案就是这个数. #include <cstdio> #include <cstring> #include &l ...

  9. cf B Three matrices

    #include <cstdio> #include <cstring> #include <algorithm> using namespace std; ][] ...

  10. 这十大MCU厂商瓜分着中国市场

    MCU(Micro Control Unit)中文名称为微控制单元,又称单片微型计算机(Single Chip Microcomputer)或者单片机,是指随着大规模集成电路的出现及其发展,将计算机的 ...