文档章节

Spring学习总结4——使用SpringJDBC访问数据库

yope
 yope
发布于 2015/02/26 13:08
字数 649
阅读 126
收藏 1
点赞 0
评论 2

引包的问题在此不做详述,下面是viewspace-dao.xml中的关键配置

<!-- 扫描com.sunsharing.dao包下所有标注@Repository的DAO组件 -->
<context:component-scan base-package="com.sunsharing.springdemo.dao"/>
<!--使用spring提供的PropertyPlaceholderConfigurer读取数据库配置信息.properties-->
<bean id="propertyConfigurer"
    class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
    <property name="location" value="classpath:jdbc.properties"/>
</bean>
<!--数据源配置-->
    <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"
    destroy-method="close"
    p:driverClassName="${jdbc.driverClassName}"
    p:url="${jdbc.url}"
    p:username="${jdbc.username}"
    p:password="${jdbc.password}"/>
<!--jdbcTemplate装配-->
<bean id="jdbcTemplate"
      class="org.springframework.jdbc.core.JdbcTemplate"
      p:dataSource-ref="dataSource"/>

domain层java代码

package com.sunsharing.springdemo.domain;
/**
 * Created by nyp on 2015/2/5.
 */

public class User {  
  //建立一个user对象,对应数据库中的各个属性,并给出set,get方法
    private int userId;
 
    private String userName;
  
    private String password;
 
    private String lastIp; 
   
   private String lastVisit;
    public int getUserId() {
        return userId;
    }

    public void setUserId(int userId) {
        this.userId = userId;
    }

    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;
    }

    public String getLastIp() {
        return lastIp;
    }

    public void setLastIp(String lastIp) {
        this.lastIp = lastIp;
    }

    public String getLastVisit() {
        return lastVisit;
    }
    public void setLastVisit(String lastVisit) {
        this.lastVisit = lastVisit;
    }

}

dao层java代码

package com.sunsharing.springdemo.dao;
import com.sunsharing.springdemo.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;
import java.util.List;

/**
 * Created by nyp on 2015/2/5.
 */
//通过Repository 注入bean
@Repository
public class UserDao  {   
    //自动注入jdbcTemplate
    @Autowired
    private JdbcTemplate jdbcTemplate;  
   
    /**
     * 使用jdbcTemplate查询用户
     * @param userName 用户名查询条件
     * @return 用户名匹配的User对象
     */
 public User findUserByNameJdbc(final String userName){
                                            //为了使userName可以再内部类中使用,必须声明为final
     String sqlStr="SELECT * FROM T_USER where USER_NAME= ?";
     final User user = new User();
     //通过匿名内部类定义回调函数 将结果集数据中的数据抽取到User对象中
     jdbcTemplate.query(sqlStr, new Object[]{userName},
             new RowCallbackHandler() {
                 @Override
                 public void processRow(ResultSet rs) throws SQLException {
                   user.setUserName(rs.getString("USER_NAME"));
                   user.setLastVisit(rs.getString("LAST_VISIT"));
                   user.setLastIp(rs.getString("LAST_IP"));
                 }
             }
     );
  return  user;
 }
    /**
     * 使用jdbcTemplate增加用户
     * @param user 用户对象
     *
     * */
      public void addUserJdbc(User user){
          String sqlStr="INSERT INTO t_user(user_name,password,last_visit,last_ip)" +
                  "VALUES(?,?,?,?) ";
          Object[] args={user.getUserName(),user.getPassword(),user.getLastVisit(),user.getLastIp()};
          jdbcTemplate.update(sqlStr,args);
      }
    /**
     * 使用jdbcTemplate修改用户
     * @param userId 用户ID
     * @param user 用户
     * */

      public void updateUserJdbc(User user,int userId){
       String sqlStr="UPDATE t_user set user_name=?, password=?, last_visit=?, last_ip=? where user_id=?";
       Object[] args={user.getUserName(),user.getPassword(),user.getLastVisit(),user.getLastIp(),userId};
               jdbcTemplate.update(sqlStr,args);
      }
    /**
     * 使用jdbcTemplate删除用户
     * @param userId 用户ID
     *
     * */
      public void delUserJdbc(int userId){
          String sqlStr="DELETE FROM t_user WHERE user_id=?";
          jdbcTemplate.update(sqlStr,new Object[]{userId});
      }

}

junit测试SpringJDBC操作数据库代码

package com.sunsharing.springdemo.dao;
import com.sunsharing.springdemo.domain.User;
import com.sunsharing.component.utils.base.DateUtils;
import org.junit.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.junit.runner.RunWith;
import org.springframework.test.context.ContextConfiguration;
import java.util.Date;
import java.util.Iterator;
import java.util.List;

import static org.testng.Assert.*;
/**
 * Created by nyp on 2015/2/5.
 */
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations={"classpath:/viewspace-dao.xml"})
public class UserDaoTest{
    @Autowired
    private UserDao userDao;

  @Test
    public void addUserByJdbc(){
        User user=new User();
        user.setUserName("jdbcTest");
        user.setPassword("123456");
        user.setLastVisit(new Date().toString());
        user.setLastIp("1.1.1.1");
        userDao.addUserJdbc(user);
        assertEquals(user.getPassword(),"123456");
    } 
  @Test
    public void findUserByJdbc() {
        User user = userDao.findUserByNameJdbc("jdbcTest");
        System.out.println("username="+user.getUserName()+" lastvisit="+user.getLastVisit());
        assertNotNull(user);
        assertEquals(user.getUserName(),"jdbcTest");
    }
 
 @Test
    public void updateUserByJdbc(){
        User user=new User();
        user.setUserName("jdbcTest1");
        user.setPassword("1234561");
        user.setLastVisit(new Date().toString());
        user.setLastIp("1.1.1.12");
        userDao.updateUserJdbc(user,12);
    }
 @Test
    public  void delUserByJdbc(){
        userDao.delUserJdbc(3);
    }
}


© 著作权归作者所有

共有 人打赏支持
yope
粉丝 15
博文 38
码字总数 33640
作品 0
厦门
程序员
加载中

评论(2)

yope
yope

引用来自“ulyn”的评论

//自动注入jdbcTemplate
@Autowired
private JdbcTemplate jdbcTemplate;

这个要注意多数据源的情况 Autowired可能会出问题。
如果多个数据源的情况下,确实有可能出现问题, 不过可以使用如下方法,指定id注入 @Autowired @Qualifier("JdbcTemplate2")
ulyn
ulyn
//自动注入jdbcTemplate
@Autowired
private JdbcTemplate jdbcTemplate;

这个要注意多数据源的情况 Autowired可能会出问题。
后台开发常问面试题集锦(问题搬运工,附链接)

Java基础问题 String的’+’的性能及原理 java之yield(),sleep(),wait()区别详解-备忘笔记 深入理解Java Stream流水线 抽象 & abstract关键字 Java final 修饰符知识点总结(必看篇) Java中的...

大黄有故事 ⋅ 2017/11/18 ⋅ 0

Spring系列之Spring常用注解总结

传统的Spring做法是使用.xml文件来对bean进行注入或者是配置aop、事物,这么做有两个缺点: 1、如果所有的内容都配置在.xml文件中,那么.xml文件将会十分庞大;如果按需求分开.xml文件,那么...

HJCui ⋅ 05/29 ⋅ 0

使用Spring Boot构建微服务(文末福利)

本文主要内容 学习微服务的关键特征 了解微服务是如何适应云架构的 将业务领域分解成一组微服务 使用Spring Boot实现简单的微服务 掌握基于微服务架构构建应用程序的视角 学习什么时候不应该...

异步社区 ⋅ 06/08 ⋅ 0

Aspectj与Spring AOP比较

1、简介 今天有多个可用的 AOP 库, 它们需要能够回答许多问题: 是否与用户现有的或新的应用程序兼容? 在哪里可以实现 AOP? 与自己的应用程序集成多快? 性能开销是多少? 在本文中, 我们将...

沈渊 ⋅ 04/18 ⋅ 0

Java Web学习计划

--- 本月为入门阶段,从零开始,一步一步的做出一个实用的网站。 深入学习Java语言,初步掌握前端技术,使用JSP和MySQL完成一个简单的网站 第1周 Java高级编程学习目标:
1.深入了解JDK环境...

SVD ⋅ 2016/12/01 ⋅ 0

一步一步教你用shiro——1引入shiro框架

一步一步教你用shiro——1引入shiro框架 一步一步教你用shiro——2配置并自定义realm 一步一步教你用shiro——3配置并自定义sessionManager 一步一步教你用shiro——4配置并自定义sessionDa...

肥肥小浣熊 ⋅ 04/30 ⋅ 0

早前学习Java记录

Spring 对 iBATIS 的支持】 Spring 通过 DAO 模式,提供了对 iBATIS 的良好支持。 SqlMapClient:是 iBATIS 中的主要接口,通过 xml 配置文件可以让 Spring 容器来管理 SqlMapClient 对象的创...

大风厂蔡成功 ⋅ 2016/07/10 ⋅ 0

三流程序员与一流程序员之间的区别,看看你是属于哪一类?

源码系列 手写spring mvc框架 基于Spring JDBC手写ORM框架 实现自己的MyBatis Spring AOP实战之源码分析 Spring IOC高级特性应用分析 ORM框架底层实现原理剖析 手写Spring MVC框架实现 手把手...

茶轴的青春 ⋅ 04/17 ⋅ 0

SpringBoot集成Spring Security(1)——入门程序

因为项目需要,第一次接触Spring Security,早就听闻Spring Security强大但上手困难,今天学习了一天,翻遍了全网资料,才仅仅出入门道,特整理这篇文章来让后来者少踩一点坑(本文附带实例程...

yuanlaijike ⋅ 05/09 ⋅ 0

手把手教你搭建SpringMVC——最小化配置

为什么需要Spring MVC 最开始接触网页的时候,是纯的html/css页面,那个时候还是用Dreamweaver来绘制页面。 随着网站开发的深入,开始学习servlet开发,记得最痛苦的就是servlet返回网页的内...

青夜之衫 ⋅ 2017/12/05 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

MySQL主从复制原理、半同步操作步骤及原理

1.1 企业Linux运维场景数据同步方案 1.1.1 文件级别的异机同步方案 1、scp/sftp/nc 命令可以实现远程数据同步。 2、搭建ftp/http/svn/nfs 服务器,然后在客户端上也可以把数据同步到服务器。...

xiaomin0322 ⋅ 5分钟前 ⋅ 0

Oracle10g 数据及文件迁移过程[原]

QL*Plus: Release 10.2.0.1.0 - Production on 星期三 5月 11 10:22:35 2011 Copyright (c) 1982, 2005, Oracle. All rights reserved. 连接到: Oracle Database 10g Enterprise Edition Re......

harrypotter ⋅ 11分钟前 ⋅ 0

nginx安装

1:安装工具包 wget、vim和gcc yum install -y wget yum install -y vim-enhanced yum install -y make cmake gcc gcc-c++ 2:下载nginx安装包 wget http://nginx.org/download/nginx-1......

壹丶贰 ⋅ 14分钟前 ⋅ 0

ideaVim安装及配置

1.安装插件 File-Settings-Plugins,Browse Repositories,输入ideavim,安装。 重启后,在Tools-Vim Emulator启用。 2.快捷键设置 ideaViim键与idea快捷键有冲突,可以在Settings-Other Se...

Funcy1122 ⋅ 18分钟前 ⋅ 0

MySQL中B+Tree索引原理

B+树索引是B+树在数据库中的一种实现,是最常见也是数据库中使用最为频繁的一种索引。B+树中的B代表平衡(balance),而不是二叉(binary),因为B+树是从最早的平衡二叉树演化而来的。在讲B...

浮躁的码农 ⋅ 32分钟前 ⋅ 0

两道面试题,带你解析Java类加载机制

在许多Java面试中,我们经常会看到关于Java类加载机制的考察,例如下面这道题: class Grandpa{ static { System.out.println("爷爷在静态代码块"); }} cl...

1527 ⋅ 36分钟前 ⋅ 0

SpringCloud(Data Flow)

dataflow-server

赵-猛 ⋅ 47分钟前 ⋅ 0

深入理解Java虚拟机

这本书我读到第8章,之后就是在读不下去了。 读到后面是一种痛苦的体验,太多的东西是不全面的,大量的专有名词是没有解释的,读到最后很多东西仅仅是一个侧面,所以我觉得,这本书不适合初学...

颖伙虫 ⋅ 52分钟前 ⋅ 0

NanoPi NEO core/ Ubuntu16.04单网卡配置3个IP地址(2个静态,1个动态)

配置 root@NanoPi-NEO-Core:/etc/network# cat interfacesauto loiface lo inet loopbackallow-hotplug eth0iface eth0 inet static address 172.31.188.249 netmask 255.......

SamXIAO ⋅ 今天 ⋅ 0

三步为你的App集成LivePhoto功能

摘要:LivePhoto是iOS9新推出的一种拍照方式,类似于拍摄Gif图或录制视频片段生成图片。如果没有画面感,可以联想《哈利波特》霍格沃茨城堡的壁画,哈哈,很炫酷有木有,但坑爹的是只有iphone6S以...

壹峰 ⋅ 今天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部