springboot+jsp+mybatis+mysql

本文介绍了如何使用SpringBoot、JSP和Mybatis进行整合,实现一个简单的CRUD应用。首先展示了项目的pom.xml配置,然后详细说明了Application配置、数据源设置、以及Controller、Service、Mapper接口和XML文件的实现。此外,还包含了关键的Mapper接口和XML文件的SQL操作,以及IndexController中的请求处理逻辑。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

使用的pom文件

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">

    <modelVersion>4.0.0</modelVersion>

    <groupId>com.baidu</groupId>

    <artifactId>springbootjsp</artifactId>

    <packaging>war</packaging>

    <version>1.0-SNAPSHOT</version>

    <name>springbootjsp Maven Webapp</name>

    <url>http://maven.apache.org</url>

    <properties>

        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>

        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>

        <java.version>1.8</java.version>

        <junit.version>4.12</junit.version>

        <log4j.version>1.2.17</log4j.version>

        <slf4j.version>1.7.5</slf4j.version>

    </properties>

    <parent>

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

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

        <version>1.5.2.RELEASE</version>

        <relativePath/> <!-- lookup parent from repository -->

    </parent>

    <dependencies>

        <dependency>

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

            <artifactId>spring-boot-devtools</artifactId>

            <optional>true</optional>

        </dependency>

        <dependency>

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

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

        </dependency>

        <dependency>

            <groupId>javax.servlet</groupId>

            <artifactId>jstl</artifactId>

        </dependency>

        <dependency>

            <groupId>org.apache.tomcat.embed</groupId>

            <artifactId>tomcat-embed-jasper</artifactId>

        </dependency>

        <dependency>

            <groupId>org.slf4j</groupId>

            <artifactId>slf4j-log4j12</artifactId>

            <version>${slf4j.version}</version>

        </dependency>

        <dependency>

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

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

            <version>2.0.1</version>

        </dependency>

        <dependency>

            <groupId>mysql</groupId>

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

            <version>8.0.15</version>

        </dependency>

<!--        <dependency>

            <groupId>com.alibaba</groupId>

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

            <version>1.1.10</version>

        </dependency>-->

        <dependency>

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

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

        </dependency>

        <!--添加fastjson依赖-->

        <dependency>

            <groupId>com.alibaba</groupId>

            <artifactId>fastjson</artifactId>

            <version>1.2.7</version>

        </dependency>

        <dependency>

            <groupId>junit</groupId>

            <artifactId>junit</artifactId>

            <version>3.8.1</version>

            <scope>test</scope>

        </dependency>

    </dependencies>

    <build>

        <plugins>

            <plugin>

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

                <artifactId>spring-boot-maven-plugin</artifactId>

                <version>1.5.2.RELEASE</version>

            </plugin>

            <plugin>

                <groupId>org.apache.maven.plugins</groupId>

                <artifactId>maven-surefire-plugin</artifactId>

                <version>2.7.2</version>

                <configuration>

                    <useSystemClassLoader>false</useSystemClassLoader>

                </configuration>

            </plugin>

        </plugins>

        <resources>

            <!--此处的配置是识别到mapper.xml文件,也可以在application.properties中配置-->

            <resource>

                <directory>src/main/resources/mapper</directory>

                <includes>

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

                </includes>

            </resource>

            <resource>

                <directory>src/main/resources</directory>

            </resource>

        </resources>

    </build>

</project>

Application配置:

spring:

  profiles:

    active: dev

logging:

  level: debug

server:

  port: 8080  #tomcat端口

Application-dev配置

spring:

  #springboot的配置

  datasource: #定义数据源

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

    url: jdbc:mysql://127.0.0.1:3306/test?serverTimezone=UTC

    username: root

    password: root

  resources:

    static-locations: [ "/templates/","/resources/","/static/" ]

  #  mvc:

#    view:

#      prefix: /WEB-INF/jsp/

#      suffix: .jsp

  thymeleaf:

    prefix: classpath:/templates/

    suffix: .html

    mode: HTML5

    encoding: UTF-8

    content-type: text/html

  # 关闭缓存, 即时刷新, 上线生产环境需要改为true

    cache: false

  # 配置静态资源文件路径

mybatis:

  mapperLocations: 'classpath:/mapper/*.xml'

IndexController

import com.zygxy.po.UserInfo;

import com.zygxy.service.UserInfoService;

import org.springframework.stereotype.Controller;

import org.springframework.ui.Model;

import org.springframework.web.bind.annotation.RequestMapping;

import javax.annotation.Resource;

@Controller

public class IndexController {

    @Resource

    private UserInfoService userInfoService;

    @RequestMapping("/")

    public String toPageIndex(Model model) {

        UserInfo userInfo = userInfoService.queryUser();

        model.addAttribute("userInfo", userInfo);

        System.out.println("请求登录");

        return "index";

    }

    @RequestMapping("/login")

    public String toPageLogin() {

        System.out.println("请求登录");

        return "page/login1";

    }

}

UserInfoService

import com.zygxy.po.UserInfo;

public interface UserInfoService {

     UserInfo queryUser();

}

UserInfoServiceImpl

import com.zygxy.mapper.UserInfoMapper;

import com.zygxy.po.UserInfo;

import com.zygxy.service.UserInfoService;

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.stereotype.Service;

@Service

public class UserInfoServiceImpl implements UserInfoService {

    @Autowired

    private UserInfoMapper userInfoMapper;

    @Override

    public UserInfo queryUser() {

        return userInfoMapper.selectByPrimaryKey(1);

    }

}

UserInfoMapper

import com.zygxy.po.UserInfo;

import org.apache.ibatis.annotations.Mapper;

@Mapper

public interface UserInfoMapper {

    int deleteByPrimaryKey(Integer id);

    int insert(UserInfo record);

    int insertSelective(UserInfo record);

    UserInfo selectByPrimaryKey(Integer id);

    int updateByPrimaryKeySelective(UserInfo record);

    int updateByPrimaryKey(UserInfo record);

}

UserInfoMapper.xml

<?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.zygxy.mapper.UserInfoMapper">

  <resultMap id="BaseResultMap" type="com.zygxy.po.UserInfo">

    <id column="id" jdbcType="INTEGER" property="id" />

    <result column="user_name" jdbcType="VARCHAR" property="userName" />

    <result column="password" jdbcType="VARCHAR" property="password" />

    <result column="nick_name" jdbcType="VARCHAR" property="nickName" />

    <result column="age" jdbcType="INTEGER" property="age" />

  </resultMap>

  <sql id="Base_Column_List">

    id, user_name, password, nick_name, age

  </sql>

  <select id="selectByPrimaryKey" parameterType="java.lang.Integer" resultMap="BaseResultMap">

    select

    <include refid="Base_Column_List" />

    from user_info

    where id = #{id,jdbcType=INTEGER}

  </select>

  <delete id="deleteByPrimaryKey" parameterType="java.lang.Integer">

    delete from user_info

    where id = #{id,jdbcType=INTEGER}

  </delete>

  <insert id="insert" parameterType="com.zygxy.po.UserInfo">

    insert into user_info (id, user_name, password,

      nick_name, age)

    values (#{id,jdbcType=INTEGER}, #{userName,jdbcType=VARCHAR}, #{password,jdbcType=VARCHAR},

      #{nickName,jdbcType=VARCHAR}, #{age,jdbcType=INTEGER})

  </insert>

  <insert id="insertSelective" parameterType="com.zygxy.po.UserInfo">

    insert into user_info

    <trim prefix="(" suffix=")" suffixOverrides=",">

      <if test="id != null">

        id,

      </if>

      <if test="userName != null">

        user_name,

      </if>

      <if test="password != null">

        password,

      </if>

      <if test="nickName != null">

        nick_name,

      </if>

      <if test="age != null">

        age,

      </if>

    </trim>

    <trim prefix="values (" suffix=")" suffixOverrides=",">

      <if test="id != null">

        #{id,jdbcType=INTEGER},

      </if>

      <if test="userName != null">

        #{userName,jdbcType=VARCHAR},

      </if>

      <if test="password != null">

        #{password,jdbcType=VARCHAR},

      </if>

      <if test="nickName != null">

        #{nickName,jdbcType=VARCHAR},

      </if>

      <if test="age != null">

        #{age,jdbcType=INTEGER},

      </if>

    </trim>

  </insert>

  <update id="updateByPrimaryKeySelective" parameterType="com.zygxy.po.UserInfo">

    update user_info

    <set>

      <if test="userName != null">

        user_name = #{userName,jdbcType=VARCHAR},

      </if>

      <if test="password != null">

        password = #{password,jdbcType=VARCHAR},

      </if>

      <if test="nickName != null">

        nick_name = #{nickName,jdbcType=VARCHAR},

      </if>

      <if test="age != null">

        age = #{age,jdbcType=INTEGER},

      </if>

    </set>

    where id = #{id,jdbcType=INTEGER}

  </update>

  <update id="updateByPrimaryKey" parameterType="com.zygxy.po.UserInfo">

    update user_info

    set user_name = #{userName,jdbcType=VARCHAR},

      password = #{password,jdbcType=VARCHAR},

      nick_name = #{nickName,jdbcType=VARCHAR},

      age = #{age,jdbcType=INTEGER}

    where id = #{id,jdbcType=INTEGER}

  </update>

</mapper>

UserInfo

package com.zygxy.po;

public class UserInfo {

    private Integer id;

    private String userName;

    private String password;

    private String nickName;

    private Integer age;

    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 == null ? null : userName.trim();

    }

    public String getPassword() {

        return password;

    }

    public void setPassword(String password) {

        this.password = password == null ? null : password.trim();

    }

    public String getNickName() {

        return nickName;

    }

    public void setNickName(String nickName) {

        this.nickName = nickName == null ? null : nickName.trim();

    }

    public Integer getAge() {

        return age;

    }

    public void setAge(Integer age) {

        this.age = age;

    }

}

各个文件的路径

 

Index.html

<!DOCTYPE html>

<html xmlns:th="http://www.thymeleaf.org">

<head>

    <meta charset="utf-8"/>

    <title>layuimini-iframe版 v2 - 基于Layui的后台管理系统前端模板</title>

    <meta name="keywords" content="layuimini,layui,layui模板,layui后台,后台模板,admin,admin模板,layui mini"/>

    <meta name="description"

          content="layuimini基于layui的轻量级前端后台管理框架,最简洁、易用的后台框架模板,面向所有层次的前后端程序,只需提供一个接口就直接初始化整个框架,无需复杂操作。"/>

    <meta name="renderer" content="webkit"/>

    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"/>

    <meta http-equiv="Access-Control-Allow-Origin" content="*"/>

    <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1"/>

    <meta name="apple-mobile-web-app-status-bar-style" content="black"/>

    <meta name="apple-mobile-web-app-capable" content="yes"/>

    <meta name="format-detection" content="telephone=no"/>

    <link rel="icon" href="/static/images/favicon.ico" ></link>

    <link rel="stylesheet"   th:href="@{/lib/layui-v2.6.3/css/layui.css}" media="all"></link>

    <link rel="stylesheet"   media="all" th:href="@{/css/layuimini.css?v=2.0.4.2}" ></link>

    <link rel="stylesheet"  media="all" th:href="@{/css/themes/default.css}" ></link>

    <link rel="stylesheet" th:href="@{/lib/font-awesome-4.7.0/css/font-awesome.min.css}"  media="all"></link>

    <!--[if lt IE 9]>

    <script src="https://cdn.staticfile.org/html5shiv/r29/html5.min.js"></script>

    <script src="https://cdn.staticfile.org/respond.js/1.4.2/respond.min.js"></script>

    <![endif]-->

    <style id="layuimini-bg-color">

    </style>

</head>

<body class="layui-layout-body layuimini-all">

<div class="layui-layout layui-layout-admin">

    <div class="layui-header header">

        <div class="layui-logo layuimini-logo"></div>

        <div class="layuimini-header-content">

            <a>

                <div class="layuimini-tool"><i title="展开" class="fa fa-outdent" data-side-fold="1"></i></div>

            </a>

            <!--电脑端头部菜单-->

            <ul class="layui-nav layui-layout-left layuimini-header-menu layuimini-menu-header-pc layuimini-pc-show">

            </ul>

            <!--手机端头部菜单-->

            <ul class="layui-nav layui-layout-left layuimini-header-menu layuimini-mobile-show">

                <li class="layui-nav-item">

                    <a href="javascript:;"><i class="fa fa-list-ul"></i> 选择模块</a>

                    <dl class="layui-nav-child layuimini-menu-header-mobile">

                    </dl>

                </li>

            </ul>

            <ul class="layui-nav layui-layout-right">

                <li class="layui-nav-item" lay-unselect="">

                    <a href="javascript:;" data-refresh="刷新"><i class="fa fa-refresh"></i></a>

                </li>

                <li class="layui-nav-item" lay-unselect="">

                    <a href="javascript:;" data-clear="清理" class="layuimini-clear"><i class="fa fa-trash-o"></i></a>

                </li>

                <li class="layui-nav-item mobile layui-hide-xs" lay-unselect="">

                    <a href="javascript:;" data-check-screen="full"><i class="fa fa-arrows-alt"></i></a>

                </li>

                <li class="layui-nav-item layuimini-setting">

                    <a href="javascript:;">admin</a>

                    <dl class="layui-nav-child">

                        <dd>

                            <a href="javascript:;" layuimini-content-href="page/user-setting.html" data-title="基本资料"

                               data-icon="fa fa-gears">基本资料<span class="layui-badge-dot"></span></a>

                        </dd>

                        <dd>

                            <a href="javascript:;" layuimini-content-href="page/user-password.html" data-title="修改密码"

                               data-icon="fa fa-gears">修改密码</a>

                        </dd>

                        <dd>

                            <hr></hr>

                        </dd>

                        <dd>

                            <a href="javascript:;" class="login-out">退出登录</a>

                        </dd>

                    </dl>

                </li>

                <li class="layui-nav-item layuimini-select-bgcolor" lay-unselect="">

                    <a href="javascript:;" data-bgcolor="配色方案"><i class="fa fa-ellipsis-v"></i></a>

                </li>

            </ul>

        </div>

    </div>

    <!--无限极左侧菜单-->

    <div class="layui-side layui-bg-black layuimini-menu-left">

    </div>

    <!--初始化加载层-->

    <div class="layuimini-loader">

        <div class="layuimini-loader-inner"></div>

    </div>

    <!--手机端遮罩层-->

    <div class="layuimini-make"></div>

    <!-- 移动导航 -->

    <div class="layuimini-site-mobile"><i class="layui-icon"></i></div>

    <div class="layui-body">

        <div class="layuimini-tab layui-tab-rollTool layui-tab" lay-filter="layuiminiTab" lay-allowclose="true">

            <ul class="layui-tab-title">

                <li class="layui-this" id="layuiminiHomeTabId" lay-id=""></li>

            </ul>

            <div class="layui-tab-control">

                <li class="layuimini-tab-roll-left layui-icon layui-icon-left"></li>

                <li class="layuimini-tab-roll-right layui-icon layui-icon-right"></li>

                <li class="layui-tab-tool layui-icon layui-icon-down">

                    <ul class="layui-nav close-box">

                        <li class="layui-nav-item">

                            <a href="javascript:;"><span class="layui-nav-more"></span></a>

                            <dl class="layui-nav-child">

                                <dd><a href="javascript:;" layuimini-tab-close="current">关 闭 当 前</a></dd>

                                <dd><a href="javascript:;" layuimini-tab-close="other">关 闭 其 他</a></dd>

                                <dd><a href="javascript:;" layuimini-tab-close="all">关 闭 全 部</a></dd>

                            </dl>

                        </li>

                    </ul>

                </li>

            </div>

            <div class="layui-tab-content">

                <div id="layuiminiHomeTabIframe" class="layui-tab-item layui-show"></div>

            </div>

        </div>

    </div>

</div>

<script type="text/javascript"  th:src="@{/lib/layui-v2.6.3/layui.js}"  charset="utf-8"></script>

<script type="text/javascript"   th:src="@{/js/lay-config.js?v=2.0.0}"  charset="utf-8"></script>

<script>

    layui.use(['jquery', 'layer', 'miniAdmin', 'miniTongji'], function () {

        var $ = layui.jquery,

            layer = layui.layer,

            miniAdmin = layui.miniAdmin,

            miniTongji = layui.miniTongji;

        var options = {

            iniUrl: "api/init.json",    // 初始化接口

            clearUrl: "api/clear.json", // 缓存清理接口

            urlHashLocation: true,      // 是否打开hash定位

            bgColorDefault: false,      // 主题默认配置

            multiModule: true,          // 是否开启多模块

            menuChildOpen: false,       // 是否默认展开菜单

            loadingTime: 0,             // 初始化加载时间

            pageAnim: true,             // iframe窗口动画

            maxTabNum: 20,              // 最大的tab打开数量

        };

        miniAdmin.render(options);

        // 百度统计代码,只统计指定域名

        miniTongji.render({

            specific: true,

            domains: [

                '99php.cn',

                'layuimini.99php.cn',

                'layuimini-onepage.99php.cn',

            ],

        });

        $('.login-out').on("click", function () {

            layer.msg('退出登录成功', function () {

                window.location = 'page/login-3.html';

            });

        });

    });

</script>

</body>

</html>

Gitee地址:  https://gitee.com/lhj1024/springjspdemo.git

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值