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 ...
随机推荐
- WUSTCTF2020 funnyre
运行起来,发现啥都没反应也没输出,ida直接打开,反编译 .init函数动调了下,发现没啥用,主要核心在于main函数,直接跟进去 发现了核心逻辑,有花指令,直接去掉,发现还挺多,然后似乎不影响观看, ...
- scrapy 配置文件的详细描述
# 项目名称 BOT_NAME = 'anjvke' # 爬虫文件所在目录 SPIDER_MODULES = ['anjvke.spiders'] # 创建爬虫文件的模板,创建好的爬虫文件会放在此目录 ...
- 一文看懂HTTPS、证书机构(CA)、证书、数字签名、私钥、公钥(转)
说到https,我们就不得不说tls/ssl,那说到tls/ssl,我们就不得不说证书机构(CA).证书.数字签名.私钥.公钥.对称加密.非对称加密.这些到底有什么用呢,正所谓存在即合理,这篇文章我就 ...
- F5节点分配查看
查看F5将服务分配到那个节点上了. 第一步: ssh登陆信息和密码 用户名:root 密码:123@.com 第二步: 查看客户端的那个设备连接到F5之后被分配到那个节点上的语句 ssh name: ...
- java基础---数组的查找算法(2)
一.查找的基本概念 查找分为有序查找和无序查找,这里均以数组为对象,有序查找指的是数组元素有序排列,无序查找指的是数组元素有序或无序排列 平均查找长度(Average Search Length,AS ...
- excel带格式复制python
openpyxl 复制cell单元格包括所有样式 target_cell.data_type = source_cell.data_type target_cell.fill = copy(sourc ...
- Python_结合Re正则模块爬虫
##### 爬取古诗文import reimport requestsdef parse_page(url): headers = { 'User-Agent':'Mozilla/5.0 (Windo ...
- python -- 面向对象编程(类、对象)
一.类 类是用来描述具有相同的属性和方法的对象的集合. 它定义了该集合中每个对象共同拥有的属性和方法. 类是一个独立的单位,它有一个类名,其内部包括成员变量和成员方法,分别用于描述对象的属性和行为. ...
- Vue 可拖拽组件 Vue Smooth DnD 详解和应用演示
本文发布自 https://www.cnblogs.com/wenruo/p/15061907.html 转载请注明出处. 简介和 Demo 展示 最近需要有个拖拽列表的需求,发现一个简单好用的 Vu ...
- PHP的图片转base64,base64图片转换为图片并保存代码
打卡记录 1. 图片转base64代码 /*图片转换为 base64格式编码*/ $img = 'images/avatar.jpg'; $base64_img = base64EncodeImage ...