软件框架教学视频下载地址:https://download.csdn.net/download/m0_51152186/83609056
完成以下功能
登录
添加用户
用户列表
修改用户
删除用户
Eclipse-springboot-01-App.java-http://localhost:8080.login.jsp
Navicat-springboot库-userinfo表
1 springboot整合mybatis
1) 引入相关依赖
<!-- 引入mybatis相关的启动器 -->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>1.3.2</version>
</dependency>
<!-- 引入mysql相关的驱动 如果不加版本说明,它引的是 8.0.21-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<!-- 如果用的是mysql5,可以用下面的版本
<version>5.1.34</version>
-->
</dependency>
注意,如果本地安装的mysql是5,则要指明版本
<!-- 数据库连接池 -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.0.18</version>
</dependency>
2) 配置 application.properties
spring.datasource.username=root
spring.datasource.password=root
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/springboot?characterEncoding=utf8&serverTimezone=UTC&useSSL=false
//如果用的是mysql5 则上面的两条配置要写成//
//spring.datasource.driver-class-name=com.mysql.jdbc.Driver
//spring.datasource.url=jdbc:mysql://localhost:3306/springboot?characterEncoding=utf8
//指明数据源类型
spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
//批量别名定义
mybatis.type-aliases-package=com.beans
3) UserMapper 接口
package com.dao;
import java.util.List;
import com.beans.UserInfo;
public interface UserMapper {
//添加用户
int addUser(UserInfo user);
//删除用户
int deleteUser(int id);
//修改用户
int updateUser(UserInfo user);
//根据id查询用户
UserInfo getUserById(int id);
//查询所有用户
List<UserInfo> getAllUser();
//登录
UserInfo login(@Param("userName") String userName, @Param("password") String password);
}
4) 映射文件 UserMapper.xml 可以放在和接口同一个包下
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.mapper.UserMapper">
<insert id="addUser" parameterType="UserInfo">
insert into userInfo(userName,password,note) values (#{userName},#{password},#{note})
</insert>
<delete id="deleteUser" >
delete from userInfo where id= #{id}
</delete>
<update id="updateUser">
update userInfo set userName=#{userName},password=#{password},note= #{note} where id =#{id}
</update>
<select id="getUserById" resultType="UserInfo">
select * from userInfo where id=#{id}
</select>
<select id="getAllUser" resultType="UserInfo">
select * from userInfo
</select>
<select id="login" resultType="UserInfo" >
select * from userInfo where userName=#{userName} and password=#{password}
</select>
</mapper>
5) 新建业务层接口 com.service.UserService
package com.service;
import java.util.List;
import com.beans.UserInfo;
public interface UserService {
//添加用户
int addUser(UserInfo user);
//删除用户
int deleteUser(int id);
//修改用户
int updateUser(UserInfo user);
//根据id查询用户
UserInfo getUserById(int id);
//查询所有用户
List<UserInfo> getAllUser();
//登录
UserInfo login( String userName,String password);
}
6) 新建业务层的实现类 com.service.UserServiceImpl
package com.service;
import java.util.List;
import javax.annotation.Resource;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import com.beans.UserInfo;
import com.mapper.UserMapper;
//业务层实现类
@Service @Transactional
public class UserServiceImpl implements UserService{
@Resource
private UserMapper userMapper;
public int addUser(UserInfo user) {
return userMapper.addUser(user);
}
public int deleteUser(int id) {
return userMapper.deleteUser(id);
}
public int updateUser(UserInfo user) {
return userMapper.updateUser(user);
}
public UserInfo getUserById(int id) {
return userMapper.getUserById(id);
}
public List<UserInfo> getAllUser() {
return userMapper.getAllUser();
}
public UserInfo login(String userName, String password) {
return userMapper.login(userName, password);
}
}
说明 @Transactional 注解的作用,是开启事务管理
7) 控制层中的登录和查询所有
package com.controller;
import java.util.List;
import javax.annotation.Resource;
import org.springframework.stereotype.Controller;
import org.springframework.ui.*;
import org.springframework.web.bind.annotation.*;
import com.beans.UserInfo;
import com.service.UserService;
@Controller
public class UserController {
@Resource
private UserService userService;
@PostMapping("/login")
public String login(String userName,String password,ModelMap m) {
UserInfo user= userService.login(userName, password);
if(user!=null) {
return "main"; // 物理 视图= 前缀 + 逻辑视图 +后缀 ==> /WEB-INF/pages/main.jsp
}
else {
m.put("msg","账号或密码错误,登录失败");
return "forward:/login.jsp";
}
}
@GetMapping("/searchAll")
public String getAll(Model m) {
List<UserInfo> userList= userService.getAllUser();
m.addAttribute("userList", userList);
return "user-manager";
}
}
8) 在主启动上加 @MapperScan("com.mapper") 指明到哪里加载映射文件
@SpringBootApplication
@MapperScan("com.mapper")
public class App {
public static void main(String[] args) {
SpringApplication.run(App.class, args);
}
}
注意,要给UserInfo类加一个默认的无参的构造方法
2 用户添加功能
1) 在 main.jsp 上
<ul>
<li><a href="/searchAll"> 查询所有</a></li>
<li><a href="/gotoAddUser"> 添加用户 </a></li>
<li><a> 退出系统 </a></li>
</ul>
说明:
由于添加用户的页面user-add.jsp,也放在 WEB-INF/pages/ 下,
所以不能从客户端直接转向,要从服务端 "绕行"
2) 控制层
@GetMapping("/gotoAddUser")
public String gotoAddUser() {
return "user-add";
}
3) 在 WEB-INF/pages/ 建 user-add.jsp
<h1>用户添加</h1>
<hr />
<form action="/userAdd" method="post">
账号: <input name="userName" > <br />
密码: <input name="password" > <br />
备注: <textarea name="note"></textarea> <br />
<input type="submit" value="提交" οnclick='return confirm("确认提交吗")'>
</form>
${msg }
4) 控制层
@PostMapping("/userAdd")
public String add(UserInfo user,ModelMap m) {
userService.addUser(user);
m.put("msg","用户添加成功");
return "user-add";
}
3 数据回显
页面上 用 ${param.属性名} 的方式处理
<form action="/userAdd" method="post">
账号: <input name="userName" value="${param.userName }" > <br />
密码: <input name="password" value="${param.password }" > <br />
备注: <textarea name="note" >${param.note}</textarea> <br />
<input type="submit" value="提交" οnclick='return confirm("确认提交吗")'>
</form>
请求参数: 请求发起的时候带上去的数据,比如表单中的数据,超链接url后面的参数等 ,这些数据是在请求发起的时候就提交上去的,不能半途再增加
作用域数据:
在服务端,手动的往这个请求中添加了的数据 比如 request.setAttribute("msg","成功"), 它是在服务端进行的,可以添加多个
无论是请求参数,还是作用域数据,只要请求不断,在 "终点" 上都可以取出来
取请求数据用 ${param.字段名} 比如 ${param.userName}
取作用域数据 ${字段名} 比如 ${msg} , ${userInfo.userName}
4 用户修改功能
1)发起请求 在 WEB-INF/pages/user-manger.jsp 上
<c:forEach var="u" items="${userList }">
<tr>
<td>${u.id }</td>
<td>${u.userName }</td>
<td>${u.password }</td>
<td>${u.note }</td>
<td>
<a href="/searchForUpdate?id=${u.id }" >修改</a> | <a href="" >删除</a>
</td>
</tr>
</c:forEach>
2) 控制层
@GetMapping("/searchForUpdate")
public String searchForUpdate(int id,ModelMap m) {
UserInfo userInfo=userService.getUserById(id);
m.put("userInfo",userInfo);
return "user-update";
}
3) WEB-INF/pages/user-update.jsp
<h1>用户修改</h1>
<hr />
<form action="/update" method="post">
<input name="id" type="hidden" value="${userInfo.id }" >
账号: <input name="userName" value="${userInfo.userName }" > <br />
密码: <input name="password" value="${userInfo.password }" > <br />
备注: <textarea name="note" >${userInfo.note}</textarea> <br />
<input type="submit" value="提交" οnclick='return confirm("确认提交吗")'>
</form>
${msg }
4) 提交以后,到控制层
@PostMapping("/update")
public String update(UserInfo user,ModelMap m) {
userService.updateUser(user);
m.put("msg","用户更新成功");
return "user-update";
}
5 删除功能
1) 发起请求 WEB-INF/pages/user-manager.jsp
<c:forEach var="u" items="${userList }">
<tr>
<td>${u.id }</td>
<td>${u.userName }</td>
<td>${u.password }</td>
<td>${u.note }</td>
<td>
<a href="/searchForUpdate?id=${u.id }" >修改</a> | <a href="/delete?id=${u.id }" >删除</a>
</td>
</tr>
</c:forEach>
2) 控制层
@GetMapping("/delete")
public String deleteUser(int id,Model m){
userService.deleteUser(id);
return getAll(m);
}