1. 程式人生 > >利用Spring-MVC訪問資料庫

利用Spring-MVC訪問資料庫

1、建立相關的專案。首先相關路徑,在pom.xml中新增具有Spring-mvc、mysql、dbcp的三個包。

2、首先建立Admin類與資料庫資訊對應。

2.1、資料庫:

2.2、 jdbc-properties(名稱不可改變)   user是資料庫名 

url=jdbc:mysql://localhost:3306/user?useUnicode=true&characterEncoding=utf-8
driverClass=com.mysql.jdbc.Driver
user=root
password=123456
maxActive=1
initSize=1

2.3、Admin類

package com.zhiyou100.dao;
import java.io.Serializable;
public class  Admin implements Serializable{
	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	private String adminId;
	private String password;
	private String telephone;
	private String adminCode;
	private String name;
	
	public Admin(String adminId, String password, String telephone, String adminCode, String name) {
		super();
		this.adminId = adminId;
		this.password = password;
		this.telephone = telephone;
		this.adminCode = adminCode;
		this.name = name;
	}
	public Admin(String password, String telephone, String adminCode, String name) {
		super();
		this.password = password;
		this.telephone = telephone;
		this.adminCode = adminCode;
		this.name = name;
	}
	public Admin() {
		super();
	}
	public String getAdminId() {
		return adminId;
	}
	public void setAdminId(String adminId) {
		this.adminId = adminId;
	}
	public String getPassword() {
		return password;
	}
	public void setPassword(String password) {
		this.password = password;
	}
	public String getTelephone() {
		return telephone;
	}
	public void setTelephone(String telephone) {
		this.telephone = telephone;
	}
	public String getAdminCode() {
		return adminCode;
	}
	public void setAdminCode(String adminCode) {
		this.adminCode = adminCode;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
 
}

3.建立AdminDao介面,為通過findByCode方法,實現與資料庫連線、查詢操作。

package com.zhiyou100.dao;

public interface AdminDao {
Admin findByCode(String adminCode);
}

4、建立AdminDaoImp類實現AdminDao介面的方法

package com.zhiyou100.dao;

import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;

import javax.annotation.Resource;

import org.apache.tomcat.dbcp.dbcp.BasicDataSource;
import org.springframework.stereotype.Repository;
import java.sql.PreparedStatement;

@Repository
public class AdminDaoImp implements AdminDao {
	//注入資料來源
	@Resource
	private BasicDataSource ds;
	public Admin findByCode(String adminCode) {
		if(adminCode==null) {
			return null;
		}
		Connection  conn=null;
		try {
			conn=ds.getConnection();
			String sql="select *from user where adminCode=?";
			PreparedStatement ps = conn.prepareStatement(sql);
			ps.setString(1, adminCode);
			ResultSet rSet=ps.executeQuery();
			if(rSet.next()) {
				Admin admin=new Admin();
				admin.setAdminCode(rSet.getString("adminCode"));
				admin.setAdminId(rSet.getString("adminId"));
				admin.setName(rSet.getString("name"));
				admin.setPassword(rSet.getString("password"));
				admin.setTelephone(rSet.getString("telephone"));
				return admin;
			}
			
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}finally {
			try {
				conn.close();
			} catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
		return null;
	}
}

5、建立LoginService,利用LoginService邏輯判斷是否登入成功

package com.zhiyou100.service;
import com.zhiyou100.dao.Admin;
//利用LoginService邏輯判斷是否登入成功
public interface LoginService {
   Admin checkAdmin(String adminCode,String password);
}

6、建立LoginServiceImpl的類實現LoginService,判斷是否登入成功

package com.zhiyou100.service;

import javax.annotation.Resource;
import org.omg.CORBA.PRIVATE_MEMBER;
import org.omg.CORBA.PUBLIC_MEMBER;
import org.springframework.stereotype.Service;
import com.zhiyou100.Exception.AdminCodeException;
import com.zhiyou100.Exception.PasswordException;
import com.zhiyou100.dao.Admin;
import com.zhiyou100.dao.AdminDao;

@Service
public class LoginServiceImpl implements LoginService {
	@Resource
	private AdminDao adminDao;

	public Admin checkAdmin(String adminCode, String password) 
			throws PasswordException, AdminCodeException {
		Admin admin = adminDao.findByCode(adminCode);
		if (admin == null) {
			throw new AdminCodeException("賬號出錯");
		} else if (!admin.getPassword().equals(password)) {
			throw new PasswordException("密碼出錯");
		} else {
			return admin;
		}
	}
}

7.在執行過程中會有異常的出現,所以處理異常

AdminCodeException異常

package com.zhiyou100.Exception;

/**
 * @author Administrator
 *
 */
public class AdminCodeException extends RuntimeException{
	public AdminCodeException(String message) {
		super(message);
	}
}

PasswordException異常

/**
 * 
 */
package com.zhiyou100.Exception;

/**
 * @author Administrator
 *
 */
public class PasswordException extends RuntimeException{
  public PasswordException(String message) {
	  super(message);
  }
}

8.建立LoginContrller類,約定方法可以返回一個ModelAndView物件,封裝了處理結果資料和檢視名稱資訊。

package com.zhiyou100.etity;

import javax.annotation.Resource;
import javax.servlet.http.HttpSession;

import org.apache.tomcat.dbcp.dbcp.BasicDataSource;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.RequestMapping;

import com.zhiyou100.Exception.AdminCodeException;
import com.zhiyou100.Exception.PasswordException;
import com.zhiyou100.dao.Admin;
import com.zhiyou100.service.LoginService;

@Controller
@RequestMapping("/login")
public class LoginContrller {
	@Resource
	private LoginService loginService;
	@RequestMapping("/toLogin.do")
	public String toLogin() {
		return "main/login";
	}
	@RequestMapping("/toIndex.do")
	public String toIndex() {
		return "main/index";
	}
	@RequestMapping("/checkLogin.do")
	public String checkLogin(HttpSession session,
			String adminCode,
			String password,
			ModelMap model) {
		try {
			Admin admin=loginService.checkAdmin(adminCode, password);
			  //登入成功後,把使用者資訊放進Session中
			session.setAttribute("admin",admin);
		} catch (AdminCodeException e) {
			// TODO: handle exception
		model.addAttribute("message",e.getMessage());
		model.addAttribute("adminCode", adminCode);
		model.addAttribute("password", password);
		return "main/login";
		}
		catch (PasswordException e) {
			// TODO: handle exception
		model.addAttribute("message",e.getMessage());
		model.addAttribute("adminCode", adminCode);
		model.addAttribute("password", password);
		return "main/login";
		}
		//登入成功後重定向到主介面
		return "redirect:toIndex.do";
//		BasicDataSource
	}
}

9.在WEB-INF 下建立對應的jsp.

在執行後,輸入相應的網址eg:login/toLogin.do ,login/toIndex.do,login/checkLogin會跳轉到相對的jsp.

剛開始寫部落格,有錯誤的地方,歡迎指出!

不喜勿噴!!!