آشنایی با چهارچوب کاری JDBC در Spring
هنگامی که در محیط های برنامه نویسی جاوا ، برای کار با پایگاه های داده از زبان قدیمی JDBC استفاده می کنیم ، کار برنامه نویسی کمی سخت می شود . در این شرایط نوشتن کدهای غیر ضروری برای مدیریت استثنا های برنامه ، باز و بسته کردن ارتباط با پایگاه داده و ... کمی دشوار است .
از طرف دیگر ، چهارچوب کاری JDBC در Spring ، با رویکردی جدید انجام کلیه امور مرتبط با پایگاه داده از کارهای معمولی تا سطح بالا را برعهده گرفته است . برای مثال Spring JDBC ، تمهیدات لازم جهت باز کردن ارتباط با پایگاه داده ، آماده نمودن دستورات SQL جهت اجرا ، پردازش استثناها و
مدیریت تراکنش ها و در نهایت بستن ارتباط را فراهم کرده است .
بنابراین تنها کاری که شما لازم است انجام دهید تعیین پارامترهای ضروری برای اتصال به پایگاه داده و نوشتن دستورات SQL برای دریافت اطلاعات مورد نظر از پایگاه داده است .
Spring JDBC چندین روش مختلف جهت اتصال به پایگاه داده و همچنین کلاس های لازم جهت ارتباط با آن را فراهم نموده است . ما در این درس از معمول ترین و رایج ترین راه برای ارتباط با پایگاه داده ، یعنی استفاده از کلاس Jdbc Template در چهارچوب کاری Spring استفاده می کنیم . کلاس
JdbcTemplate ، کلاس اصلی و مرکزی Spring جهت ارتباط و کار با پایگاه داده است .
آموزش کلاس JdbcTemplate Class
کلاس JdbcTemplate ، دستورات SQL ، Qnery های آن را اجرا کرده ، Statment های برنامه را به روز نموده و Stored Procedure ها را فراخوانی و مدیریت می کند . همچنین این کلاس ، محتویات ResultSet ها را خوانده و Parameter های مورد نظر را از آنها استخراج
می کند .
از طرف دیگر کلاس Jdbc Template خطاهای JDBC را گرفته و آنها را به generic تبدیل می کند . سپس اطلاعات بیشتری به خطاها اضافه کرده و آنها را در سلسله مراتب خطاهای برنامه در پکیج org.spring framework.doo قرار می دهد .
هر نسخه ای از کلاس JdbcTemplate ایجد شود به صورت threadsafe ( انتقال امن داده ) تنظیم می شود . بنابراین شما می توانید یک نسخه واحد از کلاس JdbcTemplate ایجاد کرده و آن را به چندین DAO مورد نظر خود تزریق کنید .
یک تمرین رایج در هنگام استفاده از کلاس JdbcTemplate ، تنظیم یک DataSource در فایل پیکربندی اطلاعات برنامه یا Spring Configuration file است . پس بایستی این Data Source مشترک را به وسیله dependency-inject شی Bean به کلاس های DAO مورد نظر
خود تزریق نمایید . در نهایت کلاس JdbvTemplate در بخش Setter شی Data Source قرار می گیرد .
تنظیم منبع داده ( Data Source )
در بخش مثال عملی ، ابتدا یک جدول به نام Student را در پایگاه داده Test ایجاد می کنیم . در اینجا فرض بر این است که شما در حال کار با پایگاه داده MySQL هستید ، اگر با پایگاه داده دیگری می خواهیم کار کنید بایستی فایل DDL برنامه و همچنین SQL Query های خود را تغییر دهید .
CREATE TABLE Student( ID INT NOT NULL AUTO_INCREMENT, NAME VARCHAR(20) NOT NULL, AGE INT NOT NULL, PRIMARY KEY (ID) );
در مرحله بعد بایستی یک Data Source را برای کلاس Jdbc Template فراهم کنیم تا بتواند شرایط خود را جهت اتصال به پایگاه داده تنظیم نماید . شما می توانید تنظیمات لازم جهت Data Source را همانطور که در فایل XML زیر نشان داده شده است ، تعیین نمایید
id="dataSource"
class="org.springframework.jdbc.datasource.DriverManagerDataSource">
name="driverClassName" value="com.mysql.jdbc.Driver"/>
name="url" value="jdbc:mysql://localhost:3306/TEST"/>
name="username" value="root"/>
name="password" value="password"/>
آموزش شی Data Access Object یا DAO
DAO مخفف عبارت Data Access Object بوده که جهت تعامل با پایگاه داده به کار می رود . DAO ها برای این وجود دارند تا بتوانند اطلاعات را از پایگاه داده خوانده و اطلاعات جدید را به آنها وارد نمایند . DAO بایستی قابلیت های خود را در قالب یک رابط کاربری ارائه داده تا سایر اجزای
Application بتوانند از طریق آنها به اطلاعات دسترسی داشته باشند .
قابلیت پشتیبانی از DAO در Spring ، امکان این را فراهم کرده تا به راحتی با تکنولوژی مختلف پایگاه داده مثل JDBC ، Hibrnate و ... در صورت پایدار و مطمئن کار نماییم .
اجرای دستورات SQL در Spring
در این بخش به آموزش انجام چهار عمل خواندن ، نوشتن ، ایجاد و حذف اطلاعات که به اختصار ( Delete و Update و Read و Creation ) CRUD نامیده می شود ، در محیط Spring می پردازیم . CRUD در Spring به وسیله دستورات SQL و شی Jdbc Template انجام
می شود .
کد مثال جهت جستجوی یک مقدار عددی در پایگاه داده :
String SQL = "select count(*) from Student"; int rowCount = jdbcTemplateObject.queryForInt( SQL );
کد مثال جهت جستجوی یک مقدار Long در پایگاه داده :
String SQL = "select count(*) from Student"; long rowCount = jdbcTemplateObject.queryForLong( SQL );
کد مثال مربوط به یک Query با Variable bind :
+String SQL = "select age from Student where id = ?";
int age = jdbcTemplateObject.queryForInt(SQL, new Object[]{10});
کد مثال جهت جستجوی یک مقدار String در پایگاه داده :
String SQL = "select name from Student where id = ?";
String name = jdbcTemplateObject.queryForObject(SQL, new Object[]{10}, String.class);
کد مثال جهت جستجو و بازگرداندن مقادیر یک شی object :
String SQL = "select * from Student where id = ?";
Student student = jdbcTemplateObject.queryForObject(SQL,
new Object[]{10}, new StudentMapper());
public class StudentMapper implements RowMapper {
public Student mapRow(ResultSet rs, int rowNum) throws SQLException {
Student student = new Student();
student.setID(rs.getInt("id"));
student.setName(rs.getString("name"));
student.setAge(rs.getInt("age"));
return student;
}
}
کد مثال جهت یافتن و بازگرداندن مقدار چندین شی :
String SQL = "select * from Student"; Liststudents = jdbcTemplateObject.query(SQL, new StudentMapper()); public class StudentMapper implements RowMapper { public Student mapRow(ResultSet rs, int rowNum) throws SQLException { Student student = new Student(); student.setID(rs.getInt("id")); student.setName(rs.getString("name")); student.setAge(rs.getInt("age")); return student; } }
کد مثال جهت وارد کردن یک سطر جدید در پایگاه داده :
String SQL = "insert into Student (name, age) values (?, ?)";
jdbcTemplateObject.update( SQL, new Object[]{"Zara", 11} );
کد مثال جهت به روز رسانی یک سطر در پایگاه داده :
String SQL = "update Student set name = ? where id = ?";
jdbcTemplateObject.update( SQL, new Object[]{"Zara", 10} );
کد مثال جهت حذف یک سطر row از پایگاه داده :
String SQL = "delete Student where id = ?";
jdbcTemplateObject.update( SQL, new Object[]{20} );
اجرای دستورات DDL :
شما می توانید از متد execute (…) شی Jdbc Template جهت اجرای دستورات SQL یا DDL استفاده کنید . کد مثال زیر ، نحوه ایجاد یک جدول جدید را با استفاده از دستور CREATE نشان میدهد :
String SQL = "CREATE TABLE Student( " + "ID INT NOT NULL AUTO_INCREMENT, " + "NAME VARCHAR(20) NOT NULL, " + "AGE INT NOT NULL, " + "PRIMARY KEY (ID));" jdbcTemplateObject.execute( SQL );
مثال های عملی کار با JDBC در چهارچوب String
مثال 1 : Spring JDBC Example :در این مثال به آموزش نحوه یک بذنامه Spring مبتنی بر چهارچوب JDBC خواهیم پرداخت .
مثال 2 : SQL Stored Procedure in Spring :
در مثال دوم نیز به آموزش نحوه فراخوانی و اجرای توابع آماده SQL یا stored Procedure ها در چهارچوب JDBC در Spring خواهیم پرداخت .