根据个人学习情况,筛选出特别关注的信息,完整内容请看原版,仅仅是个人学习笔记。
目录
目录
2-5 [重点] 在Spring中装配DAO层、Service业务层(使注解的类自动转化为Bean,同时完成注入)
2-11 使用jetty运行web运用,当然也可以在IDE工具中配置Web应用服务器,比如tomcat
3-1、proxy-target-class="true/false"事务配置说明
3-1 java.lang.NoSuchMethodError: org.springframework.core.io.ResourceEditor错误
一、环境准备
1.数据库
建议采用Mysql5.X数据库
MySQL 4.1.0以前的版本不支持事务,4.1.0本身也只对事务提供有限的支持。Spring的各种声明式事务需要底层数据库的支持。
MySQL5.0增加存储过程、视图、游标、触发器、XA事务。
MySQL5.1增加事件调度器、分区、可插拔的存储引擎API、行复制、全局动态查询日志修改。
MySQL5.5默认存储引擎更改为InnoDB,提高了默认线程并发数,后台输入/输出线程控制,主线程输入/输出速率控制,操作系统内存分配程序使用控制,适应性散列索引控制,恢复组提交,多缓冲池实例,半同步复制,中继日志自动恢复,建立快速索引,高效的数据压缩等特性。
MySQL5.6中InnoDB性能加强,InnoDB死锁信息可以记录到错误日志,支持主从延时复制,增强行级复制功能,基于CRC32校验的复制事件等。
-------------示例用到的数据库表创建语法---------------
create database sampled DEFAULT CHARACTER SET utf8;
/* 创建用户信息表 */
create table t_user (
user_id INT AUTO_INCREAMENT PRIMARY KEY,
user_name VARCHAR(30),
credits INT,
password VARCHAR(30),
last_vist datetime,
last_ip varchar(30)
)ENGINE=InnoDB;
/* 创建用户登录日志表 */
create table t_login_log (
login_login_id INT AUTO_INCREAMENT PRIMARY KEY,
user_id INT,
ip VARCHAR(30),
login_datetime datetime
)ENGINE=InnoDB;
2.构建工具Maven
Repository:即放置Artifact的地方,有中央仓库、公共仓库、私有仓库及本地仓库之分。一般情况下,公司或开发者组织都需要部署一个私有仓库,可使用Nexus(http://www.sonatype.org/nexus)创建Maven私有仓库。
3.建立工程(IntelliJ IDEA)
设置源文件和配置文件都使用UTF-8编码格式
File—Settings—File Encodings—UTF-8
分别设置IDE Encoding、Project Encoding、 Default encoding for properties files
二、项目快速搭建
该示例只是简单实现用户登录的验证,成功则跳转至main页面,失败则重定向到loginCheck页面提示错误信息。主要讲解怎么搭建一个简单的Spring 项目
首先,看下项目结构的目录
2-1 根据数据库表结构,在domain创建实体类
直接贴代码,这边可以看到都实现了Serializable接口,以便可以序列化
public class LoginLog implements Serializable { private int loginLogId; private int userId; private String ip; private Date loginDate; 省略get和set.... }
public class User implements Serializable { private int userId; private String userName; private String password; private int credits; private String lastIp; private Date lastVisit; 省略get和set.... }
2-2 pom.xml文件配置
各个配置内容已有注释描述,这里不再一一说明
2-3 创建数据处理的Dao层
package com.javahx.dao; import com.javahx.domain.User; 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 java.sql.ResultSet; import java.sql.SQLException; @Repository public class UserDao { @Autowired private JdbcTemplate jdbcTemplate; private final static String MATCH_COUNT_SQL = " SELECT count(*) FROM t_user " + " WHERE user_name =? and password=? "; private final static String UPDATE_LOGIN_INFO_SQL = " UPDATE t_user SET " + " last_visit=?,last_ip=?,credits=? WHERE user_id =?"; /** * 根据用户输入信息查询用户是否存在 * @param userName 用户名 * @param password 密码 * @return */ public int getMatchCount(String userName, String password) { return jdbcTemplate.queryForObject(MATCH_COUNT_SQL, new Object[]{userName, password}, Integer.class ); } public User findUserByUserName(final String userName) { final User user = new User(); String sqlStr = " SELECT user_id,user_name,credits " + " FROM t_user WHERE user_name =? "; jdbcTemplate.query(sqlStr, new Object[]{userName}, //匿名类方式实现的回调函数 //processRow(ResultSet resultSet)负责将查询的结果从ResultSet装载到类似于领域对象的对象实例中 new RowCallbackHandler() { @Override public voi