测试开发之Spring篇(二)

2020-10-23 11:15:50 浏览数 (1)

Spring案例入门(Springjdbc)

一、Spring jdbc简介

Spring是一个一站式的框架,对不同持久层的技术都进行了封装(如JDBC、Hibermate、MyBatis等。

二、spring的模版类

JDBCTemplate继承了基类JdbcAccessor和接口类JdbcOperation。在基类JdbcAccessor的设计中,对DataSource数据源进行管理和配置。在JdbcOperation接口中,定义了通过Jdbc操作数据库的基本操作方法,而JdbcTemplate提供这些接口方法的实现,比如execute方法、query方法、update方法等

三、Spring传统jdbc实例

jdbc传统实现

缺点:

(1)需要自己管理连接(2)Jdbc操作重复代码封装与编写

实例:

1、数据库表fc_channel

2、Fc_channel模型 Fc_channe.java

public class fc_channel {

Stringchannel_Id;

Stringchannel_name;

Stringstatus;

Stringdisplay_order;

public fc_channel(String channel_Id, String channel_name,String status,

Stringdisplay_order) {

this.channel_Id= channel_Id;

this.channel_name= channel_name;

this.status= status;

this.display_order= display_order;

}

//此处省略set/get方法

}

3、访问数据库dao模式

public interface fc_channelDao {

public void insert(fc_channel fc);

public fc_channel findById(String CHANNEL_ID);

public voiddeleteFc_channel(String CHANNEL_ID);}

4、DAO的实现 FcImpl.java

//插入方法

public void insert(fc_channel fc){

String sql = "INSERTINTO fc_channel "

"(CHANNEL_ID, CHANNEL_NAME, STATUS,DISPLAY_ORDER)VALUES (?,?,?,?)";

Connectionconn = null;

try {

conn = dataSource.getConnection();

PreparedStatementps = conn.prepareStatement(sql);

ps.setString(1, fc.getChannel_Id());

ps.setString(2, fc.getChannel_name());

ps.setString(3, fc.getDisplay_order());

ps.setString(4,fc.getStatus());

ps.executeUpdate();

ps.close();

}catch (SQLException e) {

throw newRuntimeException(e);

}finally {

if (conn !=null) {

try {

conn.close();

}catch (SQLException e) {}

}}}

//查找方法

public fc_channel findById(String Channel_Id){

Stringsql = "SELECT* FROM fc_channel WHERE Channel_Id = ?";

Connectionconn = null;

try {

conn = dataSource.getConnection();

PreparedStatementps = conn.prepareStatement(sql);

ps.setString(1, Channel_Id);

fc_channelfc = null;

ResultSetrs = ps.executeQuery();

if (rs.next()){

fc = newfc_channel(

rs.getString("CHANNEL_ID"),

rs.getString("CHANNEL_NAME"),

rs.getString("STATUS"),

rs.getString("DISPLAY_ORDER") );}

rs.close();

ps.close();

return fc;

} catch(SQLException e) {

throw newRuntimeException(e);

}finally {

if (conn !=null) {

try {

conn.close();

}catch (SQLException e) {}

}}}

@Override

public voiddeleteFc_channel(String CHANNEL_ID) {

// TODO Auto-generated method stub

}

5、bean配置 applicationContext.xml

6、测试类 test.java

publicclass test {

publicstaticvoid main( String[] args )

{

ApplicationContext context =

new ClassPathXmlApplicationContext("applicationContext.xml");

fc_channelDao fcd =(fc_channelDao)context.getBean("fc_channelDao");

fc_channel fc = new fc_channel("11", "22","33","44");

fcd.insert(fc);

}}

7、 工程目录

四、Spring 使用jdbcTemplate

1、使用方法:

创建JdbcTemplate对象

注入dataSource对象

调用JdbcTemplate封装的方法进行sql操作

2、优点:

(1)配置基于模板设置

(2)完成了资源的创建和释放的工作

(3)完成了对JDBC的核心流程的工作,包括SQL语句的创建和执行,简化了对JDBC的操作

(4)仅需要传递DataSource就可以把它实例化

(5)JdbcTemplate只需要创建一次,减少了代码复用的烦恼

(6)JdbcTemplate是线程安全类

3、实例

(1)DAO实现类JdbcTempDaoImpl.java

public class JdbcTempDaoImpl implements fc_channelDao {

private JdbcTemplate jdbcTemplate;

private DataSource dataSource;

public voidsetDataSource( DataSource dataSource) {

this.dataSource= dataSource;

}

//增

public voidinsert(fc_channel fc) {

Stringsql = "INSERTINTO fc_channel "

"(CHANNEL_ID, CHANNEL_NAME,STATUS,DISPLAY_ORDER) VALUES (?,?,?,?)";

jdbcTemplate = newJdbcTemplate(dataSource);

jdbcTemplate.update(sql,

new Object[] { fc.getChannel_Id(),fc.getChannel_name(),

fc.getDisplay_order(), fc.getStatus()});

}

//查

public fc_channel findById(String Channel_Id) {

Stringsql = "SELECT* FROM fc_channel WHERE Channel_Id = ?";

jdbcTemplate = newJdbcTemplate(dataSource);

return jdbcTemplate.queryForObject(sql, newUserRowMapper(),Channel_Id);

}

class UserRowMapper implementsRowMapper<fc_channel> {

//rs为返回结果集,以每行为单位封装着

publicfc_channel mapRow(ResultSet rs, int rowNum)throws SQLException {

fc_channelfc = newfc_channel(

rs.getString("CHANNEL_ID"),

rs.getString("CHANNEL_NAME"),

rs.getString("STATUS"),

rs.getString("DISPLAY_ORDER") );

return fc;

}}

//删

public voiddeleteFc_channel(String CHANNEL_ID) {

jdbcTemplate = newJdbcTemplate(dataSource);

String sql = "deletefrom fc_channel where Channel_Id=?";

this.jdbcTemplate.update(sql, CHANNEL_ID);

}

}

(2)bean配置方法 applicationContext.xml

(3)实现类 test.java

publicclass test {

public static void main( String[] args )

{

ApplicationContext context =

new ClassPathXmlApplicationContext("applicationContext.xml");

fc_channelDao fcd =(fc_channelDao)context.getBean("fc_channelDao");

fc_channel fc = new fc_channel("11", "22","33","44");

fcd.insert(fc);

fc_channel fc1 = fcd.findById("11");

System.out.println(fc1.getChannel_Id());

System.out.println(fc1.getChannel_name());

System.out.println(fc1.getDisplay_order());

System.out.println(fc1.getStatus());

//删除

fcd.deleteFc_channel("1");

}

}

(4)jdbcTemplate缺点

必须于Spring框架结合在一起使用、不支持数据库跨平台、默认没有缓存.

为什么说会开发的测试才是合格的测试?

0 人点赞