6.24.2015

java, tutorial, spring, api, rest : simple insert,update,delete (CRUD) dengan NamedParameterJdbcTemplate

Kali ini saya akan menuliskan sebuah tutorial aplikasi REST untuk melakukan CRUD dengan menggunakan NamedParameterJdbcTemplate. Mungkin hampir sama sih kalo kita menggunakan JdbcTemplate

1. untuk pertama mungkin kita perlu membuat sebuah domain, misal domain user dengan isi sebagai berikut.

package com.eka.auth.domain;

/**
 *
 * @author pnukeid
 */
public class Users {



    private String username;
    private String password;
    private Boolean enabled;

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public Boolean getEnabled() {
        return enabled;
    }

    public void setEnabled(Boolean enabled) {
        this.enabled = enabled;
    }

}
 
2. selanjutnya adalah membuat dao interface dan dao implementation.


ini adalah contoh interface dao
package com.eka.auth.dao;

import com.eka.auth.domain.Users;
import com.eka.auth.model.InputPagging;
import java.util.List;

/**

 * @author pnukeid
 */

public interface UsersDao  {
    
    public void save(Users users) throws Exception;
    public void update(Users users) throws Exception;
    public void delete(Users users) throws Exception;
    public Users findByUserName(String username) throws Exception;
    public List<users> findAll(InputPagging pagging) throws Exception;
    public Integer count() throws Exception;
}
dan berikutnya adalah implementation dari dao interface nya.

package com.noi.auth.dao.impl;

import com.eka.auth.dao.UsersDao;
import com.eka.auth.domain.Users;
import com.eka.auth.mapper.UsersExcludePasswordMapper;
import com.eka.auth.mapper.UsersMapper;
import com.eka.auth.model.InputPagging;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.namedparam.MapSqlParameterSource;
import org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate;
import org.springframework.jdbc.core.namedparam.SqlParameterSource;
import org.springframework.stereotype.Repository;

/**
 *
 * @author pnukeid
 */
@Repository
public class UsersDaoImpl implements UsersDao {


    @Autowired
    private NamedParameterJdbcTemplate namedParameterJdbcTemplate;

    public void save(Users users) throws Exception {
        String SQL = "INSERT INTO users (username, password, enabled) VALUES (:username, :password, :enabled)";
        Map namedParameters = new HashMap();
        namedParameters.put("username", users.getUsername());
        namedParameters.put("password", users.getPassword());
        namedParameters.put("enabled", users.getEnabled());
        namedParameterJdbcTemplate.update(SQL, namedParameters);
    }

    public void update(Users users) throws Exception {
        String SQL = "UPDATE users SET password = :password, enabled = :enabled WHERE username = :username";
        Map namedParameters = new HashMap();
        namedParameters.put("username", users.getUsername());
        namedParameters.put("password", users.getPassword());
        namedParameters.put("enabled", users.getEnabled());
        namedParameterJdbcTemplate.update(SQL, namedParameters);
    }

    public void delete(Users users) throws Exception {
        String SQL = "DELETE FROM users WHERE username = :username";
        Map namedParameters = new HashMap();
        namedParameters.put("username", users.getUsername());
        namedParameterJdbcTemplate.update(SQL, namedParameters);
    }

    public Users findByUserName(String username) throws Exception {

        String SQL = "SELECT count(*) FROM users WHERE username = :username";
        SqlParameterSource sqlParam = new MapSqlParameterSource().addValue("username", username);
        Integer usersCount = namedParameterJdbcTemplate.queryForObject(SQL, sqlParam, Integer.class);

        Users users = null;

        if (usersCount != 0) {
            SQL = "SELECT * FROM users WHERE username = :username";
            SqlParameterSource namedParameters = new MapSqlParameterSource("username", username);
            users = (Users) namedParameterJdbcTemplate.queryForObject(SQL, namedParameters, new UsersMapper());
        } 
        return users;
    }

    public List<users> findAll(InputPagging pagging) throws Exception {
//        namedJdbcTemplate = new NamedParameterJdbcTemplate(jdbcTemplateOauth);
        String SQL = "SELECT * FROM users LIMIT :offset,:count";
        SqlParameterSource sqlParam = new MapSqlParameterSource().addValue("offset", pagging.getOffset()).addValue("count", pagging.getLimit());
        List<users> users = (List<users>) namedParameterJdbcTemplate.query(SQL, sqlParam, new UsersMapper());
        return users;
    }

    public Integer count() throws Exception {
        String SQL = "SELECT count(*) FROM users";
        SqlParameterSource sqlParam = new MapSqlParameterSource().addValue("", "");
        Integer usersCount = -100;
        return usersCount = namedParameterJdbcTemplate.queryForObject(SQL, sqlParam, Integer.class);
    }

}


3. selanjutnya adalah service. service di java ini berperan sebagai rule bisnisnya. jadi segala kegiatan process bisnis berjalan di service ini. ada kalanya definisi service interface ini tidak jauh beda dengan yang sudah kita definisikan di dao interface.

package com.eka.auth.service;


import com.eka.auth.domain.Users;
import com.eka.auth.model.InputPagging;

import java.util.List;

/**

 * @author pnukeid
 */
public interface UsersService {
    
    public void save(Users users) throws Exception;
    public void delete(String username) throws Exception;
    public Users findUserByUserName(String username) throws Exception;
    public Boolean findUserIsAvailableByUserName(String username) throws Exception;
    public List<users> findAll(InputPagging pagging) throws Exception;
}


dan untuk service implementationnya.

package com.eka.auth.service.impl;


import com.eka.auth.dao.UsersDao;
import com.eka.auth.domain.Users;
import com.eka.auth.model.InputPagging;
import com.eka.auth.service.UsersService;
import java.util.ArrayList;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

/**
 *
 * @author pnukeid
 */
@Service
public class UsersServiceImpl implements UsersService {
    
    @Autowired
    private UsersDao usersDao;
     
    @Transactional
    public void save(Users users) throws Exception {
        
        Users users = new Users();        
        users.setUsername(userProfiles.getUsername());
        users.setPassword(userProfiles.getPassword());
        users.setEnabled(userProfiles.getEnabled());

        if(usersDao.findByUserName(userProfiles.getUsername()) == null){
            usersDao.save(users);
        }else{
            usersDao.update(users);
        }
    }

    @Transactional
    public void delete(String username) throws Exception {

        Users users = usersDao.findByUserName(username);
        usersDao.delete(users);
    }

    public List<users> findAll(InputPagging pagging) throws Exception {
        return usersDao.findAll(pagging);
    }
 

    public Users findUserByUserName(String username) throws Exception {
        return usersDao.findByUserName(username);
    }

    public Boolean findUserIsAvailableByUserName(String username) throws Exception {
        Boolean usernameIsAvailable = false;
        
        if(usersDao.findByUserName(username) == null)
            usernameIsAvailable = true;
        
        return usernameIsAvailable;
    }
}


untuk yang terakhir adalah mmebuat REST apinya. yang nantinya aplikasi yang selesai dibuat ini akan bisa diakses oleh apa saja.

package com.eka.auth.admin.controller.ajax;

import com.eka.auth.domain.Users;
import com.eka.auth.model.InputPagging;
import com.eka.auth.model.InputUsername;
import com.eka.auth.service.UsersService;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;

/**
 *
 * @author pnukeid
 */
@Controller
@RequestMapping("api/v1/admin/user")
public class UserAdminAjaxController {
   
    @Autowired
    private UsersService usersService;
   
   
    /* GET LIST ALL USER FROM DATABASE*/
    @ResponseBody
    @RequestMapping(consumes = {MediaType.APPLICATION_JSON_VALUE}, produces = {MediaType.APPLICATION_JSON_VALUE},
            method = RequestMethod.POST,
            value = "/getdata")
    ResponseEntity<Object> getAllUser(
            @RequestBody InputPagging requestBody,
            HttpServletResponse response) throws Exception {
        Users resultPagging = usersService.findAll(requestBody);
        return new ResponseEntity<Object>(resultPagging, HttpStatus.OK);
    }
   
    /* SAVE / UPDATE USER */
    @ResponseBody
    @RequestMapping(consumes = {MediaType.APPLICATION_JSON_VALUE},
            method = RequestMethod.POST,
            value = "/")
    ResponseEntity<Object> saveUser(
            @RequestBody UsersProfiles requestBody,
            HttpServletResponse response) throws Exception {
        usersService.save(requestBody);
        return new ResponseEntity<Object>("saved", HttpStatus.OK);
    }
   
    /* DELETE USER */
    @ResponseBody
    @RequestMapping(consumes = {MediaType.APPLICATION_JSON_VALUE},
            method = RequestMethod.DELETE,
            value = "/")
    ResponseEntity<Object> deleteUser(
            @RequestBody InputUsername requestBody,
            HttpServletResponse response) throws Exception {
        String username = requestBody.getUsername();
        usersService.delete(username);
        return new ResponseEntity<Object>("deleted", HttpStatus.OK);
    }
   
    /* FIND USERNAME IS AVAILABLE OR NOT*/
   
    @ResponseBody
    @RequestMapping(produces = {MediaType.APPLICATION_JSON_VALUE},
            method = RequestMethod.POST,
            value = "/available")
    ResponseEntity<Object> checkUserName(
            HttpServletRequest request,
            HttpServletResponse response) throws Exception {
        Boolean isAvailable;
        String username = request.getParameter("username");
        isAvailable = usersService.findUserIsAvailableByUserName(username);
        return new ResponseEntity<Object>(isAvailable, HttpStatus.OK);
    }

}
 


sekian.

6.22.2015

Java, Snippet : penggunaan fungsi split pada java

Misal saya mempunyai sebuah tulisan "Saya,suka,makan,nasi" dan anda ingin mendapatkan satu persatu dari kata tersebut, dan jika anda ingin mendapatkan kata "nasi" saja. Dengan cara yang simpel saya akan tunjukkan didalam pemrograman java.


String kata = "Saya,suka,makan,nasi";
String[] kataSplit = kata.split(",");
writeln("kataSplit[3]");

Hasilnya adalah "nasi"

6.18.2015

memasang SyntaxHighlighter agar kode program yang ditampilkan pada blog lebih mudah dibaca.

untuk penulis blog yang baru belajaran seperti saya saat ini, plugin ini saya bermanfaat sekali, karena mungkin sebagian besar tulisan saya nanti akan banyak berupa potongan-potongan kode. setelah mencari-cari dengan googling, ternyata saya menemukan http://alexgorbatchev.com/SyntaxHighlighter/ . dan sekarang setelah baca-baca petunjuknya mulailah percobaan memasang. Sedikit membingungkan awalnya, tapi setelah mencari -cara  ketemu dari stackoverflow. berikut cara-caranya..

1. buka template blogger anda.
2. setelah template blogger terbuka maka copy kan code css ini didalam template anda sebelum tag <b:skin>
3. paste kode yang berada dibawah ini sebelum tag </head>
<script src="http://syntaxhighlighter.googlecode.com/svn/trunk/Scripts/shCore.js" type="text/javascript"></script>
<script src="http://syntaxhighlighter.googlecode.com/svn/trunk/Scripts/shBrushCpp.js" type="text/javascript"></script>
<script src="http://syntaxhighlighter.googlecode.com/svn/trunk/Scripts/shBrushCSharp.js" type="text/javascript"></script>
<script src="http://syntaxhighlighter.googlecode.com/svn/trunk/Scripts/shBrushCss.js" type="text/javascript"></script>
<script src="http://syntaxhighlighter.googlecode.com/svn/trunk/Scripts/shBrushDelphi.js" type="text/javascript"></script>
<script src="http://syntaxhighlighter.googlecode.com/svn/trunk/Scripts/shBrushJava.js" type="text/javascript"></script>
<script src="http://syntaxhighlighter.googlecode.com/svn/trunk/Scripts/shBrushJScript.js" type="text/javascript"></script>
<script src="http://syntaxhighlighter.googlecode.com/svn/trunk/Scripts/shBrushPhp.js" type="text/javascript"></script>
<script src="http://syntaxhighlighter.googlecode.com/svn/trunk/Scripts/shBrushPython.js" type="text/javascript"></script>
<script src="http://syntaxhighlighter.googlecode.com/svn/trunk/Scripts/shBrushRuby.js" type="text/javascript"></script>
<script src="http://syntaxhighlighter.googlecode.com/svn/trunk/Scripts/shBrushSql.js" type="text/javascript"></script>
<script src="http://syntaxhighlighter.googlecode.com/svn/trunk/Scripts/shBrushVb.js" type="text/javascript"></script>
<script src="http://syntaxhighlighter.googlecode.com/svn/trunk/Scripts/shBrushXml.js" type="text/javascript"></script>

4. paste kode dibawah ini sebelum tag </body>
<script language="javascript">
dp.SyntaxHighlighter.BloggerMode();
dp.SyntaxHighlighter.HighlightAll('code');
</script>

5. dan jika sudah benar maka template tersebut bisa disimpan.
6. sekarang penggunaan sintaks sudah bisa dilakukan dengan menambahkan tag <pre></pre> contoh :
<pre name="code">
..Your html-escaped code goes here...
</pre>

<pre name="code" class="php">
echo "I like PHP";
</pre>


ok selamat mencoba..
catatan : sumber