Content you want the user to see goes here.

Senin, 13 Juli 2015

Membuat CRUD Menggunakan Spring Hibernate Dengan MySQL

Hallo, kali ini mpu-nya mau coba share ilmu lagi dengan bahasa pemrograman JAVA menggunakan Spring Hibernate sambil iseng2 maenin java lagi, Langsung aja :

Sebelum masuk ke langkah pembuatan kodenya, buat settingan project seperti gambar berikut:


Untuk aplikasi yang mpu-nya buat susunan folder project-nya src/main/java/spring_jdbc Pertama buat terlebih dahulu main class aplikasinya, buat class Application.java
package spring_jdbc;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class Application {

  public static void main(String[] args) {
    SpringApplication.run(Application.class, args);
  }

}

Kedua buat class database config-nya dengan nama file DBConfig.java, susunan folder project-nya src/main/java/spring_jdbc/config
package spring_jdbc.config;

import java.util.Properties;
import javax.sql.DataSource;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.jdbc.datasource.DriverManagerDataSource;
import org.springframework.orm.hibernate4.HibernateTransactionManager;
import org.springframework.orm.hibernate4.LocalSessionFactoryBean;
import org.springframework.transaction.annotation.EnableTransactionManagement;

@Configuration
@EnableTransactionManagement
public class DBConfig {

  @Value("${db.driver}")
  private String DB_DRIVER;
  
  @Value("${db.password}")
  private String DB_PASSWORD;
  
  @Value("${db.url}")
  private String DB_URL;
  
  @Value("${db.username}")
  private String DB_USERNAME;

  @Value("${hibernate.dialect}")
  private String HIBERNATE_DIALECT;
  
  @Value("${hibernate.show_sql}")
  private String HIBERNATE_SHOW_SQL;
  
  @Value("${hibernate.hbm2ddl.auto}")
  private String HIBERNATE_HBM2DDL_AUTO;

  @Value("${entitymanager.packagesToScan}")
  private String ENTITYMANAGER_PACKAGES_TO_SCAN;
  
  @Bean
  public DataSource dataSource() {
    DriverManagerDataSource dataSource = new DriverManagerDataSource();
    dataSource.setDriverClassName(DB_DRIVER);
    dataSource.setUrl(DB_URL);
    dataSource.setUsername(DB_USERNAME);
    dataSource.setPassword(DB_PASSWORD);
    return dataSource;
  }

  @Bean
  public LocalSessionFactoryBean sessionFactory() {
    LocalSessionFactoryBean sessionFactoryBean = new LocalSessionFactoryBean();
    sessionFactoryBean.setDataSource(dataSource());
    sessionFactoryBean.setPackagesToScan(ENTITYMANAGER_PACKAGES_TO_SCAN);
    Properties hibernateProperties = new Properties();
    hibernateProperties.put("hibernate.dialect", HIBERNATE_DIALECT);
    hibernateProperties.put("hibernate.show_sql", HIBERNATE_SHOW_SQL);
    hibernateProperties.put("hibernate.hbm2ddl.auto", HIBERNATE_HBM2DDL_AUTO);
    sessionFactoryBean.setHibernateProperties(hibernateProperties);
    
    return sessionFactoryBean;
  }

  @Bean
  public HibernateTransactionManager transactionManager() {
    HibernateTransactionManager transactionManager = new HibernateTransactionManager();
    transactionManager.setSessionFactory(sessionFactory().getObject());
    return transactionManager;
  }

}

Ketiga setting file application.properties untuk koneksi database-nya, di src/main/resources
# Database
db.driver: com.mysql.jdbc.Driver
db.url: jdbc:mysql://(url_apps):(port_mysql)/nama_database
db.username: username
db.password: password

# Hibernate
hibernate.dialect: org.hibernate.dialect.MySQL5Dialect
hibernate.show_sql: true
hibernate.hbm2ddl.auto: update
entitymanager.packagesToScan: (package_main_aplikasi)

Keempat buat Controller dengan nama file UserController.java, susunan folder project-nya src/main/java/spring_jdbc/controller
package spring_jdbc.controller;

import spring_jdbc.model.User;
import spring_jdbc.model.UserDao;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

/*
 * buat mapping pemanggilan url untuk controller
 */
@Controller
@RequestMapping(value="/user")
public class UserController {

  @Autowired
  protected UserDao _userDao;
  
  /*
   * mapping ini berfungsi untuk pemanggilan url
   * pada aksi insert/create data kedalam table
   */
  @RequestMapping(value="/save")
  @ResponseBody
  public String create(String email, String name) {
    try {
     User user = new User(email, name);
     _userDao.save(user);
    }
    catch(Exception ex) {
      return ex.getMessage();
    }
    return "User succesfully saved!";
  }
  
  /*
   * mapping ini berfungsi untuk pemanggilan url
   * pada aksi delete data di table
   */
  @RequestMapping(value="/delete")
  @ResponseBody
  public String delete(long id) {
    try {
      User user = new User(id);
      _userDao.delete(user);
    }
    catch(Exception ex) {
      return ex.getMessage();
    }
    return "User succesfully deleted!";
  }
  
  /*
   * mapping ini berfungsi untuk pemanggilan url
   * pada aksi update data di table
   */
  @RequestMapping(value="/update")
  @ResponseBody
  public String update(long id, String email, String name) {
   try {
    _userDao.update(id, email, name);
    return "Update succesfully";
   }
   catch(Exception ex) {
    return ex.getMessage();
   }
  }
  
  /*
   * mapping ini berfungsi untuk pemanggilan url
   * pada aksi pencarian data ID berdasarkan email
   * yang di inputkan
   */
  @RequestMapping(value="/get-by-email")
  @ResponseBody
  public String getByEmail(String email) {
    String userId = null;
    try {
     User user = _userDao.getByEmail(email);
        userId = String.valueOf(user.getId());
    }
    catch(Exception ex) {
     return ex.getMessage();
    }
    return "The user id is: "+userId;
  }
  
  /*
   * mapping ini berfungsi untuk pemanggilan url
   * pada aksi pencarian data ID berdasarkan email
   * yang di inputkan dan nilai pengembaliannya berupa json
   */
  @SuppressWarnings("unchecked")
  @RequestMapping(value="/get-by-mail")
  @ResponseBody
  public List<User> getByMail(String email) {
   try {
    return (List<User>) _userDao.getByMail(email);
   }
   catch(Exception ex) {
    return (List<User>) ex;
   }
  }
  
  /*
   * mapping ini berfungsi untuk pemanggilan url
   * pada aksi pencarian data secara keseluruhan
   * dan nilai pengembaliannya berupa json
   */
  @SuppressWarnings("unchecked")
  @RequestMapping(value="/get-all")
  @ResponseBody
  public List<User> getAll(String id) {
   try {
    return _userDao.getAll();
   }
   catch(Exception e) {
    return (List<User>) e;
   }
  }

  /*
   * mapping ini berfungsi untuk pemanggilan url
   * pada aksi pencarian data secara keseluruhan
   * tanpa menggunakan tanda (?) dalam pemanggilan
   * variabel-nya dan nilai pengembaliannya berupa json
   */
  @SuppressWarnings("unchecked")
  @RequestMapping(value="/get_by_mail/{email:.+}", method=RequestMethod.GET)
  @ResponseBody
  public List<User> getByGender(@PathVariable("email") String email, ModelMap model) {
   try {
    return (List<User>) _userDao.getByMail(email);
   }
   catch(Exception ex) {
    return (List<User>) ex;
   }
  }
  
}

Kelima buat file User.java dan UserDao.java, susunan folder project-nya src/main/java/spring_jdbc/model.
file User.java berfungsi untuk men-set variabel2 yang akan di panggil oleh file UserDao.java. berikut file User.java
package spring_jdbc.model;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;

@Entity
@Table(name="customer")
public class User {

  @Id
  @GeneratedValue(strategy = GenerationType.AUTO)
  private long id;
  
  @NotNull
  @Size(min = 3, max = 80)
  private String email;
  
  @NotNull
  @Size(min = 2, max = 80)
  private String name;

  protected User() { }
  
  /*
   * buat method User dengan attribute hanya ID
   * berfungsi untuk pencarian atau menampilkan informasi
   * berdasarkan ID saja
   */
  public User(long id) { 
    this.id = id;
  }

  /* 
   * buat method User dengan attribute selain ID
   * berfungsi untuk input data
   */
  public User(String email, String name) {
 this.email = email;
    this.name = name;
  }

  /*
   * buat method id, kemudian buat method pemanggilannya
   * yang mana nilai method-nya akan di kembalikan ke method pemanggilnya
   */
  public void setId(long id) {
    this.id = id;
  }
  public long getId() {
    return id;
  }

  /*
   * buat method email, kemudian buat method pemanggilannya
   * yang mana nilai method-nya akan di kembalikan ke method pemanggilnya
   */
  public void setEmail(String email) {
    this.email = email;
  }
  public String getEmail() {
    return email;
  }
  
  /*
   * buat method name, kemudian buat method pemanggilannya
   * yang mana nilai method-nya akan di kembalikan ke method pemanggilnya
   */
  public void setName(String name) {
    this.name = name;
  }
  public String getName() {
    return name;
  }
  
}
berikut file UserDao.java
package spring_jdbc.model;

import java.util.List;
import javax.transaction.Transactional;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;

@Repository
@Transactional
public class UserDao {
  
  @Autowired
  private SessionFactory _sessionFactory;
  
  private Session getSession() {
    return _sessionFactory.getCurrentSession();
  }

  /*
   * menyimpan data berdasarkan id
   */
  public void save(User user) {
    getSession().save(user);
    return;
  }
  
  /*
   * menghapus data berdasarkan id
   */
  public void delete(User user) {
    getSession().delete(user);
    return;
  }
  
  /*
   * mengupdate data berdasarkan id
   */
  public void update(long id, String email, String name) {
    getSession().createQuery("UPDATE User SET email=:byEmail, name=:byName WHERE id=:byId")
     .setParameter("byEmail", email)
     .setParameter("byName", name)
     .setParameter("byId", id)
     .executeUpdate();
  //getSession().update(user);
    return;
  }
  
  /*
   * menampilkan data berdasarkan email yang dimasukkan
   * dan mengembalikan nilainya berupa string
   */
  public User getByEmail(String email) {
    return (User) getSession()
      .createQuery("select b from User b where email = :byEmail")
      .setParameter("byEmail", email)
      .uniqueResult();
  }
  
  /*
   * menampilkan data berdasarkan email yang dimasukkan
   * dan mengembalikan nilainya berupa json
   */
  @SuppressWarnings("unchecked")
  public List<User> getByMail(String email) {
   return getSession()
       .createQuery("select b from User b where email = :byEmail")
       .setParameter("byEmail", email)
       .list();
  }
  
  /*
   * menampilkan data secara keseluruhan dan
   * mengembalikan nilainya berupa json
   */
  @SuppressWarnings("unchecked")
  public List<User> getAll() {
    return getSession().createQuery("from User").list();
  }
  
}

Setelah selesai membuat file2 diatas, langkah selanjutnya ketikan url berikut untuk membuat data. Jangan lupa di mysql-nya buat database-nya terlebih dahulu.
http://localhost:8080/user/save?email=chocolate@gmail.com&name=cocolatos (insert)
http://localhost:8080/user/update?id=1&email=change@gmail.com&name=strawberry (update)
http://localhost:8080/user/delete?id=1 (delete)
http://localhost:8080/user/get-all (select)
http://localhost:8080/user/get-by-mail?email=(nama_email) (select)
http://localhost:8080/user/get_by_mail/(nama_email) (select)
* (http://localhost:8080/) tergantung setting tomcat masing2

Sekian share yang mpu-nya kasih, semoga bermanfaat ^_^

Tidak ada komentar:

Posting Komentar

Perhatian! Silahkan berkomentar tanpa ada unsur SARA ^_^