SpringBoot开发四-MyBatis入门
需求介绍-MyBatis入门
首先就是安装Mysql Server
和Mysql Workbench
。
SqlSessionFactory
:用于创建SqlSession
的工厂类
SqlSession
:MyBatis
的核心组件用于向数据库执行SQL
XML
文件:对MyBatis
底层做一些配置。
Mapper
接口:也就是DAO
接口,常称为Mapper
Mapper
映射器:用于编写SQL
,并且将SQL
和实体类映射的组件采用XML
,注解都可以实现。
编写一些操作用户数据的代码。
代码
首先要引用MyBatis
和Mysql
的依赖,在pom.xml
文件里。
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.16</version>
</dependency>
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.0.1</version>
</dependency>
然后配置一下Mysql
:
# DataSourceProperties
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/community?characterEncoding=utf-8&useSSL=false&serverTimezone=Hongkong
spring.datasource.username=root
spring.datasource.password=****
# 数据库连接池
spring.datasource.type=com.zaxxer.hikari.HikariDataSource
spring.datasource.hikari.maximum-pool-size=15
#最小空闲连接
spring.datasource.hikari.minimum-idle=5
spring.datasource.hikari.idle-timeout=30000 # MybatisProperties
# mapper目录下
mybatis.mapper-locations=classpath:mapper/*.xml
# 实体类包名
mybatis.type-aliases-package=com.nowcoder.community.entity
mybatis.configuration.useGeneratedKeys=true
# 使得eg:header_url 和 headerUrl 形式匹配
mybatis.configuration.mapUnderscoreToCamelCase=true
对User
表进行数据处理,首先要写个实体类对应表,封装表里面的数据,方便我们去处理,写在entity
下面:
User
:
package com.nowcoder.community.entity; import java.util.Date; public class User {
private int id;
private String username;
private String password;
private String salt;
private String email;
private int type;
private int status;
private String activationCode;
private String headerUrl;
private Date createTime; public void setId(int id) {
this.id = id;
} public void setUsername(String username) {
this.username = username;
} public void setPassword(String password) {
this.password = password;
} public void setSalt(String salt) {
this.salt = salt;
} public void setEmail(String email) {
this.email = email;
} public void setType(int type) {
this.type = type;
} public void setStatus(int status) {
this.status = status;
} public void setActivationCode(String activationCode) {
this.activationCode = activationCode;
} public void setHeaderUrl(String headerUrl) {
this.headerUrl = headerUrl;
} public void setCreateTime(Date createTime) {
this.createTime = createTime;
} public int getId() {
return id;
} public String getUsername() {
return username;
} public String getPassword() {
return password;
} public String getSalt() {
return salt;
} public String getEmail() {
return email;
} public int getType() {
return type;
} public int getStatus() {
return status;
} public String getActivationCode() {
return activationCode;
} public String getHeaderUrl() {
return headerUrl;
} public Date getCreateTime() {
return createTime;
} @Override
public String toString() {
return "User{" +
"id=" + id +
", username='" + username + '\'' +
", password='" + password + '\'' +
", salt='" + salt + '\'' +
", email='" + email + '\'' +
", type=" + type +
", status=" + status +
", activationCode='" + activationCode + '\'' +
", headerUrl='" + headerUrl + '\'' +
", createTime=" + createTime +
'}';
}
}
然后再DAO层写一个接口(组件),写一些操作数据的方法的声明
package com.nowcoder.community.dao; import com.nowcoder.community.entity.User;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param; @Mapper
public interface UserMapper { User selectById(int id); User selectByName(String username); User selectByEmail(String email); int insertUser(User user);
int updateStatus(@Param("id") int id, @Param("status") int status);
int updateHeader(@Param("id") int id, @Param("headerUrl") String headerUrl);
int updatePassword(@Param("id") int id, @Param("password") String password);
}
然后我们就需要去写具体实现数据操作的xml
文件了,就去mapper
文件夹下面写,
首先你要在<mapper>
里面写你写的这个是为哪个Mapper
服务的,具体实现的时候就是写sql
语句,你需要写id
对应着你接口写的那个方法,才能够真正的去实现接口声明的方法才可以。
有个问题就是在接口声明方法的时候是有参数的嘛,你要确定这个是个什么参数,如果是java
自带的参数类型就不用去管它,但是如果是复杂的参数比方说是个bean
就需要声明另一个参数,具体见insertUser
实现的那块,如果有对应到数据表的列名是数据库自己生成的话就不需要传进去需要另外取一个参数。
<?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.nowcoder.community.dao.UserMapper"> <sql id="insertFields">
username, password, salt, email, type, status, activation_code, header_url, create_time
</sql> <sql id="selectFields">
id, username, password, salt, email, type, status, activation_code, header_url, create_time
</sql> <select id="selectById" resultType="User">
select <include refid="selectFields"></include>
from user
where id = #{id}
</select> <select id="selectByName" resultType="User">
select <include refid="selectFields"></include>
from user
where username = #{username}
</select> <select id="selectByEmail" resultType="User">
select <include refid="selectFields"></include>
from user
where email = #{email}
</select> <insert id="insertUser" parameterType="User" keyProperty="id">
insert into user (<include refid="insertFields"></include>)
values(#{username}, #{password}, #{salt}, #{email}, #{type}, #{status}, #{activationCode}, #{headerUrl}, #{createTime})
</insert> <update id="updateStatus">
update user set status = #{status} where id = #{id}
</update> <update id="updateHeader">
update user set header_url = #{headerUrl} where id = #{id}
</update> <update id="updatePassword">
update user set password = #{password} where id = #{id}
</update> </mapper>
然后写一个测试方法,看我们写的对不对,就去测试类里面实现:
MapperTest
:
package com.nowcoder.community; import com.nowcoder.community.dao.UserMapper;
import com.nowcoder.community.entity.User;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringRunner; import java.util.Date; @RunWith(SpringRunner.class)
@SpringBootTest
@ContextConfiguration(classes = CommunityApplication.class)
public class MapperTests { @Autowired
private UserMapper userMapper; @Test
public void testSelectUser() {
User user = userMapper.selectById(101);
System.out.println(user); user = userMapper.selectByName("liubei");
System.out.println(user); user = userMapper.selectByEmail("nowcoder101@sina.com");
System.out.println(user);
} @Test
public void testInsertUser() {
User user = new User();
user.setUsername("test");
user.setPassword("123456");
user.setSalt("abc");
user.setEmail("test@qq.com");
user.setHeaderUrl("http://www.nowcoder.com/101.png");
user.setCreateTime(new Date()); int rows = userMapper.insertUser(user);
System.out.println(rows);
System.out.println(user.getId());
} @Test
public void updateUser() {
int rows = userMapper.updateStatus(150, 1);
System.out.println(rows); rows = userMapper.updateHeader(150, "http://www.nowcoder.com/102.png");
System.out.println(rows); rows = userMapper.updatePassword(150, "hello");
System.out.println(rows);
} }
SpringBoot开发四-MyBatis入门的更多相关文章
- 【转载】 mybatis入门系列四之动态SQL
mybatis 详解(五)------动态SQL 目录 1.动态SQL:if 语句 2.动态SQL:if+where 语句 3.动态SQL:if+set 语句 4.动态SQL:choose(when, ...
- 在springboot中集成mybatis开发
在springboot中利用mybatis框架进行开发需要集成mybatis才能进行开发,那么如何在springboot中集成mybatis呢?按照以下几个步骤就可以实现springboot集成myb ...
- mybatis入门基础(二)----原始dao的开发和mapper代理开发
承接上一篇 mybatis入门基础(一) 看过上一篇的朋友,肯定可以看出,里面的MybatisService中存在大量的重复代码,看起来不是很清楚,但第一次那样写,是为了解mybatis的执行步骤,先 ...
- SpringBoot(四)thymeleaf+MyBatis+MySql
接着上一节 1.第一步:在pom文件中添加 <!-- MyBatis --> <dependency> <groupId>org.mybatis.spring.bo ...
- mybatis入门(四)
mybatis入门 需求:根据id查询用户的信息 mysql数据库: CREATE TABLE `user` ( `id` int(11) NOT NULL AUTO_INCREMENT, `us ...
- SpringBoot开发快速入门
SpringBoot开发快速入门 目录 一.Spring Boot 入门 1.Spring Boot 简介 2.微服务 3.环境准备 1.maven设置: 2.IDEA设置 4.Spring Boot ...
- SpringBoot开发二十-Redis入门以及Spring整合Redis
安装 Redis,熟悉 Redis 的命令以及整合Redis,在Spring 中使用Redis. 代码实现 Redis 内置了 16 个库,索引是 0-15 ,默认选择第 0 个 Redis 的常用命 ...
- SpringBoot系列四:SpringBoot开发(改变环境属性、读取资源文件、Bean 配置、模版渲染、profile 配置)
声明:本文来源于MLDN培训视频的课堂笔记,写在这里只是为了方便查阅. 1.概念 SpringBoot 开发深入 2.具体内容 在之前已经基本上了解了整个 SpringBoot 运行机制,但是也需要清 ...
- Springboot 完整搭建快速入门,必看!
前言 手把手教你Springboot微服务项目搭建快速入门,通过本文学习Springboot的搭建快速入门,掌握微服务大致的配置服务,后续将会继续将核心组件引入到项目中,欢迎关注,点赞,转发. Spr ...
随机推荐
- JavaScript编写计算器的发展史
JavaScript编写计算器的发展史: 编写一个普通的四则运算: <!DOCTYPE html> <html lang="en"> <head> ...
- 【转载】CentOS-Docker安装MongoDB(单点)
下载镜像 $ docker pull mongo 创建相关目录 $ mkdir -p /usr/mongo/data /usr/mongo/dump 运行镜像 $ docker run --resta ...
- XCTF(MISC) give_you_flag
题目描述:菜狗找到了文件中的彩蛋很开心,给菜猫发了个表情包 1.下载附件,点击查看 发现在数完钱后,有出现一个二维码的东西. 2.使用stegsolv工具,进行逐帧查看. 说个题外话,stegsolv ...
- Python之一行代码将网址URL转换成动态彩色二维码
先在 pycharm 安装 myqr.或者,Python3 必装,然后命令行 pip install myqr 也可. 将我的微信公众号网址:http://weixin.qq.com/r/hRMQC ...
- 【LeetCode】54. 螺旋矩阵
54. 螺旋矩阵 知识点:数组: 题目描述 给你一个 m 行 n 列的矩阵 matrix ,请按照 顺时针螺旋顺序 ,返回矩阵中的所有元素. 示例 输入:matrix = [[1,2,3],[4,5, ...
- ES6 Class类
在ES6中,class (类)作为对象的模板被引入,可以通过 class 关键字定义类.class 的本质是 function.它可以看作一个语法糖,让对象原型的写法更加清晰.更像面向对象编程的语法类 ...
- 记一次 .NET 某云采购平台API 挂死分析
一:背景 1. 讲故事 大概有两个月没写博客了,关注我的朋友应该知道我最近都把精力花在了星球,这两个月时间也陆陆续续的有朋友求助如何分析dump,有些朋友太客气了,给了大大的红包,哈哈,手里面也攒了1 ...
- spring第三章
第三章 实现AOP AOP:面向方面编程,AOP能够使您将所有模块共有的特性与应用程序的主要业务逻辑隔离开 一.AOP介绍 横切关注点:在Web应用程序中,有一些服务(如登录.安全和事务管理)不是应用 ...
- (opencv5)轮廓检测函数
(opencv5)轮廓检测函数 contours, hierarchy = cv2.findContours(img, mode, method,[offset) 注意 : 1.输入为二值图像,黑色为 ...
- HashSet 的实现原理
HashSet 概述 对于 HashSet 而言,它是基于 HashMap 实现的,底层采用 HashMap 来保存元素,所以如果对 HashMap 比较熟悉了,那么学习 HashSet 也是很轻松的 ...