English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

مثال RowMapper|الحصول على السجلات باستخدام Spring JdbcTemplate

مثل ResultSetExtractor، يمكننا استخدام واجهة RowMapper عبر JdbcTemplate فئة query()الطريقة تؤخذ السجلات من قاعدة البيانات. خلال التنفيذ، نحتاج الآن إلى نقل مثيل RowMapper.

استخدام جملة طريقة استعلام RowMapper

الطريقة العامة query(String sql,RowMapper<T> rm)

واجهة RowMapper

RowMapper الواجهة تسمح باستخدام كائن من الفئة المحددة من قبل المستخدم لتحديد العلاقات. إنه يتدفق داخلياً على ResultSet ويضيفها إلى مجموعة. لذلك، لا نحتاج إلى كتابة الكثير من الكود للحصول على السجلات كResultSetExtractor.

RowMapper أفضل من ResultSetExtractor

واجهة RowMapper يمكن أن توفر الكثير من الكود، لأن

طريقة واجهة RowMapper

انه يعرف فقط طريقة MapRow، التي تأخذ كائن ResultSet وعدد كلاسيكي كمعرفين بالقائمة.

الطريقة العامة T mapRow(ResultSet rs, int rowNumber) يخلص من SQLException

مثال على واجهة RowMapper لعرض جميع سجلات الجدول

نحن نعتقد أنك قد أنشأت الجداول التالية في قاعدة بيانات Oracle10g.

إنشاء جدول employee(
عدد id(10),
اسم varchar2(100),
عدد salary(10)
);

Employee.java

انه يحتوي على 3 خصائص تحتوي على بناءات،setter وgetter بالإضافة إلى طريقة toString() إضافية.

package com.w3codebox;
الطريقة العامة class Employee {
private int id;
private String name;
private float salary;
//no-arg and parameterized constructors
//getters and setters
الطريقة العامة toString(){
    عدد id+" "+name+" "+salary;
}
}

EmployeeDao.java

انه يحتوي على الخاصية jdbcTemplate وواحدة من الطرق getAllEmployeesRowMapper.

package com.w3codebox;
إدخال java.sql.ResultSet;
إدخال java.sql.SQLException;
إدخال java.util.ArrayList;
import java.util.List;
إدخال org.springframework.dao.DataAccessException;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.ResultSetExtractor;
import org.springframework.jdbc.core.RowMapper;
public class EmployeeDao {
private JdbcTemplate template;
public void setTemplate(JdbcTemplate template) {
    this.template = template;
}
public List<Employee> getAllEmployeesRowMapper(){
 return template.query("select * from employee",new RowMapper<Employee>(){
    @Override
    public Employee mapRow(ResultSet rs, int rownumber) throws SQLException {
        Employee e=new Employee();
        e.setId(rs.getInt(1));
        e.setName(rs.getString(2));
        e.setSalary(rs.getInt(3));
        return e;
    }
    });
}
}

applicationContext.xml

DriverManagerDataSource لحمل معلومات قاعدة البيانات مثل اسم فئة الدriver، عنوان الاتصال، اسم المستخدم وكلمة المرور.

يوجد في فئة JdbcTemplate من نوع DriverManagerDataSource كائن يُدعى datasource العناصر. لذا نحتاج إلى تقديم استدلال على الخاصية DataSource في فئة JdbcTemplate.

في هذا المكان، نستخدم في فئة EmployeeDao كائن JdbcTemplate، لذا نرسله عبر طريقة setter، ولكن يمكنك أيضًا استخدامه في المبنى.

<?xml version="1.0" encoding="UTF-8"?>
<beans>
    xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:p="http://www.springframework.org/schema/p"
    xsi:schemaLocation="http://www.springframework.org/schema/beans 
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">
<bean id="ds" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="oracle.jdbc.driver.OracleDriver" />
<property name="url" value="jdbc:oracle:thin:@localhost:1521:xe" />
<property name="username" value="system" />
<property name="password" value="oracle" />
</bean>
<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
<property name="dataSource" ref="ds"></property>
</bean>
<bean id="edao" class="com.w3codebox.EmployeeDao">
<property name="jdbcTemplate" ref="jdbcTemplate"></property>
</bean>
</beans>

Test.java

يأخذ هذا الجسم من ملف applicationContext.xml لتحميل Bean ويستدعي طريقة getAllEmployeesRowMapper() من EmployeeDao.

package com.w3codebox;
import java.util.List;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class Test {
public static void main(String[] args) {
    ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");
    EmployeeDao dao = (EmployeeDao) ctx.getBean("edao");
    List<Employee> list = dao.getAllEmployeesRowMapper();
    للفترة e: list
        System.out.println(e);
}
}