注册登录
--利用简单的编写注册登录系统来打通从前端到后台的数据传输路径。
一、建立数据库、基本表
基本环境:mysql5,7、Navicat for MySQL11.0.9企业版。
我们在本地MySQL服务器中新建名为work的数据库,然后建立名为user的表,详细如下图所示:

二、hibernate与dao
hibernate是比较成熟的重量级ORM框架,利用它可以大大简化我们对数据库的操作(基本的操作数据库方式就是增删改查)。
在大型项目中我们通常会有个base包来存放最基础的公共类,其中的dao层存放可复用性强的数据库操作,比如对单个实体的增删改查,批量保存,批量删除,分页查询等等。这样,其他功能包中的dao层可以从base包中的dao层进行继承,从而使我们在编程时可以花更多时间在业务逻辑上。
为了照顾编程的规范性,base/dao层中先编写接口,再编写实现类。
这里先给出IBaseDao.java和BaseDaoImpl.java两个文件的代码:
IBaseDao.java
- package com.whut.work.base.dao;
-
- import java.sql.SQLException;
- import java.util.Collection;
- import java.util.List;
-
- import org.hibernate.HibernateException;
-
- import com.whut.work.base.model.Page;
- import com.whut.work.base.vo.Parameter;
-
- public interface IBaseDao<T> {
-
-
- public void save(final T entity) throws Exception;
- public void delete(final T entity) throws Exception;
- <span style="white-space:pre"> </span>public void deleteWithHql(final String hql) throws Exception;
- public void update(final T entity) throws Exception;
- public T getOne(final int id) throws Exception;
-
- <span style="white-space:pre"> </span>
- <span style="white-space:pre"> </span>public int batchSave(final List<T> list) throws Exception;
- <span style="white-space:pre"> </span>public void deleteAll(final Collection entities) throws Exception;
-
-
- public T findOne(final String hql) throws Exception;
- public T findOne(final String hql, final Parameter parameter) throws Exception;
-
-
- public List<T> findList(final String hql) throws Exception;
- public List<T> findList(final String hql, final Parameter parameter) throws Exception;
-
-
- public Page<T> findPage(final int currentPage, final int pageSize, final String queryHql, final String countHql, final Object[] values)
- throws HibernateException,SQLException;
- public Page<T> findPage(final int currentPage, final int pageSize, final String queryHql, final String countHql)
- throws HibernateException,SQLException;
-
-
- public long findCount(final String hql);
- public long findCount(final String hql, final Object[] values);
- }
BaseDaoImpl.java
- package com.whut.work.base.dao.Impl;
-
- import java.sql.SQLException;
- import java.util.Collection;
- import java.util.List;
- import java.util.Set;
-
- import javax.annotation.Resource;
-
- import org.hibernate.HibernateException;
- import org.hibernate.Query;
- import org.hibernate.Session;
- import org.hibernate.SessionFactory;
-
- import com.whut.work.base.dao.IBaseDao;
- import com.whut.work.base.model.Page;
- import com.whut.work.base.vo.Parameter;
-
- public class BaseDaoImpl<T> implements IBaseDao<T> {
-
- private int BATCH_MAX_ROW = 5;
-
- private SessionFactory sessionFactory;
- private Class<T> entityClass;
-
-
- public BaseDaoImpl(){
- }
-
- public BaseDaoImpl(Class<T> entityClass){
- this.entityClass = entityClass;
- }
-
-
- @Override
- public void save(T entity) throws Exception {
- Session session = this.getSession();
- session.beginTransaction();
- session.save(entity);
- session.getTransaction().commit();
- }
-
- @Override
- public int batchSave(List<T> list) throws Exception {
- Session session = this.getSession();
- session.beginTransaction();
- for (int i = 0; i < list.size(); ++i) {
- session.save(list.get(i));
- if (i % BATCH_MAX_ROW == 0) {
- session.flush();
- session.clear();
- }
- }
- session.flush();
- session.clear();
- session.getTransaction().commit();
- return list.size();
- }
-
- @Override
- public void deleteAll(Collection entities) throws Exception {
- Session session = this.getSession();
- session.beginTransaction();
- for (Object entity : entities) {
- session.delete(entity);
- }
- session.getTransaction().commit();
- }
-
- @Override
- public void delete(T entity) throws Exception {
- Session session = this.getSession();
- session.beginTransaction();
- session.delete(entity);
- session.getTransaction().commit();
- }
-
- @Override
- public void deleteWithHql(String hql) throws Exception {
- Session session = this.getSession();
- session.beginTransaction();
- Query query = session.createQuery(hql);
- query.executeUpdate();
- session.getTransaction().commit();
- }
-
- @Override
- public void update(T entity) throws Exception {
- Session session = this.getSession();
- session.beginTransaction();
- session.update(entity);
- session.getTransaction().commit();
- }
-
- @SuppressWarnings("unchecked")
- @Override
- public T getOne(int id) throws Exception {
- Session session = this.getSession();
- session.beginTransaction();
- Object returnObject = session.get(entityClass, id);
- session.getTransaction().commit();
-
- return (T) returnObject;
- }
-
- @Override
- public T findOne(String hql) throws Exception {
- return findOne(hql,null);
- }
-
- @SuppressWarnings("unchecked")
- @Override
- public T findOne(final String hql, final Parameter parameter) throws Exception {
- Session session = this.getSession();
- session.beginTransaction();
- Query query = session.createQuery(hql);
- setParameter(query, parameter);
- Object returnObject = query.setMaxResults(1).uniqueResult();
- session.getTransaction().commit();
-
- return (T) returnObject;
- }
-
- @Override
- public List<T> findList(final String hql) throws Exception {
- return findList(hql, null);
- }
-
- @SuppressWarnings("unchecked")
- @Override
- public List<T> findList(final String hql, final Parameter parameter) throws Exception {
- Session session = this.getSession();
- session.beginTransaction();
- Query query = session.createQuery(hql);
- setParameter(query, parameter);
- List<T> returnList = query.list();
- session.getTransaction().commit();
-
- return returnList;
- }
-
-
- private void setParameter(Query query, Parameter parameter) {
- if (parameter != null) {
- Set<String> keySet = parameter.keySet();
- for (String string : keySet) {
- Object value = parameter.get(string);
- if (value instanceof Collection<?>) {
- query.setParameterList(string, (Collection<?>) value);
- } else if (value instanceof Object[]) {
- query.setParameterList(string, (Object[]) value);
- } else {
- query.setParameter(string, value);
- }
- }
- }
- }
-
- public SessionFactory getSessionFactory() {
- return sessionFactory;
- }
-
- @Resource(name="sessionFactory")
- public void setSessionFactory(SessionFactory sessionFactory) {
- this.sessionFactory = sessionFactory;
- }
-
-
- private Session getSession() {
- return sessionFactory.getCurrentSession();
- }
-
- @SuppressWarnings("unchecked")
- @Override
- public Page<T> findPage(int currentPage, int pageSize, String queryHql, String countHql, Object[] values)
- throws HibernateException, SQLException {
- Session session = this.getSession();
- session.beginTransaction();
- Query query = session.createQuery(queryHql);
- if (values != null) {
- for (int i = 0; i < values.length; i++) {
- query.setParameter(i, values[i]);
- }
- }
-
- if (pageSize > 0) {
- query.setFirstResult(pageSize * (currentPage - 1));
- query.setMaxResults(pageSize);
- }
- List<T> returnList = query.list();
- session.getTransaction().commit();
- long totalRecords = findCount(countHql, values);
-
- return new Page<T>(returnList, totalRecords, currentPage, pageSize);
- }
-
- @Override
- public Page<T> findPage(int currentPage, int pageSize, String queryHql, String countHql)
- throws HibernateException, SQLException {
- return findPage(currentPage, pageSize, queryHql, countHql, null);
- }
-
- @Override
- public long findCount(String hql) {
- return findCount(hql, null);
- }
-
- @Override
- public long findCount(String hql, Object[] values) {
- Session session = this.getSession();
- session.beginTransaction();
- Query query = session.createQuery(hql);
- if (values != null) {
- for (int i = 0; i < values.length; i++) {
- query.setParameter(i, values[i]);
- }
- }
- Long returnLong = (Long) query.setMaxResults(1).uniqueResult();
- session.getTransaction().commit();
-
- return returnLong;
- }
-
- }
通过以上代码我们可以发现,在分页查询以及设置hql参数的操作中还需要用到两个类:Page.java和Parameter.java。
Page.java
- package com.whut.work.base.model;
-
- import java.util.List;
-
- public class Page<T> {
-
- private int current = 1;
- private int total = 0;
- private long records = 0;
- private int size = 10;
- private String orderBy = "";
- private String order = "";
-
- public String getOrderBy() {
- return orderBy;
- }
-
- public void setOrderBy(String orderBy) {
- this.orderBy = orderBy;
- }
-
- public String getOrder() {
- return order;
- }
-
- public void setOrder(String order) {
- this.order = order;
- }
-
- private List<T> list = null;
-
- public Page() {
-
- }
-
- public Page(int currentPage, int pageSize){
- current=currentPage;
- size=pageSize;
- }
-
- public Page(List<T> list, int current, int size) {
- this.current = current;
- this.size = size;
- this.list = list;
- }
-
- public Page(List<T> list, long records, int current, int size, String orderBy, String order) {
- this.list = list;
- this.current = current;
- this.records = records;
- this.size = size;
- this.orderBy = orderBy;
- this.order = order;
- this.total = records == 0 ? 1 : (int) ((records - 1) / size + 1);
-
- if (this.current > this.total) {
- this.current = this.total;
- }
- if (current < 1) {
- this.current = 1;
- }
- }
-
- public Page(List<T> list, long records, int current, int size) {
- this(list, records, current, size, null, null);
- }
-
- public int getCurrent() {
- return current;
- }
-
- public void setCurrent(int current) {
- this.current = current;
- }
-
- public int getSize() {
- return size;
- }
-
- public void setSize(int size) {
- this.size = size;
- }
-
- public int getTotal() {
- return total;
- }
-
- public void setTotal(int l) {
- this.total = l;
- }
-
- public long getRecords() {
- return records;
- }
-
- public void setRecords(long records) {
- this.records = records;
- }
-
- public List<T> getList() {
- return list;
- }
-
- public void setList(List<T> list) {
- this.list = list;
- }
-
- @Override
- public String toString() {
- return "Page{" +
- "current=" + current +
- ", size=" + size +
- ", list=" + list +
- ‘}‘;
- }
- }
Parameter.java
- package com.whut.work.base.vo;
-
- import java.util.HashMap;
-
- public class Parameter extends HashMap<String, Object> {
-
- private static final long serialVersionUID = 1L;
-
-
- public Parameter(Object... values) {
- if (values != null) {
- for (int i = 0; i < values.length; i++) {
- put("p" + i, values[i]);
- }
- }
- }
-
-
- public Parameter(Object[][] parameters) {
- if (parameters != null) {
- for (Object[] os : parameters) {
- if (os.length == 2) {
- put((String) os[0], os[1]);
- }
- }
- }
- }
-
- }
至此,我们先给出项目结构图,关于那个util包,以后我们遇到相应问题时再来讨论它(暂时不用建立它)。

当然,关于各种的包的命名大家完全可以根据自己喜好来进行。
三、用户实体(user包)
之前我们已经建立了数据库中的user表,现在我们来编写用户model层代码,并用注解配置。
- package com.whut.work.user.model;
-
- import java.util.Date;
-
- import javax.persistence.Column;
- import javax.persistence.Entity;
- import javax.persistence.GeneratedValue;
- import javax.persistence.Id;
- import javax.persistence.Table;
-
- @Entity
- @Table(name="user")
- public class User {
-
- @Id
- @GeneratedValue
- private Integer id;
- private String username;
- private String password;
- <span style="white-space:pre"> </span>private String tel;
- <span style="white-space:pre"> </span>private String email;
- @Column(name="create_time")
- private Date createTime;
- @Column(name="is_delete")
- private Boolean isDelete;
-
- public Integer getId() {
- return id;
- }
- public void setId(Integer 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 Date getCreateTime() {
- return createTime;
- }
- public void setCreateTime(Date createTime) {
- this.createTime = createTime;
- }
- public Boolean getIsDelete() {
- return isDelete;
- }
- public void setIsDelete(Boolean isDelete) {
- this.isDelete = isDelete;
- }
-
- public String getTel() {
- return tel;
- }
-
- public void setTel(String tel) {
- this.tel = tel;
- }
-
- public String getEmail() {
- return email;
- }
-
- public void setEmail(String email) {
- this.email = email;
- }
- }
然后编写用户的dao层:
IUserDao.java
- package com.whut.work.user.dao;
-
- import com.whut.work.base.dao.IBaseDao;
- import com.whut.work.user.model.User;
-
- public interface IUserDao extends IBaseDao<User>{
-
- }
UserDaoImpl.java
- package com.whut.work.user.dao.impl;
-
- import org.springframework.stereotype.Component;
-
- import com.whut.work.base.dao.Impl.BaseDaoImpl;
- import com.whut.work.user.dao.IUserDao;
- import com.whut.work.user.model.User;
-
- @Component
- public class UserDaoImpl extends BaseDaoImpl<User> implements IUserDao {
-
- public UserDaoImpl(){
- super(User.class);
- }
-
- }
四、登录部分(login包)
我们暂时只需编写登录部分的controller层和service层。调用过程为:login下的controller接收到前台传送过来的用户登录信息,调用login下的service,接着通过user下的dao与数据库进行交互。login包中包含注册和登录功能。
ILoginService.java
- package com.whut.work.login.service;
-
- import java.util.Map;
-
- public interface ILoginService {
-
-
- public Map<String,Object> login(String username, String password) throws Exception;
-
-
- public Map<String,Object> register(String username, String password, String tel, String email) throws Exception;
-
- }
LoginServiceImpl.java
- package com.whut.work.login.service.impl;
-
- import java.util.Date;
- import java.util.HashMap;
- import java.util.List;
- import java.util.Map;
-
- import org.springframework.beans.factory.annotation.Autowired;
- import org.springframework.stereotype.Component;
-
- import com.whut.work.login.service.ILoginService;
- import com.whut.work.user.dao.IUserDao;
- import com.whut.work.user.model.User;
-
- @Component
- public class LoginServiceImpl implements ILoginService {
-
- @Autowired
- private IUserDao userDao;
-
- @Override
- public Map<String, Object> login(String username, String password) throws Exception {
- Map<String,Object> returnMap = new HashMap<String,Object>();
-
- String hql = "from User u where u.username=‘"+username+"‘";
- User user = new User();
- try {
- user = userDao.findOne(hql);
- } catch (Exception e) {
- e.printStackTrace();
- }
- if(user != null){
- if(user.getPassword().equals(password)){
- returnMap.put("value", user);
- returnMap.put("message", "登录成功");
- returnMap.put("success", true);
- }else{
- returnMap.put("message", "密码错误");
- returnMap.put("success", false);
- }
- }else{
- returnMap.put("message", "该用户不存在!");
- returnMap.put("success", false);
- }
- return returnMap;
- }
-
- @Override
- public Map<String, Object> register(String username, String password,String tel,String email) throws Exception {
- Map<String,Object> returnMap = new HashMap<String,Object>();
-
- String hql = "from User u where u.username=‘"+username+"‘";
- User user = new User();
- if(userDao.findOne(hql) != null){
- returnMap.put("message", "该用户名已存在...");
- returnMap.put("success", false);
- return returnMap;
- }else{
- user.setUsername(username);
- user.setPassword(password);
- user.setTel(tel);
- user.setEmail(email);
- user.setCreateTime(new Date());
- user.setIsDelete(false);
- userDao.save(user);
- returnMap.put("value", user);
- returnMap.put("message", "注册成功");
- returnMap.put("success", true);
- return returnMap;
- }
- }
-
- }
LoginCtrl.java
- package com.whut.work.login.controller;
-
- import java.util.HashMap;
- import java.util.Map;
-
- import javax.servlet.http.HttpServletRequest;
- import javax.servlet.http.HttpSession;
-
- import org.springframework.beans.factory.annotation.Autowired;
- import org.springframework.stereotype.Controller;
- import org.springframework.web.bind.annotation.RequestMapping;
- import org.springframework.web.bind.annotation.RequestMethod;
- import org.springframework.web.bind.annotation.ResponseBody;
-
- import com.whut.work.base.model.Page;
- import com.whut.work.login.service.ILoginService;
- import com.whut.work.user.model.User;
- import com.whut.work.user.service.IUserService;
-
- @Controller
- @RequestMapping("/login")
- public class LoginCtrl {
-
- @Autowired
- private ILoginService loginService;
-
- @RequestMapping(value="/login",method=RequestMethod.POST)
- @ResponseBody
- public Map<String,Object> login(HttpServletRequest request,String username,String password){
- Map<String,Object> returnMap = new HashMap<String,Object>();
-
- try {
- Map<String,Object> map = loginService.login(username, password);
-
- Object object = map.get("value");
- if(object != null){
- User user = (User) object;
- HttpSession session = request.getSession();
- session.setAttribute("userId", user.getId());
- }
- returnMap.put("value", object);
- returnMap.put("message", map.get("message"));
- returnMap.put("success", map.get("success"));
- } catch (Exception e) {
- returnMap.put("message", "异常:登录失败!");
- returnMap.put("success", false);
- e.printStackTrace();
- }
- return returnMap;
- }
-
- @RequestMapping(value="/register",method=RequestMethod.POST)
- @ResponseBody
- public Map<String,Object> register(HttpServletRequest request,String username,String password,String tel,String email){
- Map<String,Object> returnMap = new HashMap<String,Object>();
-
- try {
- Map<String,Object> map = loginService.register(username, password,tel,email);
-
- Object object = map.get("value");
- if(object != null){
- User user = (User) object;
- HttpSession session = request.getSession();
- session.setAttribute("userId", user.getId());
- }
- returnMap.put("value", object);
- returnMap.put("message", map.get("message"));
- returnMap.put("success", map.get("success"));
- } catch (Exception e) {
- returnMap.put("message", "异常:注册失败!");
- returnMap.put("success", false);
- e.printStackTrace();
- }
- return returnMap;
- }
-
- }
至此,项目的结构如下图所示:

关于user包下的controller、service以及vo我们以后会遇到的,这里先忽略。
五、前端页面
前端页面效果部分我就不多讲了,代码也只贴部分重点的。前端css框架为bootstrap,js框架为angularjs。
login.js
- angular.module("mainapp",[])
- .controller("maincontroller",function($scope){
- $scope.inputUsername = "";
- $scope.inputPassword = "";
-
- $scope.login = function(){
- if(checkFirst() != false){
- login_ajax($scope.inputUsername,$scope.inputPassword);
- }else{
- alert("请将信息填写完整...");
- };
- };
- function checkFirst(){
- if($scope.inputUsername!=null && $scope.inputUsername!=""
- && $scope.inputPassword!=null && $scope.inputPassword!=""){
- return true;
- }else{
- return false;
- }
- };
- function login_ajax(username,password){
- this.username = username;
- this.password = hex_md5(password);
- $.ajax({
- type:"POST",
- url:"/login/login",
- data:{"username":this.username,"password":this.password},
- contentType:"application/x-www-form-urlencoded",
- dataType:"json",
- success:function(data){
- console.log(data);
- $scope.$apply(function(){
- if(data.success == true && data.message == "登录成功"){
- $scope.inputUsername = "";$scope.inputPassword = "";
-
- window.location.href = "../jsp/infojsp/info.jsp?userName="+data.value.username+
- "&userId="+data.value.id;
- }else if(data.success == false && data.message == "密码错误"){
- $scope.inputUsername = "";$scope.inputPassword = "";
- alert("密码错误!");
- }else if(data.success == false && data.message == "该用户不存在!"){
- $scope.inputUsername = "";$scope.inputPassword = "";
- alert("该用户不存在!");
- }
- });
- }
- });
- };
- })
signup.js
- angular.module("mainapp",[])
- .controller("maincontroller",function($scope){
- $scope.inputUsername = "";
- $scope.inputPassword = "";
- $scope.inputEmail = "";
- $scope.inputTel = "";
- function checkFirst(){
- if($scope.inputUsername!=null && $scope.inputUsername!=""
- && $scope.inputPassword!=null && $scope.inputPassword!=""
- && $scope.inputEmail!=null && $scope.inputEmail!=""
- && $scope.inputTel!=null && $scope.inputTel!=""){
- return true;
- }else{
- return false;
- }
- };
-
- $scope.register = function(){
- if(checkFirst() != false){
- $scope.inputPassword = hex_md5($scope.inputPassword);
- $.ajax({
- type:"POST",
- url:"/login/register",
- data:{"username":$scope.inputUsername,"password":$scope.inputPassword,"tel":$scope.inputTel,"email":$scope.inputEmail},
- contentType:"application/x-www-form-urlencoded",
- dataType:"json",
- success:function(data){
- console.log(data);
- $scope.$apply(function(){
- if(data.success == true && data.message == "注册成功"){
- $scope.inputUsername = "";$scope.inputPassword = "";
- $scope.inputEmail = "";$scope.inputTel = "";
- alert("注册成功!");
- window.location.href = "login.html";
- }else if(data.success == false && data.message == "该用户名已存在..."){
- $scope.inputUsername = "";$scope.inputPassword = "";
- $scope.inputEmail = "";$scope.inputTel = "";
- alert("该用户名已被注册...");
- }
- });
- }
- });
- }else{
- alert("请将信息填写完整...");
- };
- };
- })
login.html
signup.html
到这里,本文已经很长了,项目的演示就放在下一篇博客中啦。
IntelliJ IDEA14.0.3+Maven+SpringMVC+Spring+Hibernate光速构建Java权限管理系统(三)
原文:http://www.cnblogs.com/wanghuaijun/p/6508879.html