第十篇:Spring Boot整合mybatis+Mysql 入门试炼02

前言:
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><!-- &lt;!&ndash; Oracle数据库驱动 &ndash;&gt;<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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/524194.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

qt获取场景的缩略图

获取场景缩略图的代码如下&#xff1a; void chunzhongForm::getRenderPaint() {QPixmap pixmap(SMALL_W,SMALL_H);pixmap.fill(Qt::transparent);QPainter painter(&pixmap);painter.setRenderHint(QPainter::Antialiasing);scene->render(&painter);pixmap.save(…

要闻君说:台积电将为iPhone生产5纳米A系列芯片?腾讯云TStack与银河麒麟完成互认证……...

关注并标星星CSDN云计算极客头条&#xff1a;速递、最新、绝对有料。这里有企业新动、这里有业界要闻&#xff0c;打起十二分精神&#xff0c;紧跟fashion你可以的&#xff01;每周三次&#xff0c;打卡即read更快、更全了解泛云圈精彩newsgo go go 【4月9日 星期二】云の声音切…

Centos出现-bash: unzip: command not found的解决办法

利用unzip命令解压缩的时候&#xff0c;出现-bash: unzip: command not found的错误 问题定位&#xff1a; unzip——命令没有找到&#xff0c;其原因肯定是没有安装unzip。 解决方案在线安装unzip &#xff1a; 执行命令&#xff1a; yum install -y unzip zip安装成功后就可…

一堆数据中将某一个值相同的数据进行分组

假如一堆数据&#xff0c;每一个数据都有一个标志位&#xff0c;按照标志位值的不同进行划分为不同的组&#xff0c;进行归类。 代码如下&#xff1a; void chunzhongForm::traverseList(winProList &dataList) {int nSize dataList.size();for(int i 0; i < nSize; …

微服务进阶避坑指南 | 技术头条

戳蓝字“CSDN云计算”关注我们哦&#xff01;技术头条&#xff1a;干货、简洁、多维全面。更多云计算精华知识尽在眼前&#xff0c;get要点、solve难题&#xff0c;统统不在话下&#xff01;来源&#xff1a;青云QingCloud 作者&#xff1a;周小四 青云QingCloud 应用及容器平台…

Launch failed - cleaning up connection

Jenkins远程连接ssh(Linux系统)失败 关键信息&#xff1a; Warning: no key algorithms provided; JENKINS-42959 disabled Warning: no key algorithms provided; JENKINS-42959 disabled SSHLauncher{host192.168.45.145, port22, credentialsId61eab5fd-5c3f-4bc7-a794-f87…

前后两组结构相同的数据进行比较,找出新增的,需要删除的,原来存在的

想象现在服务器在向客户端发送数据&#xff0c;每隔几秒发送一次数据&#xff0c;客户端需要将前后两次的数据进行对比&#xff0c;找出相对于收的数据需要将上一次的数据删除的部分&#xff0c;以及此次新增加的&#xff0c;还有原来就已经存在的数据。 代码如下&#xff1a; …

Hadoop精华问答:Hadoop框架最核心的设计是?

2006年项目成立的一开始,“Hadoop”这个单词只代表了两个组件——HDFS和MapReduce。到现在的13个年头,这个单词代表的是“核心”&#xff0c;今天我们就来看看关于Hadoop的精华问答。1Q&#xff1a;Hadoop是什么&#xff1f;A&#xff1a;Hadoop是一个由Apache基金会所开发的分…

git.exe init#timeout = 10错误:克隆远程repo'origin'时出错hudson.plugins.git

用Jenkins自动化搭建测试环境&#xff0c;Jenkins构建任务 关键异常抓取 git.exe init&#xff03;timeout 10错误&#xff1a;克隆远程repoorigin时出错hudson.plugins.git (git.exe init # timeout10 ERROR: Error cloning remote repo origin hudson.plugins.git)具体异常抓…

Qt中绘制直线

绘制多条直线&#xff0c;直接上代码&#xff1a; 绘制直线的部分 QPen pen(Qt::lightGray,1);pen.setStyle(Qt::DashDotDotLine);pen.setWidth(1);painter.setPen(pen);painter.translate(0, 0);painter.drawLines(lines);添加直线代码&#xff1a; for(int i 0; i < rowC…

阿里云镜像仓库

阿里云镜像加速器 第一步&#xff1a;进入apache-maven-3.6.1/conf/目录 cd apache-maven-3.6.1/conf/第二步&#xff1a;编辑settings.xml文件添加阿里云仓库镜像 vim settings.xml第三步&#xff1a;在文件中找到标签&#xff0c;在里面复制添加即可&#xff01; <mirro…

Docker精华问答 | 多个 Docker 容器之间共享数据怎么办?

在计算机技术日新月异的今天, Docker 在国内发展的如火如荼。特别是在一线互联网公司 Docker 的使用是十分普遍的,甚至成为了一些企业面试的加分项&#xff0c;那么今天我们继续关于Docker 的精华问答。1Q&#xff1a;容器磁盘可以限制配额么&#xff1f; A&#xff1a;对于 de…

Qt中多个动态创建的按钮同时绑定一个槽函数,判断被点击的是哪个按钮

当动态创建按钮&#xff0c;每一个创建的按钮都与同一个槽函数绑定&#xff0c;点击按钮的时候获取被点击的按钮的文本。 代码如下&#xff1a; QString getClickedBtn() {outPut<<"getClickedBtn()";QString strText " ";for(int i 0; i < m_…

ssh连接远程linux环境

ssh连接远程linux环境 格式为&#xff1a; ssh 用户名远程ip地址例如&#xff1a; ssh root192.168.182.128

要闻君说:谷歌云重磅发布两大技术平台;以后可以打飞滴了?SAP重组动荡;微软宣布 Azure Functions 支持 Java...

关注并标星星CSDN云计算极客头条&#xff1a;速递、最新、绝对有料。这里有企业新动、这里有业界要闻&#xff0c;打起十二分精神&#xff0c;紧跟fashion你可以的&#xff01;每周三次&#xff0c;打卡即read更快、更全了解泛云圈精彩newsgo go go 【4月10日 星期三】云の声音…

OpenGL ES EGL eglDestroyContext

目录 一. EGL 前言二. EGL 绘制流程简介三.eglDestroyContext 函数简介 四.eglDestroyContext 使用四.猜你喜欢 零基础 OpenGL ES 学习路线推荐 : OpenGL ES 学习目录 >> OpenGL ES 基础 零基础 OpenGL ES 学习路线推荐 : OpenGL ES 学习目录 >> OpenGL ES 特效 …

用Jenkins自动化搭建测试环境_jenkins基础搭建_入门试炼02

Jenkins基础&#xff1a; 本篇介绍Jenkins的安装、Jenkins中的常用插件的安装方法、Jenkins用户配置以及提醒邮件的配置。 接上一篇&#xff1a;使用Jenkins搭建自动化测试环境_环境准备_入门试炼01 https://blog.csdn.net/weixin_40816738/article/details/90280440 文章目录一…

关于指针释放的小领悟

当一个指针用来指向另一个地址&#xff0c;被指向的这个地址被中途释放掉之后&#xff0c;用来指向的这个指针便不能再去释放内存空间。 示例代码&#xff1a; void transViewPtr(GraphicsView *view) {m_view1 view;//直接指向 }上述代码中&#xff0c;m_view1与view指向的是…

OpenGL ES EGL eglQueryContext

目录 一. EGL 前言二. EGL 绘制流程简介三.eglQueryContext 函数简介 四.eglQueryContext 使用四.猜你喜欢 零基础 OpenGL ES 学习路线推荐 : OpenGL ES 学习目录 >> OpenGL ES 基础 零基础 OpenGL ES 学习路线推荐 : OpenGL ES 学习目录 >> OpenGL ES 特效 零基…

终于有人把5G和边缘计算的关系说清楚了 | 技术头条

戳蓝字“CSDN云计算”关注我们哦&#xff01;技术头条&#xff1a;干货、简洁、多维全面。更多云计算精华知识尽在眼前&#xff0c;get要点、solve难题&#xff0c;统统不在话下&#xff01;作者&#xff1a; pala来源&#xff1a;边缘计算社区5G三大应用场景为&#xff1a;增强…