// Path: src/main/java/org/aming/web/qq/domain/Relationship.java
// public class Relationship implements Serializable {
//     private int id;
//     private String userId1;
//     private String userId2;
// 
//     public int getId() {
//         return id;
//     }
// 
//     public Relationship setId(int id) {
//         this.id = id;
//         return this;
//     }
// 
//     public String getUserId1() {
//         return userId1;
//     }
// 
//     public Relationship setUserId1(String userId1) {
//         this.userId1 = userId1;
//         return this;
//     }
// 
//     public String getUserId2() {
//         return userId2;
//     }
// 
//     public Relationship setUserId2(String userId2) {
//         this.userId2 = userId2;
//         return this;
//     }
// 
//     public Relationship(){
//         super();
//     }
// 
//     public Relationship(String userId1,String userId2){
//         super();
//         this.userId1 = userId1;
//         this.userId2 = userId2;
//     }
// 
//     public Relationship(int id,String userId1,String userId2){
//         super();
//         this.id = id;
//         this.userId1 = userId1;
//         this.userId2 = userId2;
//     }
// 
//     @Override
//     public String toString(){
//         return ToStringBuilder.reflectionToString(this);
//     }
// 
//     public Relationship reverse(){
//         return new Relationship(this.userId2,this.userId1);
//     }
// 
// 
// }
// 
// Path: src/main/java/org/aming/web/qq/domain/User.java
// public class User extends AbstractUserDetails implements UserDetails {
// 
//     private static final long serialVersionUID = -5509256807259591938L;
// 
//     private String id;
//     private String username;
//     private String password;
//     private String email;
// 
//     public String getId() {
//         return id;
//     }
// 
//     public User setId(String id) {
//         this.id = id;
//         return this;
//     }
// 
//     @Override
//     public String getUsername() {
//         return username;
//     }
// 
//     public User setUsername(String username) {
//         this.username = username;
//         return this;
//     }
// 
//     @Override
//     public String getPassword() {
//         return password;
//     }
// 
//     public User setPassword(String password) {
//         this.password = password;
//         return this;
//     }
// 
//     public String getEmail() {
//         return email;
//     }
// 
//     public User setEmail(String email) {
//         this.email = email;
//         return this;
//     }
// 
//     public User(String id, String username, String password, String email) {
//         super();
//         this.id = id;
//         this.username = username;
//         this.password = password;
//         this.email = email;
//     }
// 
//     public User(String username, String password) {
//         super();
//         this.id = IdGen.uuid();
//         this.username = username;
//         this.password = password;
//     }
// 
//     public User(UserDetails userDetails){
//         this(userDetails.getUsername(),userDetails.getPassword());
//     }
// 
//     public User() {
//         super();
//         this.id = IdGen.uuid();
//     }
// 
//     @Override
//     public String toString() {
//         return ToStringBuilder.reflectionToString(this);
//     }
// 
//     @Override
//     public int hashCode() {
//         return this.username.hashCode();
//     }
// 
//     @Override
//     public boolean equals(Object obj) {
//         if(obj == null){
//             return false;
//         }
//         if(obj == this){
//             return true;
//         }
//         if(obj instanceof User){
//             if(obj instanceof UserDetails){
//                 UserDetails userDetails = (UserDetails)obj;
//                 if(this.getUsername().equals(userDetails.getUsername())){
//                     return true;
//                 }
//             }else{
//                 User user = (User)obj;
//                 if(this.getUsername().equals(user.getUsername())){
//                     return true;
//                 }
//             }
//         }
//         return false;
//     }
// }
// 
// Path: src/main/java/org/aming/web/qq/exceptions/WebQQDaoException.java
// public class WebQQDaoException  extends RuntimeException {
// 
//     private static final long serialVersionUID = -6938498189136673933L;
// 
//     private String errorSql;
//     private Throwable cause;
// 
//     public String getMessage() {
//         return "fail to execute sql : " + this.errorSql;
//     }
// 
//     @Override
//     public Throwable getCause() {
//         return cause;
//     }
// 
//     public WebQQDaoException(String errorSql) {
//         super();
//         this.errorSql = errorSql;
//     }
// 
//     public WebQQDaoException(String errorSql, Throwable cause) {
//         super();
//         this.errorSql = errorSql;
//         this.cause = cause;
//     }
// }


import org.aming.web.qq.domain.Relationship;
import org.aming.web.qq.domain.User;
import org.aming.web.qq.exceptions.WebQQDaoException;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.security.core.userdetails.UsernameNotFoundException;
import java.util.List;
package org.aming.web.qq.repository.jdbc;



/**
 * @author daming
 * @version 2017/10/1.
 */
public interface UserDao {

    User loadUserByUsername(String username) throws WebQQDaoException;

    List<User> getFriendsByUsername(String username) throws WebQQDaoException;

    List<User> findMoreUser(String condition) throws WebQQDaoException;

    int saveRelationship(Relationship relationship) throws WebQQDaoException;

    int exsitRelationship(Relationship relationship) throws WebQQDaoException;

// Path: src/main/java/org/aming/web/qq/domain/Relationship.java
// public class Relationship implements Serializable {
//     private int id;
//     private String userId1;
//     private String userId2;
// 
//     public int getId() {
//         return id;
//     }
// 
//     public Relationship setId(int id) {
//         this.id = id;
//         return this;
//     }
// 
//     public String getUserId1() {
//         return userId1;
//     }
// 
//     public Relationship setUserId1(String userId1) {
//         this.userId1 = userId1;
//         return this;
//     }
// 
//     public String getUserId2() {
//         return userId2;
//     }
// 
//     public Relationship setUserId2(String userId2) {
//         this.userId2 = userId2;
//         return this;
//     }
// 
//     public Relationship(){
//         super();
//     }
// 
//     public Relationship(String userId1,String userId2){
//         super();
//         this.userId1 = userId1;
//         this.userId2 = userId2;
//     }
// 
//     public Relationship(int id,String userId1,String userId2){
//         super();
//         this.id = id;
//         this.userId1 = userId1;
//         this.userId2 = userId2;
//     }
// 
//     @Override
//     public String toString(){
//         return ToStringBuilder.reflectionToString(this);
//     }
// 
//     public Relationship reverse(){
//         return new Relationship(this.userId2,this.userId1);
//     }
// 
// 
// }
// 
// Path: src/main/java/org/aming/web/qq/domain/User.java
// public class User extends AbstractUserDetails implements UserDetails {
// 
//     private static final long serialVersionUID = -5509256807259591938L;
// 
//     private String id;
//     private String username;
//     private String password;
//     private String email;
// 
//     public String getId() {
//         return id;
//     }
// 
//     public User setId(String id) {
//         this.id = id;
//         return this;
//     }
// 
//     @Override
//     public String getUsername() {
//         return username;
//     }
// 
//     public User setUsername(String username) {
//         this.username = username;
//         return this;
//     }
// 
//     @Override
//     public String getPassword() {
//         return password;
//     }
// 
//     public User setPassword(String password) {
//         this.password = password;
//         return this;
//     }
// 
//     public String getEmail() {
//         return email;
//     }
// 
//     public User setEmail(String email) {
//         this.email = email;
//         return this;
//     }
// 
//     public User(String id, String username, String password, String email) {
//         super();
//         this.id = id;
//         this.username = username;
//         this.password = password;
//         this.email = email;
//     }
// 
//     public User(String username, String password) {
//         super();
//         this.id = IdGen.uuid();
//         this.username = username;
//         this.password = password;
//     }
// 
//     public User(UserDetails userDetails){
//         this(userDetails.getUsername(),userDetails.getPassword());
//     }
// 
//     public User() {
//         super();
//         this.id = IdGen.uuid();
//     }
// 
//     @Override
//     public String toString() {
//         return ToStringBuilder.reflectionToString(this);
//     }
// 
//     @Override
//     public int hashCode() {
//         return this.username.hashCode();
//     }
// 
//     @Override
//     public boolean equals(Object obj) {
//         if(obj == null){
//             return false;
//         }
//         if(obj == this){
//             return true;
//         }
//         if(obj instanceof User){
//             if(obj instanceof UserDetails){
//                 UserDetails userDetails = (UserDetails)obj;
//                 if(this.getUsername().equals(userDetails.getUsername())){
//                     return true;
//                 }
//             }else{
//                 User user = (User)obj;
//                 if(this.getUsername().equals(user.getUsername())){
//                     return true;
//                 }
//             }
//         }
//         return false;
//     }
// }
// 
// Path: src/main/java/org/aming/web/qq/exceptions/WebQQDaoException.java
// public class WebQQDaoException  extends RuntimeException {
// 
//     private static final long serialVersionUID = -6938498189136673933L;
// 
//     private String errorSql;
//     private Throwable cause;
// 
//     public String getMessage() {
//         return "fail to execute sql : " + this.errorSql;
//     }
// 
//     @Override
//     public Throwable getCause() {
//         return cause;
//     }
// 
//     public WebQQDaoException(String errorSql) {
//         super();
//         this.errorSql = errorSql;
//     }
// 
//     public WebQQDaoException(String errorSql, Throwable cause) {
//         super();
//         this.errorSql = errorSql;
//         this.cause = cause;
//     }
// }


// Path: src/main/java/org/aming/web/qq/repository/jdbc/UserDao.java
import org.aming.web.qq.domain.Relationship;
import org.aming.web.qq.domain.User;
import org.aming.web.qq.exceptions.WebQQDaoException;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.security.core.userdetails.UsernameNotFoundException;
import java.util.List;

package org.aming.web.qq.repository.jdbc;



/**
 * @author daming
 * @version 2017/10/1.
 */
public interface UserDao {

    User loadUserByUsername(String username) throws WebQQDaoException;

    List<User> getFriendsByUsername(String username) throws WebQQDaoException;

    List<User> findMoreUser(String condition) throws WebQQDaoException;

    int saveRelationship(Relationship relationship) throws WebQQDaoException;

    int exsitRelationship(Relationship relationship) throws WebQQDaoException;

    int addUser(User user) throws WebQQDaoException;