【Java框架型項目從入門到裝逼】第十二節 項目分層


這一節我們開始對項目進行分層,一般來說,一個web項目的層次結構如下圖所示:

controller層為我們的控制層,用來接收用戶的請求,比如新增一個學生的信息,新增的請求最先就是走到這一層。controller層只管接收用戶的請求,不會涉及太多的業務處理操作。但凡涉及到業務處理,就交給service層來操作。所以,controller層中必然擁有某一個service層的引用。

service層主要用來處理一些業務邏輯,不做任何的數據庫操作。數據庫的操作都交給dao層來做,因此,在service層中必然擁有一個dao層的引用。

一般來說,service層和dao層中,都是直接存放的接口類,然后專門有一個包放所有接口的具體實現類,impl就是指每個接口對應的實現類。

說了這么多概念,還是讓我們一步一步來實際操作吧。首先,新建兩個包,service包和dao包。

然后,在每個包里面再新建一個impl包,用來放所有的實現類。

接下來,我們在service包里面新建一個UserService接口類,注意,是接口哦:

有了接口以后,就得有對應的實現類,接着就在impl包下面建一個該接口的實現類,注意,是java類哦:

代碼:

public class UserServiceImpl implements UserService{

}

同理,建立 UserDao 接口和 UserDaoImpl 類。

建好之后,考慮到我們的UserController中,從前台拿到了username,password,name和sex的值,思考一下如何才能把這些東西傳到dao層呢?

我們可以在controller層中加入一個service層的引用:

@Controller
public class UserController {
	
	//用戶業務類的引用
	private UserService userService = new UserServiceImpl();
	
	@RequestMapping("/addUser")
	public void addUser(HttpServletRequest request , HttpServletResponse response){
		String username = request.getParameter("username");
		String password = request.getParameter("password");
		String name = request.getParameter("name");
		String sex = request.getParameter("sex");
		
		System.out.println(username);
		System.out.println(password);
		System.out.println(name);
		System.out.println(sex);
		
	}    
}

然后,我們需要在addUser方法里面調用service層的方法,為了避免產生過多的參數,我們先創建一個bean包,專門用來存放實體類。然后,新建一個student實體類:

package com.app.bean;

public class Student {
	
	private int id;
	private String username;
	private String password;
	private String name;
	private String sex;
	
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	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 String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getSex() {
		return sex;
	}
	public void setSex(String sex) {
		this.sex = sex;
	}
	@Override
	public String toString() {
		return "Student [id=" + id + ", username=" + username + ", password=" + password + ", name=" + name + ", sex="
				+ sex + "]";
	}
	
	
	
} 

Spring框架支持數據動態綁定,所以我們直接這樣寫:

@Controller
public class UserController {
	
	//用戶業務類的引用
	private UserService userService = new UserServiceImpl();
	
	@RequestMapping("/addUser")
	public void addUser(HttpServletRequest request , HttpServletResponse response,Student student){
		
		
		System.out.println(student);
		
	}    
}

可見,我們使用Spring來做數據綁定是非常easy的。

然后,調用service層的方法,把這個學生數據傳遞到service中去。

UserController:

@Controller
public class UserController {
	
	//用戶業務類的引用
	private UserService userService = new UserServiceImpl();
	
	@RequestMapping("/addUser")
	public void addUser(HttpServletRequest request , HttpServletResponse response,Student student){
		

		userService.addUser(student);
		

	}    
}

UserService:

public interface UserService {

	void addUser(Student student);

}

UserServiceImpl:

public class UserServiceImpl implements UserService{

	@Override
	public void addUser(Student student) {
		
		
	}

}

同理,在service層中又需要加入一個dao層的引用,最終希望把student對象傳遞到dao層:

UserServiceImpl :

public class UserServiceImpl implements UserService{
	
	private UserDao userDao = new UserDaoImpl();

	@Override
	public void addUser(Student student) {
		
		userDao.addUser(student);
		
	}

}

UserDao :

public interface UserDao {

	void addUser(Student student);

}

UserDaoImpl :

public class UserDaoImpl implements UserDao {

	@Override
	public void addUser(Student student) {
		
	}

}

圖解:

以上就是整個的分層結構,然后,我們繼續學生新增的業務流程,改寫一下dao層的方法:

package com.app.dao.impl;

import java.util.HashMap;
import java.util.Map;

import com.app.bean.Student;
import com.app.dao.UserDao;
import com.simple.dao.SimpleDao;

public class UserDaoImpl implements UserDao {

	@Override
	public void addUser(Student student) {
		
		SimpleDao dao = new SimpleDao();
		
		Map map = new HashMap();
		
		map.put("id", null);
		map.put("username", student.getUsername());
		map.put("password", student.getPassword());
		map.put("name", student.getName());
		map.put("sex", student.getSex());
		
		dao.save("db_student", "t_student", map);
		
	}

}

因為只是一個簡單的保存操作,我們直接調用simpleDao的save即可。測試過后,是完全沒問題的。

我要下載源碼


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM