收藏 分销(赏)

Spring-JDBC.doc

上传人:pc****0 文档编号:7781371 上传时间:2025-01-16 格式:DOC 页数:8 大小:73KB 下载积分:10 金币
下载 相关 举报
Spring-JDBC.doc_第1页
第1页 / 共8页
Spring-JDBC.doc_第2页
第2页 / 共8页


点击查看更多>>
资源描述
Spring JDBC Made by Michael.Shi 281481047@ 数据源 2 1.配置数据源 2 2.配置JbcdTemplate 2 3.配置Data Access Object类 3 写数据 3 1.添加一条记录 3 2.添加多条记录 4 方法1: 4 方法2: 4 读数据 5 1.获得一条记录 5 2.获得多条记录 5 返回单个值 6 执行存储过程 6 全文以《学生管理》为例子进行解释在Spring应用JDBC 包含StudentDao,StudentDapImpl,StudentService,Student 主要利用JdbcTemplate来进行数据库的增、删、查、改操作 数据源 1.配置数据源 数据源需要在beans.xml文件中进行配置 <bean id="dataSource" class="mons.dbcp.BasicDataSource需要引入common.dbcp.jar "> <property name="driverClassName"> <value>com.mysql.jdbc.Driver</value> </property> <property name="url"> <value>jdbc:mysql://localhost:3306/spring</value> </property> <property name="username"> <value>root</value> </property> <property name="password"> <value>890127</value> </property> </bean> 2.配置JbcdTemplate <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate"> <property name="dataSource"> <ref bean="dataSource"/> </property> </bean> 3.配置Data Access Object类 <bean id="studentDao" class="com.primeton.spl.dao.impl.StudentDaoImp"> <property name="jdbcTemplate"> <ref bean="jdbcTemplate"/> </property> </bean> DAO 引用 JdbcTemplate 引用 DataSource jdbcTemplate: execute方法执行DDL statement update 方法执行insert, delete, update query 方法执行select * from table queryForXXX 方法执行 select count(*) from table 写数据 1.添加一条记录 public int add(Student student) { // PreparedStatement String sql = "insert into student (id,name) values(?, ?)"; //Parameters Object[] params = new Object[]{ student.getId(), student.getName() }; // Parameter's type int type[] = new int[] {Types.VARCHAR, Types.VARCHAR}; // Update return jdbcTemplate.update(sql, params, type); } 也可以不用types[](只是为了更加准确),而直接jdbcTemplate.update(sql, params); 2.添加多条记录 方法1: // List has to be final, according to getBatchSize() 's return value public int[] batchAdd(final List<Student> students) { String sql = "insert into student(id, name) values(?,?)"; // Inner class BatchPreparedStatementSetterOrg.springframework.jdbc.core setter = null; setter = new BatchPreparedStatementSetter() { @Override public int getBatchSize() { return students.size(); } @Override public void setValues(PreparedStatement ps, int index) throws SQLException { Student stu = students.get(index); ps.setString(1, stu.getId()); ps.setString(2, stu.getName()); } }; return jdbcTemplate.batchUpdate(sql, setter); 需要实现BatchPreparedStatementSetter接口,这里通过匿名内部类来实现。内部类中实现了两个方法 getBatchSize( ), setValues( ) 注意参数final List<Student> students,必须设置为final,是由于getSize()方法的返回值 方法2: // List has to be final, according to getBatchSize() 's return value public int[] batchAdd(final List<Student> students) { String sql = "insert into student(id, name) values(?,?)"; // // Use public int[] batchUpdate(java.lang.String sql, java.util.List<java.lang.Object[]> batchArgs) to realize BATCH ADD // List<Object[]> batchArgs = new ArrayList<Object[]>(); batchArgs.add(new Object[]{"966", "spl"}); batchArgs.add(new Object[]{"977", "michael"}); batchArgs.add(new Object[]{"988", "mad"}); return jdbcTemplate.batchUpdate(sql, batchArgs); } 读数据 1.获得一条记录 public Student findById(String id) { String sql = "select id,name from student where id=?"; Object[] params = new Object[]{id}; // Student has to be final, according to processRow(ResultSet rs) method final Student student = new Student(); jdbcTemplate.query(sql, params, new RowCallbackHandlerOrg.springframework.jdbc.core () { @Override public void processRow(ResultSet rs) throws SQLException { student.setId(rs.getString("id")); student.setName(rs.getString("name")); } }); return student; } JdbcTemplate.query( )方法需要一个RowCallBackHandler接口作为参数,这里以内部类来实现,实现processRow ( ) 方法,在这个方法中对ResultSet中每一条结果进行处理。 注意局部变量final Student students,必须设置为final,是由于processRow(ResultSet rs)方法。 2.获得多条记录 public List<Student> getAll() { String sql = "select id,name from student "; return jdbcTemplate.query(sql, new RowMapperResultSetExtractor<Student>(new StudentRowMapper())); } 这里jdbcTemplate.query( )方法需要ResultReader接口,所以这里使用 RowMapperResultSetExtractor,其又需要RowMapper接口,这里我们自定义了StudentRowMapper(需要继承RowMapper接口)。 class StudentRowMapper implements RowMapper<Student> { @Override public Student mapRow(ResultSet rs, int index) throws SQLException { Student stu = new Student(); stu.setId(rs.getString("id")); stu.setName(rs.getString("name")); return stu; } } RowMapper接口负责将ResultSet中的每一行映射成一个Object. 这样,我们就有了一个可复用的类,用来取得ResultSet中的每行数据来创建一个Student对象。这个可以被用于所有的Student查询中。例如查询一个Student对象: 可以再DAO中,使用studentDao.getAll().get(0)来获得单个查询 返回单个值 如果涉及到select cout(*) from table,需要如下实现: public int count() { String sql = "select count(id) from student"; return jdbcTemplate.queryForInt(sql); } 执行存储过程 public void SP_Test() { CallableStatementCallback cb = new CallableStatementCallback() { @Override public Object doInCallableStatement(CallableStatement cs) throws SQLException, DataAccessException { cs.execute(); return null; } }; jdbcTemplate.execute("{call sp_update()}", cb); } 需要实现CallableStatementCallback接口,在内部类中实现doInCallableStatement( )方法来进行存储过程的调用。(具体的上网查)
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 百科休闲 > 其他

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2026 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服