1. 程式人生 > >SSM整合(三):編寫Service類和Dao

SSM整合(三):編寫Service類和Dao

配置檔案寫完,應該填充專案的內容了。

這裡的話,是準備做一個比較簡單的登入程式把SSM給整合了。

step3:


我們先理一下思路。

1.建立person類來代表一個使用者(已做)

2.建立一個LoginService介面

3.實現一個LoginService介面

4.建立一個PersonDao

*5.編寫PersonDao對應的Mapper

這些步驟裡面,mapper將留在下一個步驟說。

其中PersonDao也是為mybatis做準備,這是持久層的Dao。

接著來寫下檔案

建立一個LoginService介面

package com.ssmlogin.service;

import com.ssmlogin.bean.Person;

/*
 * 2018年5月9日14:36:51
 * 登入類,主要實現登入功能
 */
public interface LoginService {
	boolean Login(Person p);
	boolean Register(Person p) throws Exception;
}

實現一個LoginService介面

package com.ssmlogin.service;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Isolation;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;

import com.ssmlogin.bean.Person;
import com.ssmlogin.dao.PersonDao;
import com.ssmlogin.exception.Abrupt;

@Service("MyService")
public class LoginServiceImp implements LoginService {
	@Autowired
	private PersonDao pdao;
	
	public void setPdao(PersonDao pdao) {
		this.pdao = pdao;
	}

	@Transactional
	public boolean Login(Person p) {
		// TODO 自動生成的方法存根
		Person pn = pdao.selectPersonByNAP(p.getUesrname(), p.getPassword());
		System.out.println(pn);
		if(pn != null)
			return true;
		else
			return false;
	}

	@Transactional(isolation=Isolation.DEFAULT, propagation=Propagation.REQUIRED, rollbackFor=Exception.class)
	public boolean Register(Person p) throws Exception {
		// TODO 自動生成的方法存根
		// 測試事務
		pdao.insertPerson(p);
		// 丟擲異常,這裡應該不會執行的
		if(1==1)
			throw new Abrupt("意外中斷");
		return false;
	}

}

這裡就很有趣了,因為@Service("MyService")這個我之前沒用過,不過這個應該是在spring容器裡註冊的意思。

除此之外@Autowired我也沒用過。。。

@Transactional(isolation=Isolation.DEFAULT, propagation=Propagation.REQUIRED, rollbackFor=Exception.class)

這一排是事務的,一開始可以不用寫,準確的說是下面這個註冊方法就是測試事務的,對登入功能無影響。

這裡引用別的博主的:

在介面前面標上@Autowired和@Qualifier註釋使得介面可以被容器注入,當介面存在兩個實現類的時候必須指定其中一個來注入,使用實現類首字母小寫的字串來注入。

@Service服務層元件,用於標註業務層元件,表示定義一個bean,自動根據bean的類名例項化一個首寫字母為小寫的bean,例如Chinese例項化為chinese,如果需要自己改名字則:@Service("你自己改的bean名")。

建立一個PersonDao

package com.ssmlogin.dao;

import java.util.List;

import org.apache.ibatis.annotations.Param;
import org.springframework.jdbc.core.support.JdbcDaoSupport;

import com.ssmlogin.bean.Person;

// person類的dao
public interface PersonDao{
	// 查詢所有使用者
	List<Person> selectPerson();
	// 增加使用者
	void insertPerson(Person p);
	// 刪除使用者
	void deletePersonById(@Param("id") int id);
	// 查詢指定使用者
	Person selectPersonByNAP(@Param("username") String username, @Param("password") String password);
}

這裡其實只用到了第二個和第四個,其他的是練一練寫檔案,也沒有測試

到這裡,這個專案如果不是web專案,寫個test檔案就可以跑起來了,ApplicationContext獲取容器,新建service,然後就可以測試方法了。

如果我的內容在哪裡有問題,歡迎私信指正。