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框架结合在一起使用、不支持数据库跨平台、默认没有缓存.
为什么说会开发的测试才是合格的测试?