Spring 学习笔记--Spring 整合JDBC

前期准备

Spring整合JDBC的案例在整合之前需要做一些前期准备需要下载一些Spring JDBC所依赖的一些类库

打开pom.xml, 在其中添加如下依赖

<dependencys>

<dependency>

<groupId>org.springframework.data</groupId>
<artifactId>spring-data-oracle</artifactId>

<version>1.0.0.RELEASE</version>

</dependency>

</dependencys>


在pom.xml目录下打开cmd, 执行命令:

mvn dependency:copy-dependencies -DoutputDirectory=lib

这样就可以下载到Spring Data Access所需要的类库

此外, 还需要第三方依赖类库 commons-dbcp-1.3.jar 和 commons-pool-1.6.jar

这个可以前往 www.apache.org官网下载

注意:

 一开始没注意, 下载了最新的版本, 后来进过折腾发现Spring不支持最新的版本,

 所以就下载之前的版本也就是现在的版本, 测试才通过

 

配置数据源(DataSource)

beans.xml中配置如下代码:

<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"

destroy-method="close">

<property name="driverClassName" value="com.mysql.jdbc.Driver" />

<property name="url" value="jdbc:mysql://localhost:3306/test" />

<property name="username" value="root" />

<property name="password" value="123456" />

</bean>


其中classcommons-dbcp中的BasicDataSource

其中的属性配置是根据JDBC中的属性来进行配置比如diverClassName, url, username, password 这些都是与JDBC对应的,具体其他属性的配置可以查看docs文档


当然这里也可以将属性保存在properties文件中

这里在类路径新建一个jdbc.properties文件并且将添加各个属性值

:

jdbc.driverClassName=com.mysql.jdbc.Driver

jdbc.url=jdbc\:mysql\://localhost\:3306/test

jdbc.username=root

jdbc.password=123456


这里属性名按照Spring官方文档命名方式: jdbc.xxx

之前试过不加”jdbc.”, 直接命名为xxx,然后到引用username(也就引用这个值出现问题)的时候就出现问题了,

不能正确连接到用户名为指定为username的MySQL数据库, 具体问题现在还不知道是什么导致的知道的朋友可以留言给我在此先谢过了

 

然后在xml中可以这样配置

<!-- 这里是指定properties文件所在位置  -->

<context:property-placeholder location="classpath:jdbc.properties"/>

 

<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"

destroy-method="close">

<!-- 引用properties中的值的方式类似el表达式 -->

<property name="driverClassName" value="${jdbc.driverClassName}" />

<property name="url" value="${jdbc.url}" />

<property name="username" value="${jdbc.username}" />

<property name="password" value="${jdbc.password}" />

</bean>


其他的和之前配置一样


 

配置事务

(以注释的方式)

xml中添加如下代码:

<bean id="txManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">

<property name="dataSource" ref="dataSource" />

</bean>

<tx:annotation-driven transaction-manager="txManager"/>


这里由于用到了tx标签, 所以在这之前需要添加tx命名空间配置,

代码如下:

xmlns:tx="http://www.springframework.org/schema/tx"

http://www.springframework.org/schema/tx 	  

http://www.springframework.org/schema/tx/spring-tx.xsd

 


这样就配置好数据源和事务

 

编写测试例子

下面通过一个小示例来展示配置成果

1) Bean

package com.wenj.bean;

 

public class Person {

private Integer id;

private String name;

public Person(){ }

public Person(String name){

this.name = name;

}

 

public Integer getId() {

return id;

}

 

public void setId(Integer id) {

this.id = id;

}

 

public String getName() {

return name;

}

 

public void setName(String name) {

this.name = name;

}

}


 


2) DAO

DAO接口

package com.wenj.dao;

 

import java.util.List;

 

import com.wenj.bean.Person;

 

public interface PersonDAO {

/**

 * 保存person

 * @param person

 */

public void savePerson(Person person);

/**

 * 更新person

 * @param person

 */

public void updataPerson(Person person);

/**

 * 删除指定id的person

 * @param personId

 */

public void deletePersonByID(Integer personId);

/**

 * 删除指定name的person

 * @param personName

 */

public void deletePersonByName(String personName);

/**

 * 获取指定id的person

 * @param personId

 * @return

 */

public Person getPersonByID(Integer personId);

/**

 * 获取指定name的person

 * @param personName

 * @return

 */

public Person getPersonByName(String personName);

/**

 * 获取所有person的信息

 * @return

 */

public List<Person> getPerson();

}

DAO实现层

package com.wenj.dao.impl;

 

import java.util.List;

 

import javax.sql.DataSource;

 

import org.springframework.jdbc.core.JdbcTemplate;

 

import com.wenj.bean.Person;

import com.wenj.dao.PersonDAO;

 

@Transactional

public class PersonDAOImpl implements PersonDAO {

 

private JdbcTemplate jdbcTemplate;

 

public void setDataSource(DataSource dataSource) {

this.jdbcTemplate = new JdbcTemplate(dataSource);

}

 

@Override

public void savePerson(Person person) {

// TODO Auto-generated method stub

String sql = "insert into person(name) values(?)";

jdbcTemplate.update(sql, new Object[] { person.getName() },

new int[] { java.sql.Types.VARCHAR });

System.out.println("Save Person SUCCESS");

}

 

@Override

public void updataPerson(Person person) {

// TODO Auto-generated method stub

String sql = "update person set name = ? where id = ?";

jdbcTemplate.update(sql,

new Object[] { person.getName(), person.getId() }, new int[] {

java.sql.Types.VARCHAR, java.sql.Types.INTEGER });

}

 

@Override

public void deletePersonByID(Integer personId) {

// TODO Auto-generated method stub

String sql = "delete from person where id = ?";

jdbcTemplate.update(sql, new Object[] { personId },

new int[] { java.sql.Types.INTEGER });

}

 

@Override

public void deletePersonByName(String personName) {

// TODO Auto-generated method stub

String sql = "delete from person where name = ?";

jdbcTemplate.update(sql, new Object[] { personName },

new int[] { java.sql.Types.VARCHAR });

}

 

@Override

public Person getPersonByID(Integer personId) {

// TODO Auto-generated method stub

String sql = "select * from person where id = ?";

 

return (Person) jdbcTemplate.queryForObject(sql, new Object[] { personId },

new int[] { java.sql.Types.INTEGER }, new PersonRowMapper());

//这里用到了RowMapper, 需要写一个类实现RowMapper接口

}

 

@Override

public Person getPersonByName(String personName) {

// TODO Auto-generated method stub

return null;

}

 

@Override

public List<Person> getPerson() {

// TODO Auto-generated method stub

String sql = "select * from person";

return ((List<Person>)jdbcTemplate.query(sql, new PersonRowMapper()));

}

 

}

 

//PersonRowMapper类实现RowMapper接口

package com.wenj.dao.impl;

 

import java.sql.ResultSet;

import java.sql.SQLException;

 

import org.springframework.jdbc.core.RowMapper;

 

import com.wenj.bean.Person;

 

public class PersonRowMapper implements RowMapper<Person> {

 

@Override//回调获取rs结果集内容

public Person mapRow(ResultSet rs, int index) throws SQLException {

// TODO Auto-generated method stub

Person person = new Person(rs.getString("name"));

person.setId(rs.getInt("id"));

return person;

}

 

}


xml中配置相关测试Bean

如下:

<bean id="personDAO" class="com.wenj.dao.impl.PersonDAOImpl">

<property name="dataSource" ref="dataSource"/>

</bean>

<bean id="person" class="com.wenj.bean.Person">

<property name="name" value="userName"/>

</bean>


3) 单元测试

最后新建一个jUnit4Test case, 在测试例子中添加如下测试代码

@Test

public void testSpringJDBC(){

ApplicationContext cxt = new ClassPathXmlApplicationContext("com/wenj/resources/beans.xml");

Person person = (Person)cxt.getBean("person");

PersonDAO personDAO = (PersonDAO)cxt.getBean("personDAO");

personDAO.savePerson(person);

}


这时控制台会输出如下语句

Save Person SUCCESS

然后登陆MySQL数据库发现, person表中出现了我们保存的person信息

至此, Spring JDBC整合成功

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值