关于用户的增删改查以及登陆的操作这件事:
上一篇:构建Maven项目的创建
这一篇主要写关于用户的在增删改查以及登陆的操作。
一:构建好实体类:
package com.zhongruan.bean;
public class UserInfo {
private int id;
private String username;
private String password;
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;
}
@Override
public String toString() {
return "UserInfo{" +
"id=" + id +
", username='" + username + '\'' +
", password='" + password + '\'' +
'}';
}
}
实体类中定义了id,用户名以及登录密码
二:编写Dao层:
根据需求,我们需要写登录,增加用户,删除用户,修改用户,查询用户的操作,所以先在Dao层中写下这些方法:
IUserInfoDao层:
package com.zhongruan.dao;
import com.zhongruan.bean.UserInfo;
import java.util.List;
public interface IUserInfoDao {
// 登陆
UserInfo doLogin(String username);
// 全部查询
List<UserInfo> findAll();
// 增加操作
void addUser(UserInfo userInfo);
// 删除, 根据主键ID
void delUserById(int id);
// 修改前的查询
UserInfo updSelUserInfoById(int id);
// 修改
void updUserInfo(UserInfo userInfo);
}
因为要修改用户,必须先查询到该用户,才能进行修改操作,所以还应该写一个司改前的查询操作。
二:编写Service层:
在这一层中需要创建2个文件,一个是service接口类,一个是对应的实现类,根据dao层中的方法,将这些方法写入service接口处。
IUserInfoService接口类:
package com.zhongruan.service;
import com.zhongruan.bean.UserInfo;
import java.util.List;
public interface IUserInfoService {
UserInfo doLogin(String username);
List<UserInfo> findAll();
void addUser(UserInfo userInfo);
void delUserById(int id);
UserInfo updSelUserInfoById(int id);
void updUserInfo(UserInfo userInfo);
}
根据接口类写出相应的实现类:
UserInfoServiceImpl实现类:
package com.zhongruan.service.impl;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.zhongruan.bean.UserInfo;
import com.zhongruan.dao.IUserInfoDao;
import com.zhongruan.service.IUserInfoService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
@Service
public class UserInfoServiceImpl implements IUserInfoService {
@Autowired
private IUserInfoDao userInfoDao;
@Override
public UserInfo doLogin(String username) {
return userInfoDao.doLogin(username);
}
// 查询
@Override
public List<UserInfo> findAll() {
return userInfoDao.findAll();
}
@Override
public void addUser(UserInfo userInfo) {
userInfoDao.addUser(userInfo);
}
@Override
public void delUserById(int id) {
userInfoDao.delUserById(id);
}
@Override
public UserInfo updSelUserInfoById(int id) {
return userInfoDao.updSelUserInfoById(id);
}
@Override
public void updUserInfo(UserInfo userInfo) {
userInfoDao.updUserInfo(userInfo);
}
}
编写完Service层,接下来去实现这些方法。
三:编写Controller层:
在Controller层中编写具体实现方法的操作,根据Service层中的方法来写具体实现方法的操作。
1、登陆操作:
@RequestMapping("doLogin.do")
public String doLogin(String username, String password, HttpSession session){
UserInfo userInfo = userInfoService.doLogin(username);
if (userInfo !=null ){
if(userInfo.getPassword().equals(password)){
System.out.println("登陆成功!");
session.setAttribute("userInfo",userInfo);
return "main";
}else {
System.out.println("密码错误,登陆失败!");
session.setAttribute("message","密码错误,请重新登陆!");
return "../login";
}
}else {
System.out.println("用户不存在,请检查重新登陆!");
session.setAttribute("message","用户不存在,请重新登陆!");
return "../login";
}
}
编写登陆操作时,需要对对应的jsp页面进行修改,并且在对相应的mapper文件中增加sql语句。
对应的sql语句
<!-- 验证登陆 -->
<select id="doLogin" parameterType="java.lang.String" resultType="com.zhongruan.bean.UserInfo">
select * from tb_user where username=#{username}
</select>
2、增加用户:
@RequestMapping("/addUser.do")
public String addUser(UserInfo userInfo){
// 调用 service,得到结果。
userInfoService.addUser(userInfo);
// 增加成功,返回重新查询
return "redirect:findAll.do";
}
编写完增加操作需要去mapper文件下进行相对应的增加sql语句
对应的sql语句:
<!-- 增加 -->
<insert id="addUser" parameterType="com.zhongruan.bean.UserInfo">
insert into tb_user(id,username,password) values(#{id},#{username},#{password})
</insert>
3、删除操作:
<!-- 删除 -->
<delete id="delUserById" parameterType="Integer">
delete from tb_user where id=#{id}
</delete>
同样去mapper文件下增加相对应的sql语句
对应的sql语句
<!-- 删除 -->
<delete id="delUserById" parameterType="Integer">
delete from tb_user where id=#{id}
</delete>
4、修改操作
前文中说了,进行修改操作应该先进行查询操作。
以下为查询操作的代码(默认通过id查询):
// 修改前的查询
@RequestMapping("/updSelUserById.do")
public ModelAndView updSelUserInfoById(int id){
UserInfo userInfo = userInfoService.updSelUserInfoById(id);
ModelAndView mv = new ModelAndView();
mv.addObject("userInfo",userInfo);
mv.setViewName("user-update");
return mv;
}
以下为修改操作的代码:
// 修改
@RequestMapping("/updUserInfo.do")
public String updUserInfo(UserInfo userInfo){
userInfoService.updUserInfo(userInfo);
System.out.println("修改成功");
return "redirect:findAll.do";
}
同理,去mapper文件下增加sql语句:
以下为查询操作的代码(默认通过id查询):
对应的sql语句
<!-- 修改前的查询 -->
<select id="updSelUserInfoById" parameterType="Integer" resultType="com.zhongruan.bean.UserInfo">
select * from tb_user where id=#{id}
</select>
以下为修改操作的代码:
对应的sql语句
<!-- 修改 -->
<update id="updUserInfo" parameterType="com.zhongruan.bean.UserInfo">
update tb_user set username=#{username}, password=#{password} where id=#{id}
</update>
5、查询操作:
查询分为2种查询,按id查询,全部查询,因为按id查询与修改前查询相同,这边列出全部查询:
// 全部查询
// 所有需要返回数据到页面显示的全部都需要封装到ModelAndVIew中
@RequestMapping("/findAll.do")
public ModelAndView findAll(@RequestParam(){
// 调用service中的方法,得到查询结果
List<UserInfo> userInfoList = userInfoService.findAll();
ModelAndView mv = new ModelAndView();
mv.addObject("userInfoList",userInfoList);
mv.setViewName("user-list");
return mv;
}
同样去mapper文件下增加sql语句:
对应的sql语句
//查询全部
<select id="findAll" resultType="com.zhongruan.bean.UserInfo">
select * from tb_user
</select>
至此增删改查以及登陆全都完成,以下为完整的controller代码:
package com.zhongruan.controller;
import com.github.pagehelper.PageInfo;
import com.zhongruan.bean.UserInfo;
import com.zhongruan.service.IUserInfoService;
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.RequestParam;
import org.springframework.web.servlet.ModelAndView;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import java.util.List;
@Controller
@RequestMapping("user")
public class UserInfoController {
@Autowired
private IUserInfoService userInfoService;
@RequestMapping("doLogin.do")
public String doLogin(String username, String password, HttpSession session){
UserInfo userInfo = userInfoService.doLogin(username);
if (userInfo !=null ){
if(userInfo.getPassword().equals(password)){
System.out.println("登陆成功!");
session.setAttribute("userInfo",userInfo);
return "main";
}else {
System.out.println("密码错误,登陆失败!");
session.setAttribute("message","密码错误,请重新登陆!");
return "../login";
}
}else {
System.out.println("用户不存在,请检查重新登陆!");
session.setAttribute("message","用户不存在,请重新登陆!");
return "../login";
}
}
// 全部查询
@RequestMapping("/findAll.do")
public ModelAndView findAll(){
// 调用service中的方法,得到查询结果
List<UserInfo> userInfoList = userInfoService.findAll(){
ModelAndView mv = new ModelAndView();
mv.addObject("userInfoList",userInfoList);
mv.setViewName("user-list");
return mv;
}
// 增加
@RequestMapping("/addUser.do")
public String addUser(UserInfo userInfo){
// 调用 service,得到结果。
userInfoService.addUser(userInfo);
// 增加成功,返回重新查询
return "redirect:findAll.do";
}
// 删除
@RequestMapping("/delUser.do")
public String delUserById(int id){
userInfoService.delUserById(id);
System.out.println("删除成功");
return "redirect:findAll.do";
}
// 修改前的查询
// JDBC 和 Mybatis 有什么区别
@RequestMapping("/updSelUserById.do")
public ModelAndView updSelUserInfoById(int id){
UserInfo userInfo = userInfoService.updSelUserInfoById(id);
ModelAndView mv = new ModelAndView();
mv.addObject("userInfo",userInfo);
mv.setViewName("user-update");
return mv;
}
// 修改
@RequestMapping("/updUserInfo.do")
public String updUserInfo(UserInfo userInfo){
userInfoService.updUserInfo(userInfo);
System.out.println("修改成功");
return "redirect:findAll.do";
}
}
以及mapper代码:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="com.zhongruan.dao.IUserInfoDao">
<!-- 验证登陆 -->
<select id="doLogin" parameterType="java.lang.String" resultType="com.zhongruan.bean.UserInfo">
select * from tb_user where username=#{username}
</select>
<!-- 全部查询 -->
<select id="findAll" resultType="com.zhongruan.bean.UserInfo">
select * from tb_user
</select>
<!-- 增加 -->
<insert id="addUser" parameterType="com.zhongruan.bean.UserInfo">
insert into tb_user(id,username,password) values(#{id},#{username},#{password})
</insert>
<!-- 删除 -->
<delete id="delUserById" parameterType="Integer">
delete from tb_user where id=#{id}
</delete>
<!-- 修改前的查询 -->
<select id="updSelUserInfoById" parameterType="Integer" resultType="com.zhongruan.bean.UserInfo">
select * from tb_user where id=#{id}
</select>
<!-- 修改 -->
<update id="updUserInfo" parameterType="com.zhongruan.bean.UserInfo">
update tb_user set username=#{username}, password=#{password} where id=#{id}
</update>
</mapper>
以下为分页插件的使用:
使用分页插件,需要导入分页插件的jar包,所以我们去上一章所讲的pom.xml中增加一段代码
<!-- 分页jar包 -->
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper</artifactId>
<version>5.1.2</version>
</dependency>
之后在applicationContext.xml中进行分页的配置(即将对应的包告诉给SqlSessionfactory):
<!-- 分页配置 -->
<property name="plugins">
<array>
<bean class="com.github.pagehelper.PageInterceptor">
<property name="properties">
<props>
<prop key="helperDialect">mysql</prop>
<prop key="reasonable">true</prop>
</props>
</property>
</bean>
</array>
</property>
</bean>
在分页查询前,还应该先开启PageHelper,并且传入相应的参数(即当前分页和分页显示的条数):
// 分页查询
List<UserInfo> findAll(Integer page, Integer size);
因为我们的代码量并不复杂,只需要修改部分方法即可(此处修改的是全部查询的方法):
Service接口类:
// 分页查询
List<UserInfo> findAll(Integer page, Integer size);
Service实现类:
// 分页查询
@Override
public List<UserInfo> findAll(Integer page, Integer size) {
PageHelper.startPage(page,size);
return userInfoDao.findAll();
}
Controller层:
// 全部查询
// 所有需要返回数据到页面显示的全部都需要封装到ModelAndVIew中
@RequestMapping("/findAll.do")
public ModelAndView findAll(@RequestParam(defaultValue = "1") Integer page,
@RequestParam(defaultValue = "5") Integer size){
// 调用service中的方法,得到查询结果
List<UserInfo> userInfoList = userInfoService.findAll(page,size);
// 把得到的数据存放到 PageInfo中
PageInfo pageInfo = new PageInfo(userInfoList);
ModelAndView mv = new ModelAndView();
mv.addObject("pageInfo",pageInfo);
mv.setViewName("user-list");
return mv;
}
之后修改相应jsp页面
至此,分页查询结束。
FN57_ 发布了2 篇原创文章 · 获赞 0 · 访问量 23 私信 关注