面向接口编程环境配置

项目是一个在线聊天项目,项目未完工,这里仅是对项目中面向接口编程部分进行简单整理。

配置过程中,注解容易搞混,在最前面进行简单解释
1.@Resource() --> 用以注入对象
2.@Service() --> 在service包中实现接口的类使用,控制层注入对象时会搜索括号中内容,找到这个类,为其创造对象
3.@Reposity() --> 在 dao 包中实现接口的类使用,service对应的类注入对象时会搜索括号中内容
如果描述不够准确,请看下图方便理解

1.配置web.xml

    <!-- spring配置 -->
    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>classpath:spring.xml</param-value>
    </context-param>
    <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>

2.在resources文件夹下配置spring.xml;注意导包时候spring文件的问题

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd">

    <!-- 扫描 Repository包 -->
    <context:component-scan base-package="com.wanmait.WebChat.dao"></context:component-scan>
    <!-- 扫描@Service  service包 -->
    <context:component-scan base-package="com.wanmait.WebChat.service"></context:component-scan>
</beans>

3.在项目java(代码)包中新建service包

这个文件是综合包下的通用方法,同一个包继承这个接口

package com.wanmait.WebChat.service;

public interface CommonService<T> {
    public void insert(T t);
    public void update(T t);
    public void delete(T t);
    public void select(T t);

}

4.以UserService为例
在UserService接口中,规定其独有的方法,后续具体的类实现接口然后重写方法即可。

package com.wanmait.WebChat.service;

import com.wanmait.WebChat.vo.User;

public interface UserService extends CommonService<User> {//泛型变更为用户对象
    public User signIn(User user);
    public boolean checkname(String name,String sqlname,int userID);
    public int getID(String name);
    public User getUser(Integer userID);
    public void signUp(User registerUser);
}

5.现阶段还未使用Mybatis,所以在service包中,创建impl包。impl包中写对应接口的类
Tips:
1.类需要增加注解:@service("*****"),这个注解是由Controller中进行使用。用以搜索和创建对象。
2.通过@Resource()注解,spring自动创建接口下对应类的对象。

package com.wanmait.WebChat.service.impl;

import com.wanmait.WebChat.dao.UserDAO;
import com.wanmait.WebChat.service.UserService;
import com.wanmait.WebChat.vo.User;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;

@Service("userServices")
public class UserSerivceImpl implements UserService {

    @Resource()
    private UserDAO userDAO;

    @Override
    public User signIn(User user) {
        return userDAO.signIn(user);
    }

    @Override
    public boolean checkname(String name, String sqlname, int userID) {
        return userDAO.checkname(name, sqlname, userID);
    }

    @Override
    public int getID(String name) {
        return userDAO.getID(name);
    }

    @Override
    public User getUser(Integer userID) {
        return userDAO.getUser(userID);
    }

    @Override
    public void signUp(User registerUser) {
        userDAO.signUp(registerUser);
    }

    @Override
    public void insert(User user) {

    }

    @Override
    public void update(User user) {

    }

    @Override
    public void delete(User user) {

    }

    @Override
    public void select(User user) {

    }


}

6.在dao包中创建CommonDAO接口

package com.wanmait.WebChat.dao;

public interface CommonDAO <T>{
    public void insert(T t);
    public void update(T t);
    public void delete(T t);
    public void select(T t);
}

7.在同一个包中创建UserDAO接口

package com.wanmait.WebChat.dao;

import com.wanmait.WebChat.vo.User;

public interface UserDAO extends CommonDAO<User> {
    public User signIn(User user);
    public boolean checkname(String name,String sqlname,int userID);
    public int getID(String name);
    public User getUser(Integer userID);
    public void signUp(User registerUser);
}

8.dao包下创建impl包,用来防止实现接口的类

package com.wanmait.WebChat.dao.impl;

import com.wanmait.WebChat.dao.UserDAO;
import com.wanmait.WebChat.util.DBHelper;
import com.wanmait.WebChat.vo.User;
import org.springframework.stereotype.Repository;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

@Repository("userDAO")
public class UserDAOImpl implements UserDAO {


    @Override
    public void insert(User user) {

    }

    //在数据库更新用户个人信息
    @Override
    public void update(User user){
        PreparedStatement ps = null;
        Connection con       = DBHelper.getDBHelper().getCon();
        StringBuilder sql    = new StringBuilder();
        sql.append("update user set name=?,profile=?,nickname=?,phone=?,email=?,city=?");
        sql.append(" where id=?");
        Object [] params     = {
                user.getName(),
                user.getProfile(),
                user.getNickname(),
                user.getPhone(),
                user.getEmail(),
                user.getCity(),
                user.getId()
        };
        DBHelper.getDBHelper().executeUpdate(sql.toString(),params);
    }

    @Override
    public void delete(User user) {

    }

    @Override
    public void select(User user) {

    }

    //查询用户名、昵称是否重复
    public boolean checkname(String name,String sqlname,int userID){
        ResultSet rs         = null;
        PreparedStatement ps = null;
        Connection con       = DBHelper.getDBHelper().getCon();
        String sql           = "select * from user where " + sqlname + "="+"'"+name+"'";

        try {
            ps = con.prepareStatement(sql);
            rs = ps.executeQuery();
            //查重,理论上最多只能存在一条数据,即:用户本身,或者更被相同数据的用户
            if (rs.next()){
                int existID = rs.getInt("id");
                if (existID == userID){//如果查出来的数据为用户自己,不算做数据重复
                    return false;
                }else{
                    return true;
                }
            }
            return false;
        } catch (SQLException throwables) {
            throwables.printStackTrace();
        }
        return false;
    }


    //通过用户名获得用户的ID
    public int getID(String name){
        int userID = 0;
        ResultSet rs         = null;
        PreparedStatement ps = null;
        Connection con       = DBHelper.getDBHelper().getCon();
        String sql           = "select * from user where name ="+"'"+name+"'";
        try {
            ps = con.prepareStatement(sql);
            rs = ps.executeQuery();
            rs.next();

            userID = rs.getInt("id");
            return userID;
        } catch (SQLException throwables) {
            throwables.printStackTrace();
        }finally {
            DBHelper.getDBHelper().close(rs,ps,con);
        }
        return userID;
    }



    //通过用户id获取用户详细信息
    public User getUser(Integer userID){
        ResultSet rs         = null;
        User user            = new User();
        PreparedStatement ps = null;
        //链接并查询
        Connection con = DBHelper.getDBHelper().getCon();
        String sql     = "select * from user where id="+userID;
        try {
            ps = con.prepareStatement(sql);
            rs = ps.executeQuery();
            if (rs.next()){
                user.setEnable(rs.getBoolean("enable"));
            }
            if (user.isEnable()){
                //用户未被删除情况下继续获取数据
                user.setId      (rs.getInt("id"));
                user.setName    (rs.getString("name"));
                user.setProfile (rs.getString("profile"));
                user.setCity    (rs.getString("city"));
                user.setEmail   (rs.getString("email"));
                user.setPhone   (rs.getString("phone"));
                user.setNickname(rs.getString("nickname"));
            }else{
                user = null;
            }
        } catch (SQLException throwables) {
            throwables.printStackTrace();
        }finally {
            DBHelper.getDBHelper().close(rs,ps,con);
        }
        return user;

    }


    public User signIn(User user){
        ResultSet rs         = null;
        User userLogin       = new User();
        PreparedStatement ps = null;
        //链接并查询
        Connection con = DBHelper.getDBHelper().getCon();
        String sql = "select * from user where name=? and pass=? ";
        try {
            ps = con.prepareStatement(sql);
            ps.setString(1,user.getName());
            ps.setString(2,user.getPass());
            rs = ps.executeQuery();
            if (rs.next()){
                userLogin.setEnable(rs.getBoolean("enable"));
            }
            if (userLogin.isEnable()){
                //用户未被删除情况下继续获取数据
                userLogin.setId      (rs.getInt("id"));
                userLogin.setName    (rs.getString("name"));
                userLogin.setProfile (rs.getString("profile"));
                userLogin.setCity    (rs.getString("city"));
                userLogin.setEmail   (rs.getString("email"));
                userLogin.setPhone   (rs.getString("phone"));
                userLogin.setNickname(rs.getString("nickname"));
            }else{
                userLogin.setId(0);
            }
        } catch (SQLException throwables) {
            throwables.printStackTrace();
        }finally {
            DBHelper.getDBHelper().close(rs,ps,con);
        }
        return userLogin;
    }


    public void signUp(User registerUser){
        //写入数据库
        String sql = "insert into user(name,nickname,pass) value(?,?,?)";
        Object[] params = {
                registerUser.getName(),
                registerUser.getNickname(),
                registerUser.getPass()
        };
        DBHelper.getDBHelper().executeUpdate(sql,params);
    }


    //单一实例
    private void UserDAO(){}
    private static UserDAOImpl userDAO = new UserDAOImpl();
    public static UserDAOImpl getUserDAO(){
        return userDAO;
    }

}

9.至此,user的面向接口编程中,接口基本实现,当然,功能还不是十分完善,这里仅仅是对项目初期的配置和调整进行记录。下一步就是在UserController中通过

 //注入对象
    @Resource()
    private UserService userService;

创建对象之后,在函数调用时直接使用 userService.方法名就可以了

如果文中描述有不准确,或者错误的地方,还望大佬不吝赐教。感谢感谢~

posted @ 2021-03-09 22:56  花椒树  阅读(90)  评论(0)    收藏  举报