Java tutorial
/* * Copyright (c) 2015 MONKEYK Information Technology Co. Ltd * www.monkeyk.com * All rights reserved. * * This software is the confidential and proprietary information of * MONKEYK Information Technology Co. Ltd ("Confidential Information"). * You shall not disclose such Confidential Information and shall use * it only in accordance with the terms of the license agreement you * entered into with MONKEYK Information Technology Co. Ltd. */ package com.monkeyk.sos.infrastructure.jdbc; import com.monkeyk.sos.domain.user.Privilege; import com.monkeyk.sos.domain.user.User; import com.monkeyk.sos.domain.user.UserRepository; import org.apache.commons.lang.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.stereotype.Repository; import java.sql.Timestamp; import java.util.ArrayList; import java.util.Collection; import java.util.List; import java.util.stream.Collectors; /** * 2015/11/16 * * @author Shengzhao Li */ @Repository("userRepositoryJdbc") public class UserRepositoryJdbc implements UserRepository { private static UserRowMapper userRowMapper = new UserRowMapper(); @Autowired private JdbcTemplate jdbcTemplate; @Override public User findByGuid(String guid) { final String sql = " select * from user_ where guid = ? "; final List<User> list = this.jdbcTemplate.query(sql, new Object[] { guid }, userRowMapper); User user = null; if (!list.isEmpty()) { user = list.get(0); user.privileges().addAll(findPrivileges(user.id())); } return user; } private Collection<Privilege> findPrivileges(int userId) { final String sql = " select privilege from user_privilege where user_id = ? "; final List<String> strings = this.jdbcTemplate.queryForList(sql, new Object[] { userId }, String.class); List<Privilege> privileges = new ArrayList<>(strings.size()); privileges.addAll(strings.stream().map(Privilege::valueOf).collect(Collectors.toList())); return privileges; } @Override public void saveUser(final User user) { final String sql = " insert into user_(guid,archived,create_time,email,password,username,phone) " + " values (?,?,?,?,?,?,?) "; this.jdbcTemplate.update(sql, ps -> { ps.setString(1, user.guid()); ps.setBoolean(2, user.archived()); ps.setTimestamp(3, Timestamp.valueOf(user.createTime())); ps.setString(4, user.email()); ps.setString(5, user.password()); ps.setString(6, user.username()); ps.setString(7, user.phone()); }); //get user id final Integer id = this.jdbcTemplate.queryForObject("select id from user_ where guid = ?", new Object[] { user.guid() }, Integer.class); //insert privileges for (final Privilege privilege : user.privileges()) { this.jdbcTemplate.update("insert into user_privilege(user_id, privilege) values (?,?)", ps -> { ps.setInt(1, id); ps.setString(2, privilege.name()); }); } } @Override public void updateUser(final User user) { final String sql = " update user_ set username = ?, password = ?, phone = ?,email = ? where guid = ? "; this.jdbcTemplate.update(sql, ps -> { ps.setString(1, user.username()); ps.setString(2, user.password()); ps.setString(3, user.phone()); ps.setString(4, user.email()); ps.setString(5, user.guid()); }); } @Override public User findByUsername(String username) { final String sql = " select * from user_ where username = ? and archived = 0 "; final List<User> list = this.jdbcTemplate.query(sql, new Object[] { username }, userRowMapper); User user = null; if (!list.isEmpty()) { user = list.get(0); user.privileges().addAll(findPrivileges(user.id())); } return user; } @Override public List<User> findUsersByUsername(String username) { String sql = " select * from user_ where archived = 0 "; Object[] params = new Object[] {}; if (StringUtils.isNotEmpty(username)) { sql += " and username like ?"; params = new Object[] { "%" + username + "%" }; } sql += " order by create_time desc "; final List<User> list = this.jdbcTemplate.query(sql, params, userRowMapper); for (User user : list) { user.privileges().addAll(findPrivileges(user.id())); } return list; } }