spring之JDBC访问数据库及配置详解

来源:互联网 发布:哪家域名注册商好 编辑:程序博客网 时间:2024/06/05 07:24

Sping的配置文件中,关于dataSource的配置,就我们常用的方法大致可以有三种:

  1、一般的配置方法,直接在配置中指定其值。

 

<bean id="datasource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">    <property name="driverClassName">  com.mysql.jdbc.Driver</property>    <property name="url">dbc:mysql://localhost:3306/dataBase</property>    <property name="username" value="root"></property>    <property name="password" value="root"></property>  </bean>

 2.、通过读取文件信息资源,其原理与方法一相同。示例:

<bean id="preferences" class="org.springframework.beans.factory.config.PreferencesPlaceholderConfigurer">    <property name="location">      <value>/WEB-INF/files.properties</value>  </property>  </bean>  <bean id="datasource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">    <property name="driverClassName">     <value>${driverClassName}</value>   <!-- 这里的值要通过${}进行转义,其driverClassName参数要在上面的文件中指定 -->    </property>    <property name="url">     <value>${url}</value>    </property>    <property name="username" value="${userName}"></property>    <property name="password" value="${userPwd}"></property>  </bean>  

3、通过数据连接池。在此我们只需指定jndiName的值为服务器中配置的数据连接池的JNDI名称即可。  

 <bean    id="datasource" class="org.springframework.jndi.JndiObjectFactoryBean">    <property name="jndiName" value="jdbc/mysql"></property>   </bean> 


在上述方法配置成功之后,我们可以通过JdbcTemplate把dataSource注入到JdbcTemplate里面

<bean  id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">    <property name="dataSource">     <ref bean="datasource" />    </property>  </bean>  


我们看一下在beans.xml中对userdao的基本配置:

<bean id="userDAO" class="com.demo.spring.dao.UserDAO">      <property name="jdbcTemplate">          <ref local="jdbcTemplate" />      </property>   </bean>  

利用JdbcTemplate直接调用相关的访问就OK了,也不用管什么关闭和打开链接。下面我们就以一个保存用户实例来简单看一下JdbcTemplate的基本用法:

public class UserDAO {      private JdbcTemplate  jdbcTemplate;      public DataSource getJdbcTemplate() {          return jdbcTemplate;      }      public void setJdbcTemplate(JdbcTemplate  jdbcTemplate) {          this.jdbcTemplate= jdbcTemplate;      }  public void insertUser(User user) {          String username = user.getUsername();          String password = user.getPassword();         String email = user.getEmail();       jdbcTemplate.update("insert into user(username,password,email) values ('"                  + username + "','" + password + "','" + email + "');");      }  }  



也可以使用代码执行初始化

public class UserDAO implements IUserDAO{  private DataSourceTransactionManager transactionManager;  private DefaultTransactionDefinition def;  private JdbcTemplate jdbcTemplate;  public void setDataSource(DataSource dataSource) {    jdbcTemplate = new JdbcTemplate(dataSource);    transactionManager =new DataSourceTransactionManager(dataSource);    def = new DefaultTransactionDefinition();    def.setPropagationBehavior(TransactionDefinition.PROPAGATION_REQUIRED);  }  public void insert(User user) {    String name = user.getName();    int age = Integer.valueOf(user.getAge());    TransactionStatus status =transactionManager.getTransaction(def);    try {      jdbcTemplate.update("INSERT INTO user (name,age) VALUES('" + name + "'," + age + ")");   }catch(DataAccessException e) {      transactionManager.rollback(status);      throw e;    }    transactionManager.commit(status);  }


原创粉丝点击