diff --git a/activejdbc/pom.xml b/activejdbc/pom.xml
new file mode 100644
index 0000000000..7a49d37411
--- /dev/null
+++ b/activejdbc/pom.xml
@@ -0,0 +1,129 @@
+
+ 4.0.0
+ com.baeldung
+ activejdbc
+ 1.0-SNAPSHOT
+ jar
+ activejdbc
+ http://maven.apache.org
+
+ UTF-8
+ 1.4.13
+ development.test,development
+
+
+
+
+ org.apache.maven.plugins
+ maven-compiler-plugin
+ 3.6.0
+
+ 1.8
+ 1.8
+ UTF-8
+
+
+
+ org.javalite
+ activejdbc-instrumentation
+ ${activejdbc.version}
+
+
+ process-classes
+
+ instrument
+
+
+
+
+
+ org.javalite
+ db-migrator-maven-plugin
+ ${activejdbc.version}
+
+ ${project.basedir}/src/main/resources/database.properties
+ ${environments}
+
+
+
+ mysql
+ mysql-connector-java
+ 5.1.34
+
+
+
+
+ org.apache.maven.plugins
+ maven-surefire-plugin
+ 2.18.1
+
+ brief
+ true
+ false
+
+ **/*Spec*.java
+ **/*Test*.java
+
+
+ **/helpers/*
+ **/*$*
+
+
+
+
+
+
+
+ junit
+ junit
+ 4.12
+ test
+
+
+ org.javalite
+ activejdbc
+ ${activejdbc.version}
+
+
+ opensymphony
+ oscache
+
+
+
+
+ mysql
+ mysql-connector-java
+ 5.1.34
+
+
+ org.slf4j
+ slf4j-simple
+ 1.7.9
+
+
+
+
+ snapshots1
+ JavaLite Snapshots1
+ http://repo.javalite.io/
+
+ true
+ always
+ warn
+
+
+
+
+
+ snapshots2
+ JavaLite Snapshots2
+ http://repo.javalite.io/
+
+ true
+ always
+ warn
+
+
+
+
diff --git a/activejdbc/src/main/java/com/baeldung/ActiveJDBCApp.java b/activejdbc/src/main/java/com/baeldung/ActiveJDBCApp.java
new file mode 100644
index 0000000000..8906d3e759
--- /dev/null
+++ b/activejdbc/src/main/java/com/baeldung/ActiveJDBCApp.java
@@ -0,0 +1,61 @@
+package com.baeldung;
+
+
+import com.baeldung.model.Employee;
+import com.baeldung.model.Role;
+import org.javalite.activejdbc.Base;
+import org.javalite.activejdbc.LazyList;
+import org.javalite.activejdbc.Model;
+
+public class ActiveJDBCApp
+{
+ public static void main( String[] args )
+ {
+ try {
+ Base.open();
+ ActiveJDBCApp app = new ActiveJDBCApp();
+ app.create();
+ app.update();
+ app.delete();
+ app.deleteCascade();
+ } catch (Exception e) {
+ e.printStackTrace();
+ } finally {
+ Base.close();
+ }
+ }
+
+ protected void create() {
+ Employee employee = new Employee("Hugo","C","M","BN");
+ employee.saveIt();
+ employee.add(new Role("Java Developer","BN"));
+ LazyList all = Employee.findAll();
+ System.out.println(all.size());
+ }
+
+ protected void update() {
+ Employee employee = Employee.findFirst("first_name = ?","Hugo");
+ employee.set("last_namea","Choi").saveIt();
+ employee = Employee.findFirst("last_name = ?","Choi");
+ System.out.println(employee.getString("first_name") + " " + employee.getString("last_name"));
+ }
+
+ protected void delete() {
+ Employee employee = Employee.findFirst("first_name = ?","Hugo");
+ employee.delete();
+ employee = Employee.findFirst("last_name = ?","Choi");
+ if(null == employee){
+ System.out.println("No such Employee found!");
+ }
+ }
+
+ protected void deleteCascade() {
+ create();
+ Employee employee = Employee.findFirst("first_name = ?","Hugo");
+ employee.deleteCascade();
+ employee = Employee.findFirst("last_name = ?","C");
+ if(null == employee){
+ System.out.println("No such Employee found!");
+ }
+ }
+}
diff --git a/activejdbc/src/main/java/com/baeldung/model/Employee.java b/activejdbc/src/main/java/com/baeldung/model/Employee.java
new file mode 100644
index 0000000000..b7fa8aaf1f
--- /dev/null
+++ b/activejdbc/src/main/java/com/baeldung/model/Employee.java
@@ -0,0 +1,19 @@
+package com.baeldung.model;
+
+
+import org.javalite.activejdbc.Model;
+
+public class Employee extends Model {
+
+ public Employee(){
+
+ }
+
+ public Employee(String firstName, String lastName, String gender, String createdBy) {
+ set("first_name1",firstName);
+ set("last_name",lastName);
+ set("gender",gender);
+ set("created_by",createdBy);
+ }
+
+}
diff --git a/activejdbc/src/main/java/com/baeldung/model/Role.java b/activejdbc/src/main/java/com/baeldung/model/Role.java
new file mode 100644
index 0000000000..3f425dbe6b
--- /dev/null
+++ b/activejdbc/src/main/java/com/baeldung/model/Role.java
@@ -0,0 +1,18 @@
+package com.baeldung.model;
+
+
+import org.javalite.activejdbc.Model;
+import org.javalite.activejdbc.annotations.Table;
+
+@Table("EMP_ROLES")
+public class Role extends Model {
+
+ public Role(){
+
+ }
+
+ public Role(String role,String createdBy){
+ set("role_name",role);
+ set("created_by",createdBy);
+ }
+}
diff --git a/activejdbc/src/main/migration/_create_tables.sql b/activejdbc/src/main/migration/_create_tables.sql
new file mode 100644
index 0000000000..19fc1e72d7
--- /dev/null
+++ b/activejdbc/src/main/migration/_create_tables.sql
@@ -0,0 +1,25 @@
+# noinspection SqlNoDataSourceInspectionForFile
+
+create table organisation.employees
+(
+ id int not null auto_increment
+ primary key,
+ first_name varchar(100) not null,
+ last_name varchar(100) not null,
+ gender varchar(1) not null,
+ created_at datetime not null,
+ updated_at datetime null,
+ created_by varchar(100) not null,
+ updated_by varchar(100) null
+)ENGINE = InnoDB DEFAULT CHARSET = utf8;
+
+create table organisation.emp_roles
+(
+ id int not null auto_increment primary key,
+ employee_id int not null,
+ role_name varchar(100) not null,
+ created_at datetime not null,
+ updated_at datetime null,
+ created_by varchar(100) not null,
+ updated_by varchar(100) null
+)ENGINE = InnoDB DEFAULT CHARSET = utf8;
diff --git a/activejdbc/src/main/resources/database.properties b/activejdbc/src/main/resources/database.properties
new file mode 100644
index 0000000000..7e665fe8a1
--- /dev/null
+++ b/activejdbc/src/main/resources/database.properties
@@ -0,0 +1,10 @@
+development.driver=com.mysql.jdbc.Driver
+development.username=root
+development.password=123456
+development.url=jdbc:mysql://localhost/organisation
+
+
+development.test.driver=com.mysql.jdbc.Driver
+development.test.username=root
+development.test.password=123456
+development.test.url=jdbc:mysql://localhost/organisation_test
\ No newline at end of file
diff --git a/activejdbc/src/test/java/com/baeldung/ActiveJDBCAppTest.java b/activejdbc/src/test/java/com/baeldung/ActiveJDBCAppTest.java
new file mode 100644
index 0000000000..316dc34712
--- /dev/null
+++ b/activejdbc/src/test/java/com/baeldung/ActiveJDBCAppTest.java
@@ -0,0 +1,51 @@
+package com.baeldung;
+
+import com.baeldung.model.Employee;
+import com.baeldung.model.Role;
+import org.javalite.activejdbc.test.DBSpec;
+import org.junit.Test;
+
+import java.util.List;
+
+public class ActiveJDBCAppTest extends DBSpec
+{
+ @Test
+ public void ifEmployeeCreated_thenIsValid() {
+ Employee employee = new Employee("B", "N", "M", "BN");
+ the(employee).shouldBe("valid");
+ }
+
+ @Test
+ public void ifEmployeeCreatedWithRoles_thenShouldPersist() {
+ Employee employee = new Employee("B", "N", "M", "BN");
+ employee.saveIt();
+ employee.add(new Role("Java Developer","BN"));
+ employee.add(new Role("Lead Java Developer","BN"));
+ a(Role.count()).shouldBeEqual(2);
+ List roles = employee.getAll(Role.class).orderBy("created_at");
+ the(roles.get(0).getRoleName()).shouldBeEqual("Java Developer");
+ the(roles.get(1).getRoleName()).shouldBeEqual("Lead Java Developer");
+ }
+
+ @Test
+ public void ifEmployeeCreatedWithRoles_whenNameUpdated_thenShouldShowNewName() {
+ Employee employee = new Employee("Binesh", "N", "M", "BN");
+ employee.saveIt();
+ employee.add(new Role("Java Developer","BN"));
+ employee.add(new Role("Lead Java Developer","BN"));
+ employee = Employee.findFirst("first_name = ?", "Binesh");
+ employee.set("last_name","Narayanan").saveIt();
+ Employee updated = Employee.findFirst("first_name = ?", "Binesh");
+ the(updated.getLastName()).shouldBeEqual("Narayanan");
+ }
+
+ @Test
+ public void ifEmployeeCreatedWithRoles_whenDeleted_thenShouldNotBeFound() {
+ Employee employee = new Employee("Binesh", "N", "M", "BN");
+ employee.saveIt();
+ employee.add(new Role("Java Developer","BN"));
+ employee.delete();
+ employee = Employee.findFirst("first_name = ?", "Binesh");
+ the(employee).shouldBeNull();
+ }
+}