前言:
1、(SprigBoot整合SpringMVC+Mybatis)
2、以thymeleaf作为视图层技术整合
3、springboot版本2.0.5.RELEASE
创建项目
1、添加依赖及启动器
<dependencies><!--springboot web 启动器--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><!--thymeleaf 启动器--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-thymeleaf</artifactId></dependency><!-- <!– Oracle数据库驱动 –><dependency><groupId>com.oracle</groupId><artifactId>ojdbc6</artifactId><version>11.2.0.3</version></dependency>--><!--Mybatis 依赖--><dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId><version>1.3.2</version></dependency><!-- mysql 数据库驱动--><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><scope>runtime</scope></dependency><!-- 单元测试--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId></dependency></dependencies><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin><!-- mybatis generator 自动生成代码插件 --><plugin><groupId>org.mybatis.generator</groupId><artifactId>mybatis-generator-maven-plugin</artifactId><version>1.3.2</version><configuration><configurationFile>${basedir}/src/main/resources/generator/generatorConfig.xml</configurationFile><overwrite>true</overwrite><verbose>true</verbose></configuration></plugin></plugins></build>
2、添加application.yml全局配置文件
#服务器端口
server:port: 8082
#mybatis mapper映射文件和扫描实体类配置文件 位置
mybatis:config-location: classpath:/mybatis/config/mybatis-config.xmlmapper-locations: classpath:/mybatis/mapper/*.xml
#mysql数据库驱动 url username password
spring:datasource:driver-class-name: com.mysql.jdbc.Driverurl: jdbc:mysql://127.0.0.1:3306/test?useUnicode=true&characterEncoding=utf8&useSSL=trueusername: rootpassword: root
mybatis-config.xml:mybatis配置文件
存放此文件位置:src/main/resource/mybatis/config
如果,没有创建即可!!!
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configurationPUBLIC "-//mybatis.org//DTD Config 3.0//EN""http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration><settings><setting name="mapUnderscoreToCamelCase" value="true"/></settings><typeAliases><package name="com.gblfy.entity"/></typeAliases>
</configuration>
3、数据库表设计 创建数据库test,新建user表
CREATE TABLE `user` (`id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键',`age` int(11) DEFAULT NULL COMMENT '年龄',`password` varchar(32) COLLATE utf8_bin DEFAULT NULL COMMENT '密码',`sex` int(11) DEFAULT NULL COMMENT '性别',`username` varchar(32) COLLATE utf8_bin DEFAULT NULL COMMENT '用户名',PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
一、添加用户
需求实现流程:
- 1、用户在页面上输入用户信息
- 2、点击确认按钮,保存用户数据
前端用户信息输入页面->>>确认按钮(提交action跳转相应操作成功/失败页面)
- 2.1 新建包
在src/main/java目录下建包:
com.gblfy.controller :存放前端控制器
com.gblfy.entity :实体类
com.gblfy.repository:mapper接口
com.gblfy.service:服务接口
com.gblfy.service.impl:服务实现类
在src/main/resources目录下dir(目录):
创建以下几个目录:
mybatis/mapper:存放mapper接口的映射文件
mybatis/config:存放mybatis的配置文件(扫描实体类)
- 2.2 创建实体类User:
为了清楚观看数据,已重写toString方法
@Data
public class User implements Serializable {private Integer id;private Integer age;private String password;private Integer sex;private String username;private static final long serialVersionUID = 1L;
}
2.2 创建mapper接口及mapper映射文件
public interface UserMapper {int insert(User record);
}
2.2.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.gblfy.repository.UserMapper" ><resultMap id="BaseResultMap" type="com.gblfy.entity.User" ><id column="id" property="id" jdbcType="INTEGER" /><result column="age" property="age" jdbcType="INTEGER" /><result column="password" property="password" jdbcType="VARCHAR" /><result column="sex" property="sex" jdbcType="INTEGER" /><result column="username" property="username" jdbcType="VARCHAR" /></resultMap><sql id="Base_Column_List" >id, age, password, sex, username</sql>
</mapper>
2.2.2 添加用户部分
<insert id="insert" parameterType="com.gblfy.springboot.chapter2.entity.User" >insert into user (id, age, password, sex, username)values (#{id,jdbcType=INTEGER}, #{age,jdbcType=INTEGER}, #{password,jdbcType=VARCHAR}, #{sex,jdbcType=INTEGER}, #{username,jdbcType=VARCHAR})</insert>
2.3 创建service接口及实现类
public interface UserService {/*** 新增用户** @param record* @return*/int insert(User record);
}
实现类
@Service
@Transactional//事物
public class UserServiceImpl implements UserService {@Autowiredprivate UserMapper usersMapper;@Overridepublic int insert(User user) {return usersMapper.insert(user);}
}
2.4 新建controller
方法showPage:用于做页面跳转
这样就可以访问templates目录下的静态Html文件
templates:默认是安全的、外界无访问权限
/*** @author gblfy* @ClassNme UsersController* @Description 用户在页面上,添加数据,后台保存,视图技术采用thymeleaf* @Date 2019/2/22 18:35* @version1.0*/
@Controller//页面跳转不用@ResponseBody 只处理返回数据json
@RequestMapping("/user")
public class UserController {@Autowiredprivate UserService userService;/*** 跳转页面** @param page* @return*/@RequestMapping("/{page}")public String showPage(@PathVariable String page) {return page;}/*** 添加用户** @param user* @return*/@RequestMapping("/addUser")public String save(User user) {userService.insert(user);return "ok";}
}
- 2.5 页面
前端信息输入页面:
此页面通过前端控制层方法showPage跳转
,因此,此页面输入url就可以直接在浏览器上访问
在resources/templates目录下面创建input.html:
<!DOCTYPE html SYSTEM "http://www.thymeleaf.org/dtd/xhtml1-strict-thymeleaf-spring4-4.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"xmlns:th="http://www.thymeleaf.org">
<head><meta charset="UTF-8"><title>Thymeleaf-用户添加数据页面</title>
</head>
<body><form th:action="@{/user/addUser}" method="post">姓名:<input type="text" name="username"/><br/>口令:<input type="text" name="password"/><br/>年龄:<input type="text" name="age"/><br/>性别:<input type="text" name="sex"/><br/><input type="submit" value="确认"/><br/></form>
</body>
</html>
链接:http://localhost:8082/user/input
效果图:
点击页面中的确认按钮即可跳转到url 和/user/addUser绑定的对应方法上,
触发这个方法之后,通过调用userService接口中的insert方法把user信息对象当做参数传到业务处理层
在业务处理层,通过调用mapper接口,mapper接口和mapper映射文件,与数据库进行交互
操作成功页面:
如果点击确认插入数据库用户数据成功,就会跳转操作成功页面
在resources/templates目录下面创建ok.html:
<!DOCTYPE html SYSTEM "http://www.thymeleaf.org/dtd/xhtml1-strict-thymeleaf-spring4-4.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"xmlns:th="http://www.thymeleaf.org">
<head><meta charset="UTF-8"><title>操作提示页面</title>
</head>
<body>操作成功!!!
</body>
</html>
二、查询所用用户信息
2.1 mapper映射文件:
<select id="selectAll" resultMap="BaseResultMap" >select<include refid="Base_Column_List"/>from user
</select>
2.2 mapper接口
public interface UserMapper {/*** 查询所有用户信息** @return*/List<User> selectAll();
}
2.3 服务接口
public interface UserService {/*** 查询所有用户信息* @return*/List<User> selectAll();
}
2.4 服务实现类
@Service
@Transactional//事物
public class UserServiceImpl implements UserService {@Autowiredprivate UserMapper usersMapper;
@Override
public List<User> selectAll() {return usersMapper.selectAll();}
}
2.5 controller层
/*** @author gblfy* @ClassNme UsersController* @Description 用户在页面上,添加数据,后台保存,视图技术采用thymeleaf* @Date 2019/2/22 18:35* @version1.0*/
@Controller//页面跳转不用@ResponseBody 只处理返回数据json
@RequestMapping("/user")
public class UserController {@Autowiredprivate UserService userService;/*** 跳转页面** @param page* @return*/@RequestMapping("/{page}")public String showPage(@PathVariable String page) {return page;}
/*** 查询全部用户** @param model* @return*/
@RequestMapping("/findUserAll")
public String findUserAll(Model model) {List<User> list = userService.selectAll();model.addAttribute("list", list);return "showUser";}
}
当页面访问:localhost:8080/user/findUserAll时,会触发findUserAll这个方法,先去调用userService接口中的selectAll方法与持久层交互完成用户信息的查询,将查询的结果返回到控制层,通过Model将数据传到页面,进行显示。会跳转到showUser.html页面上,利用thymeleaf视图技术,将用户互信息显示。
三、通过id查询用户
3.1 mapper映射文件:
select id="selectByPrimaryKey" resultMap="BaseResultMap" parameterType="java.lang.Integer" >select <include refid="Base_Column_List" />from userwhere id = #{id,jdbcType=INTEGER}
</select>
3.2 mapper接口
User selectByPrimaryKey(Integer id);
3.3 服务接口
/*** 根据id查询** @param id* @return*/
User selectByPrimaryKey(Integer id);
3.4 服务实现类
@Override
public User selectByPrimaryKey(Integer id) {return usersMapper.selectByPrimaryKey(id);
}
3.5 控制层
/*** 通过id查询用户** @param id* @return*/
@RequestMapping("/findUserById")
public String findUserById(Integer id, Model model) {User user = userService.selectByPrimaryKey(id);model.addAttribute("user", user);return "updateUser";
}
3.6 前端显示页面:showUser.html
<!DOCTYPE html SYSTEM "http://www.thymeleaf.org/dtd/xhtml1-strict-thymeleaf-spring4-4.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"xmlns:th="http://www.thymeleaf.org">
<head><meta charset="UTF-8"><title>操作提示页面</title>
</head>
<body><table border="1" style="width: 600px"><tr><th>用户id</th><th>用户姓名</th><th>口令</th><th>年龄</th><th>性别</th><th>更新操作</th><th>删除操作</th></tr><tr th:each="user : ${list}"><td th:text="${user.id}"></td><td th:text="${user.username}"></td><td th:text="${user.password}"></td><td th:text="${user.age}"></td><td th:text="${user.sex}"></td><td><a th:href="@{/user/findUserById(id=${user.id})}">更新用户</a></td><td><a th:href="@{/user/delUser(id=${user.id})}">删除用户</a></td></tr></table>
</body>
</html>
在前端显示页面点击更新用户(任选一个),就可以吧用户id传递过去
这是一种页面跳转的方式
也可以直接在url后面修改id,进行查询,是一样的效果
四、编辑用户信息
4.1 mapper映射文件
<update id="updateByPrimaryKey" parameterType="com.gblfy.entity.User" >update userset age = #{age,jdbcType=INTEGER},password = #{password,jdbcType=VARCHAR},sex = #{sex,jdbcType=INTEGER},username = #{username,jdbcType=VARCHAR}where id = #{id,jdbcType=INTEGER}
</update>
4.2 mapper接口
User selectByPrimaryKey(Integer id);
4.3 服务接口
/*** 更新用户信息** @param record* @return*/
void updateByPrimaryKey(User record);
4.4 服务实现类
@Override
public void updateByPrimaryKey(User record) {usersMapper.updateByPrimaryKey(record);
}
4.5控制层
/*** 编辑用户信息** @param user* @return*/
@RequestMapping("/editUser")
public String findUserById(User user) {userService.updateByPrimaryKey(user);return "ok";
}
在前端页面点击更新用户操作,就会把需要更新的用户id传递过去
点击确认按钮,提交
数据库查看:
五、通过id删除用户信息
5.1 mapper映射文件:
<delete id="deleteByPrimaryKey" parameterType="java.lang.Integer" >delete from userwhere id = #{id,jdbcType=INTEGER}
</delete>
5.2 mapper接口
void deleteByPrimaryKey(Integer id);
5.3 服务接口
/*** 根据id删除** @param id* @return*/
void deleteByPrimaryKey(Integer id);
5.4 服务实现类
@Override
public void deleteByPrimaryKey(Integer id) {usersMapper.deleteByPrimaryKey(id);
}
5.5 控制层
/*** 删除用户** @param id* @return*/
@RequestMapping("/delUser")
public String findUserById(Integer id) {userService.deleteByPrimaryKey(id);return "redirect:/user/findUserAll";
}
在前端页面上点击删除用户操作,就会把需要删除的用户id传递过去,然后,根据用户id将和用户id相对应的用户信息删除,最后,重定向到删除页面,观察结果。
本文源码下载:
github地址:
https://github.com/gb-heima/Spring-Boot-Actual-Combat/tree/master/parent/spring-boot-chapter-10