SPRING使用JDBC

SPRING中提供了3个模板类:

JdbcTemplate,NamedParameterJdbcTemplate,SimpleJdbcTemplate

 

下面介绍以JdbcTemplate为例

applicationContext.xml:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd">


 <bean id="dataSource"
  class="org.apache.commons.dbcp.BasicDataSource">
  <property name="driverClassName"
   value="com.mysql.jdbc.Driver">
  </property>
  <property name="url" value="jdbc:mysql://127.0.0.1:3306/mydb"></property>
  <property name="username" value="root"></property>
  <property name="password" value="root"></property>
 </bean>
  
 <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
  <property name="dataSource" ref="dataSource"></property>
 </bean>
 
 <bean id="teamDaoImpl" class="com.dao.ObjDaoImpl">
  <property name="jdbcTemplate" ref="jdbcTemplate"></property>
 </bean>
 
</beans>

 

DAO类:

package com.dao;

import com.vo.Team;

public interface ObjDao {
 
 void save(Team team);
 
 Team getTeamById(int id);

}

 

package com.dao;

import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.List;

import org.springframework.dao.DataAccessException;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.RowMapper;

import com.vo.Team;

public class ObjDaoImpl implements ObjDao {

 private JdbcTemplate jdbcTemplate;
 public JdbcTemplate getJdbcTemplate() {
  return jdbcTemplate;
 }
 public void setJdbcTemplate(JdbcTemplate jdbcTemplate) {
  this.jdbcTemplate = jdbcTemplate;
 }
 public void save(Team team) {
  String sql = "insert into team (Name) values(?)";
  
  this.jdbcTemplate.update(sql,new Object[]{team.getName()});

 }

 

//
 public Team getTeamById(int id) {
  // TODO Auto-generated method stub
  String sql = "select id,name from team where id=?";
  List teams = this.jdbcTemplate.query(sql,new Object[]{Integer.valueOf(id)},new RowMapper(){
   public Object mapRow(ResultSet rs,int rowNum) throws SQLException,DataAccessException{
    Team team = new Team();
    team.setId(rs.getInt("id"));
    team.setName(rs.getString("name"));
    return team;
    
   }
  });
  return teams.size()>0?(Team)teams.get(0):null;
 }

 

//jdbcTemplate.query方法参数:

1.一个字符串,包含用于从数据库里选择数据的SQL语句

2.一个OBJECT数组,包含于查询里索引参数绑定的值

3.一个ROWMAPPER,他从RESULTSET里提取数值,并构造一个域对象

}

测试类:

package com.client;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import com.dao.ObjDao;
import com.vo.Team;

public class Client {

 /**
  * @param args
  */
 public static void main(String[] args) {
  /*Team team = new Team();
  team.setName("springtest");*/
  
  ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
  ObjDao dao = (ObjDao)context.getBean("teamDaoImpl");
  //dao.save(team);
  Team team = dao.getTeamById(1);
  System.out.println(team.getName());

 }

}

 

在使用SAVE方法的时候,使用了索引参数,意味着吧参数传递给UPDATE的时候,要以正确的顺序列出相应的值。为了避免这种情况,我们可以使用NamedParameterJdbcTemplate.

 

sql="insert into team (name) values (:name)";

 

public void save(Team team)

{

    Map parameters = new HashMap();

   parameters.put("name",team.getName());

  jdbcTemplate.update(sql,parameters);

}

 

 

 

如果使用SimpleJdbcTemplate可以采用如下方法来保存:

public void save(Team team)

{

     jdbcTemplate.update(sql,team.getName());

}

 

 

如上方法是通过在JDBC dao的类中注入jdbcTemplate类。

还可以通过你的DAO继承指定的TEMPLATE类

比如上面的例子:

public class ObjDaoImpl implements ObjDao extends JdbcDaoSupport

 

然后就可以直接通过

getJdbcTemplate()来得到对象,就不用注入了。

 

你可能感兴趣的:(DAO,spring,sql,bean,jdbc)