面向接口编程环境配置
项目是一个在线聊天项目,项目未完工,这里仅是对项目中面向接口编程部分进行简单整理。
配置过程中,注解容易搞混,在最前面进行简单解释
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.方法名就可以了
如果文中描述有不准确,或者错误的地方,还望大佬不吝赐教。感谢感谢~


浙公网安备 33010602011771号