文档章节

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

yope
 yope
发布于 2015/02/26 13:08
字数 649
阅读 127
收藏 1

引包的问题在此不做详述,下面是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
博文 40
码字总数 34264
作品 0
厦门
程序员
加载中

评论(2)

yope
yope

引用来自“ulyn”的评论

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

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

这个要注意多数据源的情况 Autowired可能会出问题。
Spring的事务管理难点剖析(1):DAO和事务管理的牵绊

有些人很少使用Spring而不使用Spring事务管理器的应用,因此常常有人会问:是否用了Spring,就一定要用Spring事务管理器,否则就无法进行数据的持久化操作呢?事务管理器和DAO是什么关系呢?...

icheer
2012/07/17
0
0
Spring框架笔记(二十四)——Spring中的JDBC的两种使用方式

为了使 JDBC 更加易于使用, Spring 在 JDBC API 上定义了一个抽象层, 以此建立一个 JDBC 存取框架. 作为 Spring JDBC 框架的核心, JDBC 模板的设计目的是为不同类型的 JDBC 操作提供模板方法...

HappyBKs
2015/08/26
0
0
基于SpringJdbc的泛型Dao

使用的Spring是3.1版本,不是3.0版本。两者还是有区别的,其中一点就是:SimpleJdbcTemplate在3.1版本被标记为过时了,而SimpleJdbcTemplate的一些方法,被JdbcTemplate吸收了。所以,个人推荐...

moz1q1
2014/07/20
0
0
spring安全框架Security(二)

好,我们往下看,接着就是应用我们实际项目里的自定义用户权限了 Java代码 security:authentication-manager security:authentication-provider user-service-ref="customUserDetailsServic...

尚浩宇
2015/06/24
0
0
Spring的事务管理难点剖析(5):联合军种作战的混乱

Spring抽象的DAO体系兼容多种数据访问技术,它们各有特色,各有千秋。像Hibernate是非常优秀的ORM实现方案,但对底层SQL的控制不 太方便;而iBatis则通过模板化技术让你方便地控制SQL,但没有...

icheer
2012/07/17
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

人生苦短:Python里的17个“超赞操作

人生苦短,我选Python”。那么,你真的掌握了Python吗? 1. 交换变量 有时候,当我们要交换两个变量的值时,一种常规的方法是创建一个临时变量,然后用它来进行交换。比如: # 输入 a = 5 b ...

糖宝lsh
47分钟前
4
0
咕泡-spring中常用设计模式概述

设计模式就是经验之谈,供后人借鉴,解决一些具有代表性的问题 设计模式来源于生活,反过来帮助我们更好生活 设计模式提升代码的可读性、可扩展性、维护成本、复杂业务问题 千万不要死记硬背...

职业搬砖20年
今天
2
0
day59-20180817-流利阅读笔记-待学习

假·照骗,真·社交焦虑 雪梨 2018-08-17 1.今日导读 发朋友圈之前,不少人为了展现更美好的生活状态会对照片加以“微调”,或是加个滤镜显得逼格更高,或是磨个皮瘦个脸拉个大长腿。现在,国...

aibinxiao
今天
23
0
OSChina 周五乱弹 —— 姑娘在这个节日里表白你接受么?

Osc乱弹歌单(2018)请戳(这里) 【今日歌曲】 @Sharon啊:完全被这个小姐姐圈粉了,学两首她的歌去哈哈 分享王贰浪的单曲《往后余生(翻自 马良)》 《往后余生(翻自 马良)》- 王贰浪 手...

小小编辑
今天
1K
17
为什么HashMap要自己实现writeObject和readObject方法?

为什么HashMap要自己实现writeObject和readObject方法? 如果你有仔细阅读过HashMap的源码,那么你一定注意过一个问题:HashMap中有两个私有方法。 private void writeObject(java.io.Objec...

DemonsI
今天
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部