springboot+springmvc+mybatis整合及CRUD简单示例

整体项目结构

首先新建一可以正常启动spring boot项目

https://blog.csdn.net/qq_43560721/article/details/104653470

pom.xml配置

<?xml version="1.0" encoding="UTF-8"?>
<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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.2.5.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>cn.xxs</groupId>
    <artifactId>ssmcrud</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>war</packaging>
    <name>ssmcrud</name>
    <description>Demo project for Spring Boot</description>

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

    <dependencies>
        <!-- spring boot 启动器 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-tomcat</artifactId>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
            <exclusions>
                <exclusion>
                    <groupId>org.junit.vintage</groupId>
                    <artifactId>junit-vintage-engine</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
        <!-- mybatis启动器 -->
        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>1.3.2</version>
        </dependency>
        <!-- thymeleaf -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-thymeleaf</artifactId>
        </dependency>

        <!-- mysql数据库驱动 -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
        </dependency>

        <!-- druid数据库连接池 -->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid</artifactId>
            <version>1.1.0</version>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>

配置数据库连接信息及其他配置

application.properties或application.yml(两种任选其一即可)

application.properties



spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/ssm?serverTimezone=UTC
spring.datasource.username=root
spring.datasource.password=root

spring.datasource.type=com.alibaba.druid.pool.DruidDataSource

mybatis.type-aliases-package=cn.xxs.ssmcrud.pojo
mybatis.configuration.map-underscore-to-camel-case=true

application.yml

spring:
  datasource:
    driver-class-name: com.mysql.jdbc.Driver
    url: jdbc:mysql://localhost:3306/ssm?serverTimezone=GMT%2B8&characterEncoding=utf8
    username: root
    password: root
    type: com.alibaba.druid.pool.DruidDataSource


mybatis:
  type-aliases-package: cn.xxs.ssmcrud.pojo
  configuration.map-underscore-to-camel-case: true

创建数据库表

create table user(
	 id int primary key auto_increment,
	 name varchar(16) unique not null,
	 pwd varchar(16) not null,
	 createDate datetime
	 );
insert into user values(1,'王五',123,now());
insert into user values(2,'奥特曼',123,null);
insert into user values(4,'mary',123,null);

创建User类

package cn.xxs.ssmcrud.pojo;
import com.fasterxml.jackson.annotation.JsonFormat;
import org.springframework.format.annotation.DateTimeFormat;

import java.util.Date;


public class User {
    private Integer id;
    private String name;
    private String pwd;
    @DateTimeFormat(pattern = "yyyy-MM-dd")
    private Date createDate;
    public User() {
        super();
        // TODO Auto-generated constructor stub
    }
    public User(Integer id, String name, String pwd, Date createDate) {
        super();
        this.id = id;
        this.name = name;
        this.pwd = pwd;
        this.createDate = createDate;
    }
    public Integer getId() {
        return id;
    }
    public void setId(Integer id) {
        this.id = id;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getPwd() {
        return pwd;
    }
    public void setPwd(String pwd) {
        this.pwd = pwd;
    }

//    @JsonFormat(pattern = "yyyy-MM-dd",timezone = "GMT+8")
    public Date getCreateDate() {
        return createDate;
    }
    public void setCreateDate(Date createDate) {
        this.createDate = createDate;
    }
    @Override
    public String toString() {
        return "User [id=" + id + ", name=" + name + ", pwd=" + pwd + ", createDate=" + createDate + "]";
    }

}

创建UserMapper接口

这里有两种方式(可用映射文件,可用注解,我用的注解方式,所以这里映射文件就简单举例了)

映射文件方法

public interface UserMapper {

	/**
	 * 查询所有用户信息
	 * @return
	 */
	public List<User> selectUsers();
	
	/**
	 * 添加用户信息
	 */
	public void insertUser(User user);
}
<?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">
  
<!-- 配置表与类映射
namespace:命名空间
 -->  
<mapper namespace="com.hp.mapper.UserMapper">

  <!-- 查询所有用户信息 -->
   <select id="selectUsers" resultType="user">
    	select 
			*
			from user u 
  </select>

  <!-- 添加用户信息 -->
  <insert id="insertUser" parameterType="user">
  		insert into 
  		user(name,pwd,createDate)
  		values(#{name},#{pwd},#{createDate})
  </insert>
  
</mapper>

注解方式

package cn.xxs.ssmcrud.mapper;
import java.util.List;

import cn.xxs.ssmcrud.pojo.User;
import org.apache.ibatis.annotations.Delete;
import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.Select;
import org.apache.ibatis.annotations.Update;

public interface UserMapper {
    /**
     * 查询所有用户信息
     * @return
     */
    @Select("select * from user")
    public List<User> selectUsers();

    /**
     * 添加用户信息
     */
    @Insert("insert into user(name,pwd,createDate)values(#{name},#{pwd},#{createDate})")
    public void insertUser(User user);

    /**
     * 查询用户信息
     * @return
     */
    @Select("select * from user where id=#{id}")
    public User selectUserByUserId(Integer id);

    /**
     * 更新用户信息
     */
    @Update("update user set name = #{name},pwd = #{pwd} where id = #{id}")
    public void updateUser(User user);

    /**
     * 根据id删除用户信息
     */
    @Delete("delete from user where id=#{id}")
    public void deleteUserByUserId(Integer id);
}

创建service层接口

package cn.xxs.ssmcrud.service;

import cn.xxs.ssmcrud.pojo.User;

import java.util.List;

public interface UserService{
	/**
	 * 查询所有用户信息
	 * @return
	 */
	public List<User> selectUsers();

	/**
	 * 添加用户信息
	 */
	public void insertUser(User user);

	/**
	 * 查询用户信息
	 * @return
	 */
	public User selectUserByUserId(Integer id);

	/**
	 * 更新用户信息
	 */
	public void updateUser(User user);

	/**
	 * 根据Id删除用户信息
	 */
	public void deleteUserById(Integer id);
}

创建service层接口的实现类

package cn.xxs.ssmcrud.service.impl;
import java.util.List;

import javax.annotation.Resource;

import cn.xxs.ssmcrud.mapper.UserMapper;
import cn.xxs.ssmcrud.pojo.User;
import cn.xxs.ssmcrud.service.UserService;
import org.springframework.stereotype.Service;

@Service
public class UserServiceImpl implements UserService {

    @Resource
    private UserMapper userMapper;

    /**
     * 查询所有用户信息
     * @return
     */
    public List<User> selectUsers(){

        return userMapper.selectUsers();
    }

    /**
     * 添加用户信息
     */
    public void insertUser(User user) {

        userMapper.insertUser(user);
    }


    /**
     * 查询用户信息
     * @return
     */
    public User selectUserByUserId(Integer id) {

        return userMapper.selectUserByUserId(id);
    }

    /**
     * 更新用户信息
     */
    public void updateUser(User user) {
        userMapper.updateUser(user);
    }

    @Override
    public void deleteUserById(Integer id) {
        userMapper.deleteUserByUserId(id);
    }
}

创建UserController类

package cn.xxs.ssmcrud.controller;
import java.util.List;

import javax.annotation.Resource;

import cn.xxs.ssmcrud.pojo.User;
import cn.xxs.ssmcrud.service.UserService;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

@Controller
@RequestMapping("")
public class UserController{

    @Resource
    private UserService userService;

    /**
     * 进入首首页
     */
    @RequestMapping(value="index")
    public String index() {
        return "index";
    }

    /**
     * 查询所有用户信息
     */
    @RequestMapping(value="userInfo")
    public String userInfo(ModelMap map) {

        List<User> userList = userService.selectUsers();
        map.put("userList", userList);

        return "userInfo";
    }
    /**
     * 进入新增页面
     * @param map
     * @return
     */
    @RequestMapping(value="userEdit")
    public String userEdit(Integer id,ModelMap map) {

        if(id!=null) {
            //根据id查询用户信息
            User user = userService.selectUserByUserId(id);
            map.put("user", user);
            map.put("id", id);
        }else {
            map.put("user", new User());
        }

        return "userEdit";
    }

    /**
     * 保存和更新用户信息
     */
    @RequestMapping(value="addUser")
    public String addUser(Integer id,User user,ModelMap map) {
        if(id!=null) {
            userService.updateUser(user);
        }else {
            userService.insertUser(user);
        }
        return "redirect:userInfo";
    }
    /**
     * 删除用户信息
     */
    @RequestMapping(value="userDelete")
    public String userDelete(Integer id) {

        userService.deleteUserById(id);

        return "redirect:userInfo";
    }
    /**
     * 测试ajax
     * @return
     */
    @RequestMapping("test")
    @ResponseBody
    public String testAjax() {
        int i = 1;
        if (i == 1) {
            return "success";
        } else {
            return "error";
        }
    }
}

创建新增用户和修改用户信息页面UserEdit.html

<!DOCTYPE html>
<html  xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>新增用户</title>
<script type="text/javascript" src="/jquery-3.3.1.min.js"></script>
<script type="text/javascript">
	$(function(){
		var id = $('#id').val();
		if(id!=""){
			$('#createDate').attr("readonly","readonly");
		}
	})
</script>
</head>
<body>
	<form th:action="@{/addUser}" method="post">
		用户姓名:<input type="text" name="name" th:value="${user.name}" /><br>
		用户密码:<input type="text" name="pwd" th:value="${user.pwd}" /><br>
		创建日期:<input type="date" id="createDate" name="createDate" th:value="${#dates.format(user.createDate,'yyyy-MM-dd')}" /><br>
		<input type="submit" value="保存" /><br>
		<input type="hidden" id="id" name="id" th:value="${id}" />
	</form>
</body>
</html>

创建显示列表页面userInfo.html

<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<a th:href="@{/userEdit}">新增用户</a>	
<table border="1" align="center" width="50%">
	<thead>
		<tr>
			<th>用户编号</th>
			<th>用户姓名</th>
			<th>用户密码</th>			
			<th>创建日期</th>
			<th>操作</th>
		</tr>
	</thead>
	<tbody>
		<tr th:each="user: ${userList}">
			<td th:text=${user.id}></td>
			<td th:text=${user.name}></td>
			<td th:text=${user.pwd}></td>
			<td th:text="${#dates.format(user.createDate,'yyyy-MM-dd')}"></td>
			<td><a th:href="@{/userEdit(id=${user.id})}">更新</a><a th:href="@{/userDelete(id=${user.id})}">删除</a></td>
		</tr> 
	</tbody>
</table>
</body>
</html>

创建首页index.html(这里包含了一个ajax异步校验)

<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>主页</title>
<script type="text/javascript" src="/jquery-3.3.1.min.js"></script>
</head>
<body>	
	<a th:href="@{/userInfo}">用户列表</a>	<br>
	<a style="cursor: pointer;" onclick="TestAjax()">测试ajax</a>
	<script type="text/javascript">
		function TestAjax() {
			$.ajax({
				url : "test",
				type : "post",
				dataType : "text",
				success : function(data) {
					if (data == "success") {
						alert("测试成功!");
					} else {
						alert("测试失败!");
					}
				},
				error : function() {
					alert("ajax失败!");
				}
			})
		}
	</script>
</body>
</html>

编辑启动类

package cn.xxs.ssmcrud;

import ch.qos.logback.core.pattern.Converter;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.Bean;

import java.text.SimpleDateFormat;
import java.util.Date;

@SpringBootApplication
@MapperScan(basePackages = {"cn.xxs.ssmcrud.mapper"})
public class SsmcrudApplication {

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


}

运行项目启动类

浏览器输入http://localhost:8080/index

先来测试一下ajax能不能正常访问

点击“测试ajax”弹框提醒测试成功

接下来我们测试crud

点击“用户列表”

点击“删除”

 

 

在数据库确认

点击“新增用户”并输入添加的内容

点击“保存”

刷新数据库

点击“更新”

点击"保存"

 

刷新数据库

 

 

 

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章