Springboot2.x+ssm实例源代码(增删改查Demo)

源码地址下载:https://github.com/dxy3377/SSMDemo

一、SSMDemo

mybatis初期使用时通常需要dao层映射关联和一大堆配置文件,所以让很多开发人员觉得太过于麻烦,不利于开发。mybatis其实也发现了这个问题,所以后期进行了大量的优化,可以使用注解,自动管理dao层和配置文件。这两种方式我们在本章节中都会讲到。

1、pom.xml

本次demo使用mysql数据库,所以需要在pom文件里引入mybatis和mysql的依赖
如果看了上一章的童鞋们,要记得去掉mysql依赖的test那一行,替换成如下的版本号噢,因为test表示在运行时才会生效,所以在引入mysql包的时候会报错噢~

		<!-- mybatis start -->
		<dependency>
			<groupId>org.mybatis.spring.boot</groupId>
			<artifactId>mybatis-spring-boot-starter</artifactId>
			<version>2.1.0</version>
		</dependency>
		<!-- mybatis end -->

		<!-- mysql start -->
		<dependency>
			<groupId>mysql</groupId>
			<artifactId>mysql-connector-java</artifactId>
			<version>5.1.47</version>
		</dependency>
		<!-- mysql end -->

		<!-- thymeleaf模板 start -->
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-thymeleaf</artifactId>
		</dependency>
		<!-- thymeleaf模板 end -->

		<!-- web start -->
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-web</artifactId>
		</dependency>
		<!-- web end -->

2、application.yml

因为本次需要讲到两种mybatis的使用方法,所以我会另外再写两个配置文件专门分开来,这个application.yml为共有配置,同时也相当于一个总的控制工具,区分使用哪种mybatis的用法。
其实在公司开发中,是用来区分开发、测试、正式三个环境的~
所以大家正常开发的时候,千万不要像我这样写jpa或xml

server:
  port: 8080
spring:
  profiles:
    active: jpa或xml
  datasource:
    driver-class-name: com.mysql.jdbc.Driver
    url: jdbc:mysql://localhost:3306/ssmDemo?useUnicode=true&characterEncoding=utf-8
    username: root
    password: 123
  mvc:
    static-path-pattern: /static/**
    view:
      suffix: .html
  thymeleaf:
    cache: false
    prefix: classpath:/templates/
    suffix: .html

3、启动类

启动类添加@MapperScan来对mapper包进行扫描

@SpringBootApplication
@MapperScan("com.alpaca.mapper")
public class SsmDemoApplication {

	public static void main(String[] args) {
		SpringApplication.run(SsmDemoApplication.class, args);
	}

}

4、UserEntity.java

public class UserEntity {

    //编号
    private Integer id;

    //姓名
    private String userName;

    //优点
    private String advantage;

    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 getAdvantage() {
        return advantage;
    }

    public void setAdvantage(String advantage) {
        this.advantage = advantage;
    }

    @Override
    public String toString() {
        return "UserEntity{" +
                "id='" + id + '\'' +
                ", userName='" + userName + '\'' +
                ", advantage='" + advantage + '\'' +
                '}';
    }
}

5、application-jpa.yml(只想看xml格式的童鞋请直接翻到10、application-xml.yml,都想看的接着往下看~)

特点:耦合高。一切由注解搞定。

#mybatis配置(注解)
mybatis:
  type-aliases-package: com.aplaca.entity

6、UserMapperForJPA.java

这是是指用注解编写的噢,xml的往下翻会有的~

因为启动类有扫描这个类所在的包,所以不用再在类上加@Mapper这个注解

package com.alpaca.SSMDemo.mapper;

import com.alpaca.SSMDemo.entity.UserEntity;
import org.apache.ibatis.annotations.*;

import java.util.List;

/**
 * @Author: daixueyun
 * @Description:
 * @Date: Create in 22:08 2019/7/17
 */
public interface UserMapperForJPA {

    @Select("select * from users")
    @Results({
            @Result(property = "userName", column = "user_name"),
            @Result(property = "advantage", column = "advantage")
    })
    List<UserEntity> findAll();

    @Select("select * from users where id = #{id}")
    @Results({
            @Result(property = "userName", column = "user_name"),
            @Result(property = "advantage", column = "advantage")
    })
    UserEntity findOneById(Integer id);

    @Update("update users set user_name = #{userName},advantage = #{advantage} where id = #{id}")
    int updateUser(UserEntity userEntity);

    @Insert("insert into users(user_name, advantage) values(#{userName}, #{advantage})")
    int insertUser(UserEntity userEntity);

    @Delete("delete from users where id = #{id}")
    int deleteUser(Integer id);
}


7、ManagerController.java

由于只是demo,所以没有多少业务,就没有写sevice包,大家自己开发时还是要规范噢

package com.alpaca.SSMDemo.controller;

import com.alpaca.SSMDemo.entity.UserEntity;
import com.alpaca.SSMDemo.mapper.UserMapperForJPA;
import com.alpaca.SSMDemo.mapper.UserMapperForXML;
import com.alpaca.SSMDemo.utils.AjaxJson;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import java.util.List;

/**
 * @Author: daixueyun
 * @Description:
 * @Date: Create in 22:42 2019/7/17
 */
@Controller
@RequestMapping(value = "/managerController")
public class ManagerController {

    @Resource
    private UserMapperForJPA userMapperForJPA;

    @RequestMapping(value = "showUsers")
    public String showUsers(HttpServletRequest request){
        String page = "manager/showUsers";
        List<UserEntity> userEntityList = userMapperForJPA.findAll();
        request.setAttribute("users",userEntityList);
        return page;
    }

    @RequestMapping(value = "findOneById")
    @ResponseBody
    public AjaxJson findOneById(HttpServletRequest request){
        AjaxJson j = new AjaxJson();
        String id = request.getParameter("id");
        UserEntity user = userMapperForJPA.findOneById(Integer.parseInt(id));
        if(null != user){
            j.setSuccess(true);
            j.setObj(user);
        }else{
            j.setSuccess(false);
            j.setMsg("无数据");
        }
        return j;
    }

    @RequestMapping(value = "editUser")
    @ResponseBody
    public AjaxJson editUser(HttpServletRequest request){
        AjaxJson j = new AjaxJson();
        String flag = request.getParameter("flag");
        String userName = request.getParameter("userName");
        String advantage = request.getParameter("advantage");
        if("edit".equals(flag)){
            String id = request.getParameter("id");
            UserEntity user = userMapperForJPA.findOneById(Integer.parseInt(id));
            user.setUserName(userName);
            user.setAdvantage(advantage);
            int result = userMapperForJPA.updateUser(user);
        }else if("add".equals(flag)){
            UserEntity user = new UserEntity();
            user.setUserName(userName);
            user.setAdvantage(advantage);
            int result = userMapperForJPA.insertUser(user);
        }
        return j;
    }

    @RequestMapping(value = "deleteUser")
    @ResponseBody
    public AjaxJson deleteUser(HttpServletRequest request){
        AjaxJson j = new AjaxJson();
        String id = request.getParameter("id");
        int result = userMapperForJPA.deleteUser(Integer.parseInt(id));
        j.setSuccess(true);
        return j;
    }

}

8、AjaxJson.java

前端页面使用ajax时,写了一个返回的对象,用于存放返回给前端页面的数据

package com.alpaca.SSMDemo.utils;

import java.util.Map;

/**
 * Created by daixueyun on 2019/7/18 0018.
 */
public class AjaxJson {

    private boolean success = true;
    private String msg = "";
    private Object obj = null;
    private Map<String, Object> attributes;

    public boolean isSuccess() {
        return success;
    }

    public void setSuccess(boolean success) {
        this.success = success;
    }

    public String getMsg() {
        return msg;
    }

    public void setMsg(String msg) {
        this.msg = msg;
    }

    public Object getObj() {
        return obj;
    }

    public void setObj(Object obj) {
        this.obj = obj;
    }

    public Map<String, Object> getAttributes() {
        return attributes;
    }

    public void setAttributes(Map<String, Object> attributes) {
        this.attributes = attributes;
    }
}

到这里后台代码就写完咯,下面开始前端页面啦!!

9、showUsers.html

由于我比较懒,所以只写了一个页面,包含了增删改查。。大家见谅!!对不起!!

你以为这就完了咩??我还有更对不起你们的,因为驼也没啥美感,,所以我也没写css,也懒得找模板,这个丑丑的页面大家就将就着看看吧~
在这里插入图片描述
Thymeleaf是SpringBoot官方所推荐使用的模板语言,所以我们听大佬的话,页面上就用这个吧~~

<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
    <meta charset="UTF-8">
    <title>用户信息展示</title>
    <script th:src="@{/static/js/jquery/jquery-1.11.3.min.js}"></script>
    <script th:src="@{/static/js/manager/users.js}"></script>
</head>
<body>

<table border="2px" align="center">
    <tr>
        <td colspan="3" align="center"><input type="button" onclick="add()" value="新增"></td>
    </tr>
    <tr>
        <td>姓名</td>
        <td>优点</td>
        <td>操作</td>
    </tr>
    <tr class="trUser" th:each="u : ${users}">
        <td th:text="${u.userName}"></td>
        <td th:text="${u.advantage}"></td>
        <td><input type="button" onclick="edit(this)" value="编辑"><input type="button" onclick="del(this)" value="删除"></td>
        <td class="id" th:text="${u.id}" hidden></td>
    </tr>
</table>

<div class="editBg" style="display:none">
    <div>
        <span>编辑场次</span>
        <img class="addEditClose" th:src="@{/static/img/manager/close.png}">
    </div>
    <div>
        <form id="editForm">
            <input type="hidden" id="flag" name="flag">
            <input type="hidden" id="id" name="id">
            <div>
                <div>姓名</div>
                <input name="userName" id="userName">
            </div>
            <div>
                <div>优点</div>
                <input name="advantage" id="advantage">
            </div>
            <div>
                <div onclick="editSubmit()">提交</div>
                <div onclick="resetUser()">重置</div>
            </div>
            <input type="reset" name="reset" style="display: none;"/>
        </form>
    </div>
</div>
</body>
</html>

这个时候就能启动啦~记得要把application.yml里的修改一下

spring:
  profiles:
    active: jpa

然后启动!!!

页面运行后的页面就是酱的,很好看的表格呃。。
在这里插入图片描述

增删改查我就不操作展示了,大家可以自己写的时候试一下,源码是开头的github地址~大家可以自行下载运行噢

接下来是xml格式的mybatis了?

10、application-xml.yml(黑魔法⭐⭐自动拼接到4、UserEntity.java后面)

特点:松耦合。极简xml版本保持映射文件的老传统,优化主要体现在不需要实现dao的实现层【只需要定义接口类和方法】,系统会自动根据方法名在映射文件中找对应的sql【由namespace和名称坐标确定】。

#mybatis配置(xml)
mybatis:
  mapper-locations: classpath:mybatis/mapper/*.xml

11、UserMapperForXML.java

package com.alpaca.SSMDemo.mapper;

import com.alpaca.SSMDemo.entity.UserEntity;
import org.omg.CORBA.INTERNAL;

import java.util.List;

/**
 * Created by daixueyun on 2019/7/18 0018.
 */
public interface UserMapperForXML {

    List<UserEntity> findAll();

    UserEntity findOneById(Integer id);

    int updateUser(UserEntity userEntity);

    int insertUser(UserEntity userEntity);

    int deleteUser(Integer id);
}

12、userMapperForXML.xml

对应的映射文件

这时候听我一句劝,不要在sql语句后加分号!!!千万不要!!
在这里插入图片描述
我之前开发公司项目时,因为这个小小的分号,找问题找过1个小时!!

<?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.alpaca.SSMDemo.mapper.UserMapperForXML">
    <resultMap id="resultMap" type="com.alpaca.SSMDemo.entity.UserEntity">
        <id column="id" property="id" jdbcType="INTEGER" />
        <result column="userName" property="userName" jdbcType="VARCHAR" />
        <result column="advantage" property="advantage" jdbcType="VARCHAR" />
    </resultMap>

    <select id="findAll" resultMap="resultMap">
        select id,user_name as userName,advantage from users
    </select>

    <select id="findOneById" parameterType="java.lang.Integer" resultMap="resultMap">
        select id,user_name as userName,advantage from users where id = #{id}
    </select>
    
    <update id="updateUser" parameterType="com.alpaca.SSMDemo.entity.UserEntity">
        update users
        <set>
            user_name = #{userName},advantage = #{advantage}
        </set>
        <where>
            id = #{id}
        </where>
    </update>
    
    <insert id="insertUser" parameterType="com.alpaca.SSMDemo.entity.UserEntity" flushCache="true">
        insert into users(user_name, advantage) values(#{userName}, #{advantage})
    </insert>
    
    <delete id="deleteUser" parameterType="java.lang.Integer">
        delete from users where id = #{id}
    </delete>
</mapper>

这个时候就能启动啦~记得要把application.yml里的修改一下

spring:
  profiles:
    active: xml

ManagerController.java里的

	@Resource
    private UserMapperForJPA userMapperForJPA;

	替换为

    @Resource
    private UserMapperForXML userMapperForXML;(使用这个!!)

然后启动!!!

当然,页面并没有什么不同,依然是那么好看的表格~~哈哈哈哈哈哈哈哈哈

整个教程到这里就结束啦~大家有遇到任何问题请在评论区留言噢

在这里插入图片描述

源码地址下载:https://github.com/dxy3377/SSMDemo

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值