您的位置:首页 > 编程语言 > Java开发

Spring学习(四)——使用Spring JDBC访问数据库

2014-07-07 10:45 393 查看
本篇我们将在上一篇/article/5949990.html的Demo程序的基础上增加数据持久层和业务层,实现登录验证功能。

1、修改gradle文件,增加依赖包,代码如下:

apply plugin: 'idea'
apply plugin: 'java'

repositories {
mavenCentral()
maven { url "http://repo.spring.io/release" }
}

dependencies {
compile(
"org.springframework:spring-context:4.0.5.RELEASE",
"org.springframework:spring-web:4.0.5.RELEASE",
"org.springframework:spring-webmvc:4.0.5.RELEASE",
"org.springframework:spring-context-support:4.0.5.RELEASE",
"org.apache.velocity:velocity:1.7",
"org.apache.velocity:velocity-tools:2.0",
"org.anarres.gradle:gradle-velocity-plugin:1.0.0",
"org.springframework:spring-jdbc:4.0.5.RELEASE",
"commons-dbcp:commons-dbcp:1.4",
"org.springframework:spring-test:4.0.5.RELEASE",
"org.testng:testng:6.8.8"
)
testCompile("org.springframework:spring-test:4.0.5.RELEASE")
runtime("jstl:jstl:1.2")
}

task copyJars(type: Copy) {
from configurations.runtime
into 'lib' // 目标位置
}


2、创建数据库表

sql脚本文件如下:

DROP DATABASE IF EXISTS sampledb;
CREATE DATABASE sampledb DEFAULT CHARACTER SET utf8;
USE sampledb;

##创建用户表
CREATE TABLE t_user (
user_id   INT AUTO_INCREMENT PRIMARY KEY,
user_name VARCHAR(30),
password  VARCHAR(32),
last_visit datetime,
last_ip  VARCHAR(23)
)ENGINE=InnoDB;

##创建用户登录日志表
CREATE TABLE t_login_log (
login_log_id  INT AUTO_INCREMENT PRIMARY KEY,
user_id   INT,
ip  VARCHAR(23),
login_datetime datetime
)ENGINE=InnoDB;

##插入初始化数据
INSERT INTO t_user (user_name,password)
VALUES('admin','123456');
COMMIT;


打开MySQL Workbench,点击菜单【Database】->【Connect to Database】连接数据库后,执行上述脚本。

3、实现领域对象和数据访问对象

在src/main/java/domain文件夹下新建两个类User,LoginLog,代码请参考附件。

在src/main/java/dao文件夹下新建两个类UserDao,LoginLogDao,代码请参考附件。

对数据库的操作都是通过一个JdbcTemplate对象进行操作的,JdbcTemplate是Spring Jdbc包的核心类,Spring Jdbc包是对JDBC的一个轻量级封装。

对该包的使用请参考其他更详细的资料。

4、实现业务层

在src/main/java/service文件夹下新建类UserService,代码请参考附件。该类通过调用持久层的接口实现业务逻辑。

5、控制器

在src/main/java/controller文件夹下新建类LoginCommand,代码请参考附件。LoginController类代码修改如下:

@Controller
public class LoginController {

@Autowired
private UserService userService;

@RequestMapping(value = "/login.html")
public String loginPage() {
return "login";
}

@RequestMapping(value = "/loginCheck.html")
public ModelAndView loginCheck(HttpServletRequest request, LoginCommand loginCommand) {
boolean isValidUser =
userService.hasMatchUser(loginCommand.getUserName(),
loginCommand.getPassword());
if (!isValidUser) {
return new ModelAndView("login", "error", "用户名或密码错误。");
} else {
User user = userService.findUserByUserName(loginCommand
.getUserName());
user.setLastIp(request.getLocalAddr());
user.setLastVisit(new Date());
userService.loginSuccess(user);
request.getSession().setAttribute("user", user);
return new ModelAndView("main");
}
}
}


6、修改配置文件

修改applicationContext.xml文件,添加数据源和Jdbc模板,以便Spring可自动注入JdbcTemplate对象。

<context:component-scan base-package="service"/>
<context:component-scan base-package="dao"/>

<!-- 配置数据源 -->
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"
destroy-method="close"
p:driverClassName="com.mysql.jdbc.Driver"
p:url="jdbc:mysql://localhost:3306/sampledb"
p:username="guwenjin"
p:password="p@ssw0rd" />

<!-- 配置Jdbc模板  -->
<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate"
p:dataSource-ref="dataSource" />


spring-web-servlet.xml文件中新增如下一行,以便在LoginController类中Spring可自动注入UserService对象。

<context:component-scan base-package="service"/>


6、单元测试

在src/test/java/service文件夹下新建类UserServiceTest,代码如下:

@ContextConfiguration(locations = {"/applicationContext.xml"})
public class UserServiceTest extends AbstractTestNGSpringContextTests {

@Autowired
private UserService userService;

@Test
public void hasMatchUser() {
boolean b1 = userService.hasMatchUser("admin", "123456");
boolean b2 = userService.hasMatchUser("admin", "1111");
assertTrue(b1);
assertTrue(!b2);
}

@Test
public void findUserByUserName() {
User user = userService.findUserByUserName("admin");
assertEquals(user.getUserName(), "admin");
}

@Test
public void loginSuccess() {
User user = userService.findUserByUserName("admin");
user.setUserId(1);
user.setUserName("admin");
user.setLastIp("192.168.20.106");
user.setLastVisit(new Date());
userService.loginSuccess(user);
}
}


测试框架采用了TestNG,其依赖spring-test、testng两个库,其详细使用方法请参考其他资料。

7、运行网站

展现层代码不用改动,直接启动Tomcat,系统可对登录页面中填写的用户名密码进行验证,并将登录信息记录日志。

源码下载http://files.cnblogs.com/wenjingu/VelocityDemo3.0.zip,lib中的jar包上传时删除了,运行前请先运行命令:gradle copyJars下载jar包。

参考书籍:《Spring 3.0就这么简单》陈雄华,林开雄著
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: