• 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就这么简单》陈雄华,林开雄著

  • 相关阅读:
    VC连接MySql
    Vc数据库编程基础MySql数据库的表查询功能
    Vc数据库编程基础MySql数据库的表增删改查数据
    【Anroid】9.1 ListView相关类及其适配器
    【Android】8.4 让主题自适应不同的Android版本
    【Android】8.3 自定义主题
    【Android】8.2 动态选择和设置主题
    【Android】8.1 主题基本用法
    【Android】7.8 MyDemos项目的结构和主界面相关代码
    【Android】7.7 以后改为在Win10下开发了
  • 原文地址:https://www.cnblogs.com/wenjingu/p/3829209.html
Copyright © 2020-2023  润新知