Spring學習(四)——使用Spring JDBC訪問數據庫


本篇我們將在上一篇http://www.cnblogs.com/wenjingu/p/3824294.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就這么簡單》陳雄華,林開雄著


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM