大三上学期课程设计培训(前端、后端、数据库)

本项目为web开发项目,使用的技术包括:

SpringBoot+mysql+mybatis(JPA)+HTML+CSS+JQ(AJAX)

一、搭建SpringBoot环境

项目管理框架,已经嵌入服务器的代码

打开idea并创建新项目:

Create new project

-->maven

-->next

-->Name

-->Groupid:一般由多个段组成。性质.公司.项目

        org免费的,cn,com 比如:com.qd(公司名).qddemo(项目名)

-->Artifacctid:项目名字qddemo

-->Finish

创建完成之后得到几种文件类型:

.xml:maven配置文件

src(source):源码

main:

二、写入新项目(概念引入)

(一)继承springboot空项目

pom.xml(maven配置文件)中添加

<!--父类-->

<parent>

    <groupId>org.springframework</groupId>

    <artifactId>spring-boot-starter-parent</artifactId>

    <version>2.2.1.RELEASE</version>

</parent>

更新maven就会自动下载到本地仓库

(二)引入web环境

pom.xml(maven配置文件)中添加

<!--web环境-->

<dependency>

<groupId>org.springframework.boot</groupId>

<artifactId>spring-boot-starter-web</artifactId>

</dependency>

(三)Java右键new java class

名字是com.qd.qddemo.controller.IndexController.java

(四)编写处理器(主函数)

@RestController

//@Controller(控制层的类)+@ResponseBody(把返回值都变成json,不再是视图)

public class IndexController {

@RequestMapping("/index")

public String index(){

return "hello";

}

}

(五)编写启动类

1.方法一:

使用@EnableAutoConfiguration+@ComponentScan

@EnableAutoConfiguration:可开启自动扫描

@ComponentScan:用于扫描,默认会扫描当前包和子包

创建启动类  com.qd.qddemo.App.java

启动类:

@EnableAutoConfiguration

@ComponentScan

public class App {

    public static void main(String[] args) {

        //会调用内部嵌入的服务器代码

        SpringApplication.run(App.class,args);

    }

}

以上这么设计,会把com.qd.qddemo包下所有资源开启自动配置

2.方法二:推荐

启动类

@SpringBootApplicatio //@EnableAutoConfiguration+@ComponentScan

public class App {

    public static void main(String[] args) {

        //会调用内部嵌入的服务器代码

        SpringApplication.run(App.class,args);

    }

}

使用这种方式,其实的启动类必须放在资源的父级包下,才能自动扫描当前包和子包资源。因为无法自定义扫描路径

3.看到以下就可以启动了

Tomcat started on port(s): 8080 (http) with context path ''

Started App in 2.969 seconds (JVM running for 3.796)

(六)访问本地网址

http://127.0.0.1:8080/index

事实上是http://127.0.0.1/index(已经改为默认的80端口了)

三、创建配置文件

修改上下文路径和端口

Resource创建application.yml

server:

  servlet:

    context-path: /demo #上下文路径

    port: 80  #端口号 http默认80 https默认443

访问http://127.0.0.1:80/demo/index(:80是默认的,直接省略了)

也可以不设上下文路径,只设端口号

server:

  port: 80  #端口号 http默认80 https默认443

访问http://127.0.0.1:80/index(:80是默认的,直接省略了)

四、静态资源的访问

(一).html静态的请求

SpringBoot的要求,静态资源要放在resources下面的四个文件夹中:

static、public、resource、META-INF下的resources文件夹中

(二)测试

在resources下创建static,在这里放一个login.html

然后启动

访问http://127.0.0.1:8080/login.html(资源url(静态和动态))

(三)获取配置信息

在配置文件(application.yml)中定义某常量

com:

  pageSize: 10 #每页大小

在程序(主函数)中

@RestController     //@Controller(控制层的类)+@ResponseBody(把返回值都变成json,不再是视图)

public class IndexController {

//${pageSize}代表的是spel,spel是“spring表达式”的简称

    @Value("${com.pageSize}")

//Integer是int,配置文件读取的值赋给pageSize

    private Integer pageSize;

    @RequestMapping("/index")

    public String index(){

        return "hello:"+pageSize;}

}

访问http://127.0.0.1/index

(四)面向对象封装

lombok插件

可以帮助简化开发

1.lombok

让编译器具备这个能力(idea)

setting

plugins

lombok 搜索

install

2.让项目具备这个能力

pom.xml文件中加入:

<!--lombok-->

<dependency>

    <groupId>org.projectlombok</groupId>

    <artifactId>lombok</artifactId>

</dependency> 

如果配置项特别多,使用起来麻烦,阅读性不好,可以面向对象的封装

创建文件com.qd.qddemo.config.MyConfig.java

@Component//会自动将“我”交给spring管理(主函数里面@Autowired使用)

public class Myconfig {

    @Value("${com.pageSize}")

    private Integer pageSize;

    @Value("${com.pageSize1}")

    private Integer pageSize1;

    @Value("${com.pageSize2}")

    private Integer pageSize2;

    @Value("${com.pageSize3}")

    private Integer pageSize3;

右键--->(生成)-->getter and setter-->选中四个-->确定

在主函数 IndexController1中

@RestController

public class IndexController1 {

    @Autowired

    private Myconfig myconfig;

    @RequestMapping("/index1")

    public String index(){

        return "hello"+myconfig.getPageSize()+":"+myconfig.getPageSize1();

    }

}

访问http://127.0.0.1/index1

五、编写过滤器

过滤器:可以过滤器所有请求和响应

搭建

(一)创建过滤器类

com.qd.qddemo.filter.MyFilter.java

@WebFilter(urlPatterns = {"/*"})  //声明过滤的请求规则

public class MyFilter implements Filter {

//所有请求都先进来,所有响应都会从我这儿出去

@Override

public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {

System.out.println("进入");

chain.doFilter(request,response); //放行

System.out.println("出去");

}

}

(二)在启动类中,进行开启

@SpringBootApplication

@ServletComponentScan  //开启servlet相关的注解

public class App {

public static void main(String[] args) {

//会调用内部嵌入的服务器代码

SpringApplication.run(App.class,args);

}

}

(三)启动测试

http://127.0.0.1/index1

http://127.0.0.1/index

发现都会进入过滤器,然后出去

六、动态资源的访问

数据库 动态url

七、用户:发送请求

服务器:处理请求/响应数据

必须安装服务器软件tomcat

八、整合mybatis

mybatis:操作数据库的框架

无论什么框架,操作数据库,必须使用底层jdbc规范,对于操作mysql数据库,就必须导入mysql驱动

(一)导入数据库依赖

pom.xml中

<!--mybatis 依赖-->

<dependency>

<groupId>org.mybatis.spring.boot</groupId>

<artifactId>mybatis-spring-boot-starter</artifactId>

<version>2.2.1</version>

</dependency>

<!--mysql 驱动-->

<dependency>

<groupId>mysql</groupId>

<artifactId>mysql-connector-java</artifactId>

<version>5.1.46</version>

</dependency>

(二)配置数据库连接

application.yml文件中

####数据源配置####

spring:

datasource:

driver-class-name: com.mysql.jdbc.Driver

#8.x mysql驱动,位置可能 com.mysql.cj.jdbc.Driver

url: jdbc:mysql://localhost:3306/test  #mysql连接地址

username: root

password: 123456

####mybtis配置####

mybatis:

#映射文件地址

mapper-locations: classpath:com/qd/qddemo/mapper/*.xml

#定义类别名

type-aliases-package: com.qd.qddemo.entity

(三)创建实体类(数据库类)

(和数据库表一一对应,顾名思义,如表t_User,则类User)

创建com.qd.qddemo.entity.User.java文件

@Data

public class User {

private Integer id;

private String userName;

private String password;

}

(四)创建控制层

创建com.qd.qddemo.controller文件

@RestController

public class UserController {

@Autowired

private UserService userService;

@RequestMapping("/getUserById")

public User getUserById(Integer id){

//1.接受参数

//2.调用模型层(业务[业务逻辑 接口 实现] 持久[和数据库 打交道])

return userService.getUserById(id);

}

}

(五)创建业务层

创建com.qd.qddemo.service文件

@Service

public class UserService {

@Autowired

private UserMapper userMapper;

public User getUserById(Integer id){

return userMapper.getUserById(id);

}

}

(六)创建持久层

用于访问数据库

创建om.qd.qddemo.mapper.UserMapper接口

@Mapper

public interface UserMapper {

public User getUserById(Integer id);

}

(七)同文件夹下创建

UserMapper.xml//映射文件

名字要和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.qd.qddemo.mapper.UserMapper">

   <select id="getUserById" resultType="User">

   select * from t_user where id=#{id}

   </select>

</mapper>

(八)启动类

@SpringBootApplication

@ServletComponentScan  //开启servlet相关的注解

@MapperScan("com.qd.qddemo.mapper")

public class App {

public static void main(String[] args) {

//会调用内部嵌入的服务器代码

SpringApplication.run(App.class,args);

}

}

(九)启动

启动测试

报错,找不到映射文件

原因是编译器本身问题

解决:

附:在idea编译器中 会发生映射文件加载不进去的问题,原因是IDEA不会编译src/main/java中的xml文件。

解决方法就是在pom.xml中加以下配置,让编译器把src/main/java目录下的xml文件一同编译。

<build>

<resources>

<resource>

<directory>src/main/java</directory>

<includes>

<include>**/*.xml</include>

</includes>

</resource>

</resources>

</build>

*/

(十)访问本地网址

http://localhost/getUserBy Id?id=9

(十一)添加用户信息

控制层

@RequestMapping("/addUser")

public Integer addUser(User user){

return userService.addUser(user);

}

业务层

public Integer addUser(User user){

//先验证账号是否唯一

return userMapper.addUser(user);

}

持久层接口

public Integer addUser(User user);

映射文件

<insert id="addUser">

insert into t_user(userName,password) values(#{userName},#{password})

</insert>

(十二)访问本地网址

http://localhost/addUser?userName=cy1&password=cy1

http://localhost/addUser叫做url地址

?userName=cy1&password=cy叫做参数,参数与参数之间用与&符号隔开

(十二)注解开发

删除操作

@RequestMapping("delUserById")

public Integer delUserById(Integer id){

return userService.delUserById(id);

}

public Integer delUserById(Integer id){

return userMapper.delUserById(id);

}

public Integer delUserById(Integer id);

<delete id="delUserById">

delete from t_user where id=#{id}

</delete>

(十三)访问本地网址

http://localhost/delUserById?id=9

改成注解

@Delete("delete from t_user where id=#{id}")

public Integer delUserById(Integer id);

(十四)事务如何管理

只需要在业务层,并且“想”保证一致性的地方,加注解

@Transactional//事务管理 使下面函数和数据库的动作保持一致性保持一致性

public Integer addUser(User user){

//先验证账号是否唯一

Integer result=userMapper.addUser(user);

int a=9/0;

return result;

}

发现数据并没有进入数据库持久化,证明事务一致

(十五)修改用户信息

(十六)访问本地网址

localhost/updateUser?userName=ddd&password=ddd&id=4

九、项目设计

(一)以后资源分两种(动态 静态)

动态(非验证是否登陆*.do,验证是否登陆过*.action)

静态(login.html放行,否则都要验证是否登陆过)

(二)整体采用mvc架构

(三)XXXAdmin静态页面中文件导入resource.static

(四)访问本地网址

http://localhost/login.html

如果不显示的话可以吧target文件夹删掉,是编译之后的文件

(五)导入数据库表xxxadmin.sql,开发功能

十、登陆功能

需求:点击登陆时,验证账号密码不许为空,账号如果不存在,则提示密码是否正确,账号是否锁死

(一)创建映射文件

<mapper namespace="com.qd.qddemo.mapper.AdminMapper">

<!--通过管理员账户获取管理员信息-->

    <select id="getAdminByAdminAccount" resultType="Admin">

       select * from t_admin where adminAccount=#{adminAccount}

    </select>

</mapper>

(二)创建持久层

@Mapper

public interface AdminMapper {

    public Admin getAdminByAdminAccount(String adminAccount);

}

(三)创建业务层

@Service

public class AdminService {

    @Autowired

    private AdminMapper adminMapper;

    /**

     * 登陆

     * 先根据账号查询,如果查询得到数据,则证明找好正确,否则账号错误

     * 再根据查询得到的密码对比参数密码,如果一致,则密码正确,否则密码错误

     * 再判断

     * 0 账号不存在

     * 1 密码错误

     * 2 锁死

     * 3 登录成功

     * @param adminAccount

     * @param password

     * @return

     */

    public Integer login(String adminAccount, String password) {

        Admin admin = adminMapper.getAdminByAdminAccount(adminAccount);

        if (admin == null) {

            System.out.println("账号不正确");

            return 0;

        }

        if (!admin.getPassword().equals(password)) {

            System.out.println("密码不正确");

            return 1;

        }

        if (admin.getStatus() != 0) {

            System.out.println("账号已锁定");

            return 2;

        }

        return 3;

    }

}

(四)创建控制层

@RestController

public class AdminController {

    @Autowired

    private AdminService adminService;//阿里规范 驼峰标识

    @RequestMapping("/login.do")

    public Integer login(String adminAccount, String password){

        return adminService.login(adminAccount,password);

    }

}

(五)访问顺序:login.html-->login.do-->main.html

(六)访问:http://localhost/login.html

登陆界面

(七)访问:localhost/login.do?adminAccount=aaa&password=aaa

返回0123,账户密码是否正确

     * 0 账号不存在

     * 1 密码错误

     * 2 锁死

     * 3 登录成功

(八)访问:http://localhost/main.html

进不去,会被过滤器拦截

(九网页输入账号密码后事件

网页文件

if(b){

//满足文本框要求,此时提交数据即可

//window.location.href="main.html";

$.ajax(

{//异步提交,局部刷新

url:"login.do",

type:"post",//提交方式,隐藏信息

data:{

adminAccount:adminAccount,

password:password

},

success:function (data){

if (data==0){

$("#msg").html("对不起,账号不存在");

}

else if (data==1){

$("#msg").html("对不起,密码不存在");

}

else if (data==2){

$("#msg").html("对不起,当前账号已被锁定");

}

else if (data==3){

//alert("登录成功!");

window.location.href="main.html";

}

}

}

)

}

十一、会话认证

(一)过滤器

@WebFilter(urlPatterns = {"*.action","*.html"})  //声明过滤的请求规则

public class SessionFilter implements Filter {

    //所有请求都先进来,所有响应都会从我这儿出去

    @Override

    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {

        HttpServletRequest req=(HttpServletRequest) request;

        String uri=req.getRequestURI();

        System.out.println(uri);

        if(uri.contains("/login.html")){

            chain.doFilter(request,response);

        }

    }

}

(二)控制层

public Integer login(String adminAccount, String password, HttpSession session){

        return adminService.login(adminAccount,password,session);

}

(三)业务层

public Integer login(String adminAccount, String password,HttpSession session)

//登录成功之后,记载标记,在会话对象中

        session.setAttribute("admin",admin);

        return 3;

(四)过滤器

@WebFilter(urlPatterns = {"*.action","*.html"})  //声明过滤的请求规则

public class SessionFilter implements Filter {

    //所有请求都先进来,所有响应都会从我这儿出去

    @Override

    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {

        HttpServletRequest req=(HttpServletRequest) request;

        HttpServletResponse resp=(HttpServletResponse)response;

        String uri=req.getRequestURI();

        System.out.println(uri);

        if(uri.contains("/login.html")){

            chain.doFilter(request,response);

        }else{

            HttpSession session=req.getSession();

            Admin admin=(Admin) session.getAttribute("admin");

            if(admin==null){

                resp.sendRedirect("/login.html");

            }else {

                chain.doFilter(request,response);//放行

            }

        }

    }

}

(五)过滤器

                resp.sendRedirect("/login.html?s=1");

(六)网页文件

$(function(){

    var uri=window.location.search;//页面加载获取地址栏信息

        var s=uri.split("=")[1];//字符串截取,按照等号切割 取到1,存到s上

        if (s==1){

            alert("对不起,请先登陆");

            $("#msg").html("对不起,请先登陆");

        }

十二、密码加密

不可逆的加密(哈希算法)

sha256(产物很大,比特币)

md5(产物很小)产生的密码长度

用户输入自己的密码,数据库是加密后的密码

(一)MD5导入

com.qd.qddemo.utils中粘贴MD5Utils文件

(二)业务层密码加密

添加用户方法中

这个方法还没写,不知道什么时候写上的

public Integer addAdmin(Admin admin){

        Admin a=adminMapper.getAdminByAdminAccount(admin.getAdminAccount());

        if(a!=null){

            System.out.println("对不起,账号已存在");

            return 2;

        }

        //密码加密

        admin.setPassword(MD5Utils.getPwd(admin.getPassword()));

        return adminMapper.addUser(admin);

    }

}

(三)业务层输入密码中

if (!admin.getPassword().equals(MD5Utils.getPwd(password))) {

System.out.println("密码不正确");

return 1;

十三、密码错误上限

(一)定义密码错误上限

application.yml配置文件

passwordErrorCount: 3

(二)修改数据库表结构

添加用户的sql语言中

加入errorCount 注册值插入0即可

(三)修改实体类结构

增加private Integer errorCount;//密码错误上限的实体类

(四)修改业务逻辑

业务层

@Autowired

private AdminMapper adminMapper;

@Value("${passwordErrorCount}")//导入密码错误上限

public Integer passwordErrorCount;

 if (!admin.getPassword().equals(MD5Utils.getPwd(password))) {

            System.out.println("密码不正确");

            //让错误次数+1

            adminMapper.updatePasswordErrorCount(admin.getId());//根据id更新密码错误次数计数

            return 1;

        }

if (admin.getErrorCount() > passwordErrorCount) {

            System.out.println("当日密码错误已到达上限,请明日再试!");

            return 4;

        }

(五)持久层

//根据id更新密码错误次数计数

 public Integer updatePasswordErrorCount(Integer id);

(六)映射文件

<!--根据id更新密码错误计数-->

<update id="updatePasswordErrorCount">

        update t_admin set errorCount=errorCount+1 where id=#{id}

</update>

(七)网页文件

else if (data==4 ){

$("#msg").html("当日密码错误已到达上限,请明日再试!");

}

(八)定时器

创建com.qd.qddemo.task.MyTask

加上@Component交给spring管理

(九)持久层

//初始化计数器

public Integer initPasswordErrorCount();

(十)映射文件

<!--初始化计数器-->

<update id="initPasswordErrorCount">

        update t_admin set errorCount=0

</update>

(十一)启动类中

@EnableScheduling   //开启定时器

十四、基本设置(基本信息)

(一)info.html中

<!--<div class="form-group">

        <div class="label">

          <label>角色:</label>

        </div>

        <div class="field">

          <div class="jbxx" id="roleName">管理员</div>

        </div>

      </div>-->

删掉

第13行加上

<script>

      $(function (){

        $.ajax({

          url:"getCurrentInfo.action",//请求地址

          type:"type",//请求方式

          dataType:"json",

          success:function (data){

          }

        });

      })

</script>

(二)控制层

@RequestMapping("/getCurrentInfo.action")

    public Admin getCurrentInfo(HttpSession session){

        //方案一:查询数据库得到   好处:信息实时准确   缺点:慢

        //方案二:从会话对象中获取  好处:快    缺点:信息不准确

//这里暂时使用方案二

        Admin admin=(Admin) session.getAttribute("admin");

        return admin;

}

(三)info.html中

删掉假信息

<script>

      $(function (){

        $.ajax({

          url:"getCurrentInfo.action",//请求地址

          type:"type",//请求方式

          dataType:"json",

          success:function (data){

            $("adminAccount").html(data.adminAccount);

            $("adminName").html(data.adminName);

            $("mail").html(data.mail);

            $("phoneNo").html(data.phoneNo);

            $("birthday").html(data.birthday);

            $("createTime").html(data.createTime);

            $("address").html(data.address);

          }

        });

      })

</script>

(四)出生日期不带时分秒

resources/ststic/admin/AdminAdd.html文件中149行

把 HH:mm:ss删掉

十五、密码修改

(一)pass.html文件中

旧密码:oldpass

新密码:newpass

确认新密码:rnewpass

if(b){  

//满足文本框要求,此时提交数据即可

              $.ajax({

                url:"updatePassword.action",

                type:"post",

                data:{

                  oldpass:oldpass,

                  newpass:newpass

                }

              })

}

(二)控制层

@RequestMapping("/updatepassword.action")

    public Integer updatePassword(String oldpass,String,newpass){

        }

(三)业务层

public Integer updatePassword(String oldpass,String,newpass,HttpSession session){

        Admin admin=(Admin) session.getAttribute("admin");

        if(!admin.getPassword().equals(MD5Utils.getPwd(oldpass))){

            return 2;

        }

    }

(四)持久层

//密码更新 param是形参

public Integer updatePassword(@Param("id") Integer id,@Param("password") String newpass);

(五)映射文件

<update id="updatePassword">

        update t_admin set password=#{password} where id = #{id}

    </update>

(六)业务层

public Integer updatePassword(String oldpass,String,newpass,HttpSession session){

        Admin admin=(Admin) session.getAttribute("admin");

        if(!admin.getPassword().equals(MD5Utils.getPwd(oldpass))){

            return 2;

        }

        return adminMapper.updatePassword(admin.getId(),MD5Utils.getPwd(newpass));

}

(七)控制层

@RequestMapping("/updatepassword.action")

    public Integer updatePassword(String oldpass,String,newpass,HttpSession session){

        return adminService.updatePassword(oldpass,newpass,session);

        }

(八)pass.html文件中

if(b){

//满足文本框要求,此时提交数据即可

              $.ajax({

                url:"updatePassword.action",

                type:"post",

                data:{

                  oldpass:oldpass,

                  newpass:newpass

                },

                success:function (data){

                  if (data==0){

                    alert("修改失败");

                  }else if (data==1){

                    alert("修改成功");

                  }else if (data==2){

                    alert("原密码错误");

                    $("oldpass").val("");

                    $("oldPwdMsg").html("原密码错误");

                  }

                }

              })

}

(九)业务层

public Integer updatePassword(String oldpass,String,newpass,HttpSession session){

        Admin admin=(Admin) session.getAttribute("admin");

        if(!admin.getPassword().equals(MD5Utils.getPwd(oldpass))){

            return 2;

        }

        Integer result = adminMapper.updatePassword(admin.getId(),MD5Utils.getPwd(newpass));

        if (result==1){//修改成功,应该取出会话标记

            //session.setAttribute("admin",null);

            session.removeAttribute("admin");

        }

return result;

}

(十)pass.html文件中

else if (data==1){

                    alert("修改成功");

                    window.top.location.href="login.html";

十六、虚拟路径

(一)创建config.MyConfig

@Configuration

public class Myconfig implements WebMvcConfigurer {

(二)右键-->生成-->实现方法-->addResourceHandlers

@Configuration

public class Myconfig implements WebMvcConfigurer {

    @Override

    public void addResourceHandlers(ResourceHandlerRegistry registry) {

    }

(三)注册虚拟路径

@Override

    public void addResourceHandlers(ResourceHandlerRegistry registry) {

        registry.addResourceHandler("/files/**")    //虚拟访问路径 **代表所有资源都可以访问到

                .addResourceLocations("file:D:/大学牲/大三上学期/期末课程设计培训/qddemo1/");        //前缀 虚拟路径对应的磁盘路径

    }

十七、基本设置(信息修改)

(一)infoedit.html中

回显(查询)

58行

url:"headImgUpload.action?flag=headImgUpload",

改为

url:"fileImgUpload.action",

(二)头像上传

(三)控制层

//文件上传

    @RequestMapping("/fileUpload.action")

    public String fileUpload(@RequestParam("picture") MultipartFile file,,HttpSession session){//做文件上传的参数 名字picture映射为file

        Admin admin=(Admin)session.getAttribute("admin");

        File f=new File("D:\\大学牲\\大三上学期\\期末课程设计培训\\qddemo1"+admin.getAdminAccount()+".jpg");

        file.transferTo(f);

        return admin.getAdminAccount()+".jpg";

}

(四)配置文件

spring:

  servlet:

    multipart:

      max-file-size: 10MB

      max-request-size: 10MB

(五)修改其他普通文本数据

url:"updateAdmin.action?flag=updateAdmin",

改为

url:"updateCurrentAdmin.action",

(六)控制层

@RequestMapping("/updateCurrentAdmin.action")

    public Integer updateCurrentAdmin(Admin admin){

}

(七)业务层

public Integer updateCurrentAdmin(Admin admin){

}

(八)持久层

public String updateCurrentAdmin(Admin admin);

(九)映射文件

<update id="updateAdmin">

        update t_admin set adminName=#{adminName},main=#{main},phoneNo=#{phoneNO},birthday=#{birthday},address=#{address},fileName=#{fileName} where id={id}

</update>

(十)infoedit.html中

//在修改其他普通文本数据

$.ajax({

  url:"updateCurrentAdmin.action",

  type:"post",

  data:$("#form1").serialize(),  //利用表单携带参数,但不提交请求

  success:function(data){

    if (data==1){

                      alert("修改成功");

                      window.top.location.reload(); //让最外层刷新,目的是让头像刷新显示

                    }else if(data==0){

      alert("修改失败")

                    }

  //window.top.location.reload(); 让最外层刷新,目的是让头像刷新显示

  }

});

十八、数据查询以及分页

(一)AdminManage.html文件中

18行

<!--页面加载函数-->

    $.ajax({

            url:"../searchAllAdmin.action",//回到上级目录

            type:"post",

            dataType:"json",

            success:function (data){

            }

        })

(二)控制层

@RequestMapping("/searchAllAdmin.action")

    public PageInfo<Admin> searchAllAdmin(){

}

(三)引入pagehelper插件

配置文件中

<!--pagehelper 它是mysql第三方常见的分页插件-->

        <dependency>

            <groupId>com.github.pagehelper</groupId>

            <artifactId>pagehelper-spring-boot-starter</artifactId>

            <version>1.2.5</version>

        </dependency>

(四)pagehelper的设置

###pagehelper设置

###方言

pagehelper:

  helper-dialect: mysql

  ###开启分页合理化  当前页<1,会默认查询第一页  当前页>总页数,会默认查询最后一页

  reasonable: true

###每页大小

pageSize: 3

(五)业务层

public PageInfo<Admin> searchAllAdmin(Integer pageIndex){

            PageHelper.startPage(pageIndex,pageSize);//插件自动帮助分页

        }

(六)持久层

public List<Admin> searchAllAdmin();

(七)映射文件

<select id="searchAllAdmin" resultType="Admin">

        select * from t_admin

</select>

(八)业务层

        public PageInfo<Admin> searchAllAdmin(Integer pageIndex){

            PageHelper.startPage(pageIndex,pageSize);//插件自动帮助分页

            List<Admin> adminList=adminMapper.searchAllAdmin();

            return new PageInfo<Admin>(adminList);

        }

(九)控制层

 @RequestMapping("/searchAllAdmin.action")

    public PageInfo<Admin> searchAllAdmin(Integer pageIndex){

        return adminService.searchAllAdmin(pageIndex);

}

(十)AdminManage.html中

<!-表里的一组数据->注释掉,好像是两组

<!--页面加载函数-->

    $.ajax({

            url:"../searchAllAdmin.action",//回到上级目录

            type:"post",

            dataType:"json",

            success:function (data){

                //循环

                $.each(data.list,function (key,admin){

var str="<tr>";

                str+="<td><input type=\"checkbox\" name=\"id\" value='"+admin.id+"' />(key+1)</td>";

                str+="<td>"+admin.adminAccount+"</td>\n" +

                    "      <td>"+admin.adminName+"</td>\n" +

                    "      <td>\n" +

                    "          <input class=\"onoff\" value='"+admin.id+"' type=\"checkbox\" "+(admin.status==0?"":"checked")+" οnclick=\"lockAdmin(this);\"/>\n" +

                    "      </td>\n" +

                    "      <td>\n" +

                    "          <div class=\"button-group\">\n" +

                    "              <a class=\"button border-main icon-search\" style=\"padding:3px 3px;\" href='AdminView.html?id="+admin.id+"'>详情</a>\n" +

                    "              <a class=\"button border-main\" style=\"padding:3px 3px;\" href='AdminEdit.html?id="+admin.id+"'><span class=\"icon-edit\"></span> 修改</a>\n" +

                    "              <a class=\"button border-main\"  style=\"padding:3px 3px;\" href=\"javascript:void(0)\" οnclick=\"return del("+admin.id+");\"><span class=\"icon-trash-o\"></span> 删除</a>\n" +

                    "          </div>\n" +

                    "      </td>\n" +

                    "      </tr>"

            })

        }

})

十九、其他功能思路

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值