Tampilkan postingan dengan label hibernate. Tampilkan semua postingan
Tampilkan postingan dengan label hibernate. Tampilkan semua postingan

Kali ini gw akan bercerita tentang annotation @Basic dan @Lob juga lazy loading. Seperti diketahui bahwa @Basic dan @Lob merupakan anotasi kategori pemetaan langsung (direct mapping) yang mempunyai definisi akan langsung mengkonfigurasi pemetaan untuk kebanyakan tipe data primitiv,membungkus (wrappers) data primitiv dan tipe enum.


Sebagai contoh terdapat kelas student.java


@Entity
public class Student {
@Id
private int id = 0;

private String name;

@Basic(fetch = FetchType.LAZY)
@Lob
private byte[] picture;

public int getId() {
return id;
}


Penggunaan @Basic juga mengkonfigurasi tipe fetch ke LAZY. Tidak semua data yang kita ambil dari database akan digunakan pada saat itu juga. Kadangkala sebagian besar data yang diambil akan dibuang. Tentunya hal ini akan membuat pemborosan kerja CPU, penggunaan memori, dan juga bandwidth. Beberapa ORM mendukung fitur lazy-loading, yaitu mengambil data kalau benar-benar diperlukan saja.Bila aplikasi kita menggunakan ORM, perintah SQL ke database dieksekusi oleh ORM, bukan oleh kode program kita. Karena itu didalam ORM kita memiliki kebebasan untuk menjalankan SQL kapan saja, asal tidak mengacaukan aplikasi kita. Kebebasan ini digunakan oleh ORM untuk menunda dan mengumpulkan eksekusi SQL, sehingga bisa dijalankan secara efisien. Hal ini lah yang disebut Lazy Loading.

Gw coba jelasin proyek ABSOLUNILA dalam English ya.Sekalian belajar. Absolunila is project base of web design.And i use java programming with Spring and Hibernate. First i design for xml file,like applicationContext.xml, dispatcher-servlet.xml, web.xml. In may project i use annotation.

First I create Fakultas.class and Jurusan.class in model package.



Fakultas.class
/**
*
* @author dedy
*/
@Entity
@Table(name="fakultas")
public class Fakultas implements Serializable{

@Id
@Column(name="kode_fakultas",length=5,nullable=false,unique=true)
private String kodeFakultas;
@Column(name="nama_fakultas",length=100,nullable=false,unique=false)
private String namaFakultas;
@OneToMany(mappedBy="fakultas")
@Column(name="kode_jurusan")
//@Cascade({CascadeType.DELETE_ORPHAN})
private Set jurusans;

//getter and setter

@Override
public String toString() {
return ToStringBuilder.reflectionToString(this);
}

@Override
public boolean equals(Object obj) {
return EqualsBuilder.reflectionEquals(this, obj);
}

@Override
public int hashCode() {
return HashCodeBuilder.reflectionHashCode(this);
}




Jurusan.class
/**
*
* @author dedy
*/
@Entity
@Table(name="jurusan")
public class Jurusan implements Serializable{

@Id
@Column(name="kode_jurusan",length=5,nullable=false,unique=true)
private String kodeJurusan;
@Column(name="nama_jurusan",length=100,nullable=false,unique=false)
private String namaJurusan;
@ManyToOne
@JoinColumn(name="kode_fakultas")
private Fakultas fakultas;

//getter and setter

@Override
public String toString() {
return ToStringBuilder.reflectionToString(this);
}

@Override
public boolean equals(Object obj) {
return EqualsBuilder.reflectionEquals(this, obj);
}

@Override
public int hashCode() {
return HashCodeBuilder.reflectionHashCode(this);
}

Then made the DAO class.

FakultasDao.class
public interface FakultasDao {

public Fakultas save(Fakultas fakultas);
public void delete(Fakultas fakultas);
}



JurusanDao.class
public interface JurusanDao {

public Jurusan save(Jurusan jurusan);
}


Then made class for implementation

FakultasDaoImpl.class
@Repository("fakultasDao")
public class FakultasDaoImpl implements FakultasDao {

private static final Log log = LogFactory.getLog(FakultasDaoImpl.class);
private SessionFactory sessionFactory;

@Autowired
public void setSessionFactory(SessionFactory sessionFactory) {
this.sessionFactory = sessionFactory;
}

public Fakultas save(Fakultas fakultas) {
sessionFactory.getCurrentSession().save(fakultas);
return fakultas;
}

public void delete(Fakultas fakultas) {
sessionFactory.getCurrentSession().delete(fakultas);
}



JurusanDaoImpl.class
@Repository("jurusanDao")
public class JurusanDaoImpl implements JurusanDao{

private static final Log log = LogFactory.getLog(JurusanDaoImpl.class);
private SessionFactory sessionFactory;

@Autowired
public void setSessionFactory(SessionFactory sessionFactory) {
this.sessionFactory = sessionFactory;
}

public Jurusan save(Jurusan jurusan) {
this.sessionFactory.getCurrentSession().save(jurusan);
return jurusan;
}


Next made class service and it implementation

FakultasService.class
public interface FakultasService {

public Fakultas save(Fakultas fakultas);
public void delete(Fakultas fakultas);
}



JurusanService.class
public interface JurusanService {

public Jurusan save(Jurusan jurusan);
}



FakultasServiceImpl.class
@Repository("fakultasService")
@Transactional(readOnly=true)
public class FakultasServiceImpl implements FakultasService{

private FakultasDao fakultasDao;

@Autowired
public void setFakultasDao(FakultasDao fakultasDao) {
this.fakultasDao = fakultasDao;
}

@Transactional(readOnly=false)
public Fakultas save(Fakultas fakultas) {
fakultasDao.save(fakultas);
return fakultas;
}

@Transactional(readOnly=false)
public void delete(Fakultas fakultas) {
fakultasDao.delete(fakultas);
}



JurusanServiceImpl.class
@Repository("jurusanService")
@Transactional(readOnly=true)
public class JurusanServiceImpl implements JurusanService{

private JurusanDao jurusanDao;

@Autowired
public void setFakultasDao(JurusanDao jurusanDao) {
this.jurusanDao = jurusanDao;
}

@Transactional(readOnly=false)
public Jurusan save(Jurusan jurusan) {
jurusanDao.save(jurusan);
return jurusan;
}


At least we made controller class


IndexController.java
@Controller(value="indexController")
public class IndexController {

@RequestMapping("/index.htm")
public void index() {

}


After all class has been made, we should test the class.I make class FakultasTest.class


@ContextConfiguration(locations = {"applicationContext.xml"})
@TransactionConfiguration(transactionManager = "transactionManager")
public class FakultasTest extends AbstractTransactionalJUnit38SpringContextTests {

private static final Log log = LogFactory.getLog(FakultasTest.class);

@Resource
private FakultasService fakultasService;
@Resource
private JurusanService jurusanService;

public void testCreateTable() {
log.info("membuat tabel");
}

@Rollback(false)
public void testSaveFakultas(){
log.info("membuat fakultas");
Fakultas fak = new Fakultas();
fak.setKodeFakultas("tek");
fak.setNamaFakultas("teknik");
fakultasService.save(fak);

//jurusan
log.info("membuat jurusan");
Jurusan jur = new Jurusan();
jur.setFakultas(fak);
jur.setKodeJurusan("elt");
jur.setNamaJurusan("elektro");
jurusanService.save(jur);
}


So, this my first posting.Actually the class model has been completely.May this posting can help u for learn java.Any comment,question,critic?