JOOQ – ارتباط با دیتابیس به صورت object oriented querying در جاوا
دیتابیس یکی از ارکان یک پروژه برنامه نویسی میباشد . از زمانی که دیتابیس جایگزین فایل ها برای نگهداری اطلاعات شد , ابزار مختلفی برای کار با دیتابیس معرفی شد و هریک مزایا و معایبی داشت . یکی از راه هایی که در تمام زبان های برنامه نویسی مشترک است کار با دیتابیس به صورت نوشتن query ها میباشد . اما نوشتن query ها شامل مشکلاتی از قبیل زمان گیر بودن و اشتباه در نوشتن query ها میباشد. برنامه نویسان کمی حرفه ای تر کلاس هایی برای کار کردن با query هارا برای خودشان مینویسند و مشکل نوشتن query ها را با شی گرایی حل میکنند ولی معمولا در کلاس هایشان متناسب با نوع پروژه هایشان تغییراتی ایجاد میکنند. JOOQ یک ابزار حرفه ای میباشد که سرعت برنامه نویس را در هنگام کار با دیتابیس افزایش میدهد و همچنین با تمام دیتابیس ها سازگاری دارد .
مطمعنا امکان اینکه شما بتوانید این ابزار قدرت مند را با چند خط کد در gradle بکار بگیرید بسیار در سرعت برنامه نویسی شما میتواند موثر باشد . در این مقاله ما با استفاده از intellij , gradle و MySql اقدام به استفاده از آن میکنیم .
۱- یک پروژه جدید میسازیم
File ⇒ New ⇒ Project ⇒ Gradle
۲- از قسمت Additional Libraries and Framework فریم ورک هایی مد نظر را انتخاب میکنیم. در این پروژه تنها به Java اکتفا میکنیم .
۳- اطلاعات لازم برای gradle را مشخص میکنیم :
GroupId : com.jooq ArtifiactId : standard.academy.jooq Version : ۱.۰-SNAPSHOT
4 -در مرحله بعد :
تیک use auto-import و create directories را فعال باقی تیک هارا بر میداریم و use default gradle wrapper را انتخاب میکنیم ( اطلاعات gradle توسط برنامه نویس و متناسب با ساختار و نیاز پروژه میتواند تغییر کند )
5- سپس ادرس و باقی مشخصات پروژه را مشخص میکنیم
۶- یک دیتا بیس میسازیم با نام stndDB
CREATE SCHEMA `ZeroToHero` DEFAULT CHARACTER SET utf8 COLLATE utf8_persian_ci ;
7- و یک table :
CREATE TABLE `ZeroToHero`.`Jooq_table` ( `id` INT NOT NULL, `name` VARCHAR(45) NULL, `code` VARCHAR(45) NULL, PRIMARY KEY (`id`));
8 – gradle را تنظیم میکنیم :
buildscript { repositories { jcenter() } dependencies { classpath 'nu.studer:gradle-jooq-plugin:1.0.5' classpath 'database classpath:' } } apply plugin: 'nu.studer.jooq'
و جون ما در این پروژه از MySql استفاده میکنیم :
classpath 'mysql:mysql-connector-java:+'
repositories { mavenCentral() }
dependencies { compile 'org.jooq:jooq:+' compile 'mysql:mysql-connector-java:+' }
در اینجا connector برای استفاده از MySql و Jooq را به پروژه اضافه میکنیم و gradle به صورت اتومات آن را وارد پروژه میکند
jooq { $database_name$ (sourceSets.main) { jdbc { driver user password } generator { database { name inputSchema } } } }
در اینجا بجای $database_name$ نام دیتابیس خود را قرار دهید و باقی پارامتر هارا میتوانید بر اساس دیتابیس خود مشخص کنید :
jooq { ZeroToHero(sourceSets.main) { jdbc { driver = 'com.mysql.jdbc.Driver' url = 'jdbc:mysql://localhost/stndDB?useUnicode=true&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=UTC' user = 'vhdrjb' password = '1234' } generator { database { name = 'org.jooq.util.mysql.MySQLDatabase' inputSchema = 'stndDB' } } } }
سپس gradle را build کنید . در صورتی که میخواهید log را میخواهید ببینید , دستور gradle build -i را در Terminal بنویسید.
تا اینجا Jooq به پروژه اضافه شده است. حالا پوشه build برای شما ساخته میشود و وقتی انرا باز کنید این آیتم هارا مشاهده میکنید :
در اینجا JooqTable و JooqTableRecord ساخته شده است که JooqTable به عنوان جدول اصلی و JooqTableRecord به عنوان رکورد های آن میباشد . در صورتی که در دیتابیس شما هر تعداد جدول وجود داشته باشد به هنگام build شدن gradle , جدول ها به پروژه اضافه میشود.
حال به تکنولوژی Jooq می پردازیم و یکسری دستورات کاربردی در آن :
DSLContext dslContext = DSL.using(connection, SQLDialect.MYSQL)
در اینجا یک object از روی DSLContext میسازیم تا بتوانیم با دیتابیس ارتباط برقرار کنیم . برای ساختن Object باید connection و نوع دیتابیس را مشخص کنیم که در اینجا ما ازMySql استفاده میکیم و شروع به کار با دیتابیس میکنیم :
try (Connection connection = DriverManager.getConnection("jdbc:mysql://localhost/stndDB?useUnicode=true&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=UTC", "vhdrjb", "1234")) { DSLContext dslContext = DSL.using(connection, SQLDialect.MYSQL); } catch (SQLException e) { e.printStackTrace(); }
برای Insert :
dslContext.insertInto(JOOQ_TABLE).set(JOOQ_TABLE.CODE, "123456").set(JOOQ_TABLE.NAME, "Zero To Hero").execute();
برای Update :
dslContext.update(JOOQ_TABLE).set(JOOQ_TABLE.CODE, "654321").set(JOOQ_TABLE.NAME, "Zero To Hero update").where(JOOQ_TABLE.ID.equal(1)).execute();
برای Delete :
dslContext.delete(JOOQ_TABLE).where(JOOQ_TABLE.ID.equal(2)).execute();
تا اینجا جدول ما به این صورت میباشد :
برای Select :
Result<Record> records = dslContext.select().from(JOOQ_TABLE).where(JOOQ_TABLE.ID.greaterThan(3)).and(JOOQ_TABLE.NAME.likeIgnoreCase("%Zero To Hero%")).fetch(); for (Record r : records) { System.out.println(r.get(JOOQ_TABLE.NAME)); }
و خروجی به این صورت خواهد بود :
Standard Academy
برای استفاده از دستورات بیشتر میتوانید به سایت Jooq مراجعه کنید :
کد کامل gradle :
apply plugin: 'java' buildscript { repositories { jcenter() } dependencies { classpath 'nu.studer:gradle-jooq-plugin:1.0.5' classpath 'mysql:mysql-connector-java:+' } } apply plugin: 'nu.studer.jooq' repositories { mavenCentral() } dependencies { compile 'org.jooq:jooq:+' compile 'mysql:mysql-connector-java:+' } jooq { ZeroToHero(sourceSets.main) { jdbc { driver = 'com.mysql.jdbc.Driver' url = 'jdbc:mysql://localhost/stndDB?useUnicode=true&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=UTC' user = 'vhdrjb' password = '1234' } generator { database { name = 'org.jooq.util.mysql.MySQLDatabase' inputSchema = 'ZeroToHero' } } } }
دیدگاهتان را بنویسید
برای نوشتن دیدگاه باید وارد بشوید.