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 ...
随机推荐
- 安卓手机改造服务器——解决chroot下无法使用systemctl
在Linux Deploy中安装的CentOS7无法使用systemctl命令,没关系我们有其他办法 写在前面 对于这个问题,我也是第一次遇见.并没有深入研究,所有如果有哪些地方有问题,欢迎指正. 问 ...
- Linux:监测收集linux服务器性能数据工具Sysstat的使用与安装
Sysstat是一个工具集,包括sar.pidstat.iostat.mpstat.sadf.sadc.其中sar是其中最强大,也是最能符合我们测试要求的工具,同时pidstat也是非常有用的东东,因 ...
- Android java层常见加密算法的hook自吐以及栈信息的打印
杂谈:其实原理并没有很难,本质就是hook Android的框架层中的api将我们想要的key和iv(也可以没有,就打个比方),但是目前的话,很多厂家已经不在直接调用java层的这些加密算法的api了 ...
- ESP-ADF相关学习笔记
1.makefile:定义了一系列的规则来指定哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译,甚至于进行更复杂的功能操作,因为 makefile就像一个Shell脚本一样,也可以执行操作 ...
- 分享一份550多个Linux命令的文档,按照命令首字母索引排序
输入一个命令,让我给你一个关于它的完美解释! 众所周知,Linux命令是IT人必须掌握的一个技能,有了它,我们可以部署和维护各种各样的服务和应用.但是,大部分的Linux命令我们不一定记得住,而别是各 ...
- keeplived+mycat+mysql高可用读写分离水平分表(谁看谁都会)
一:环境准备: 应用 主机 mysql-master 192.168.205.184 mysql-slave 192.168.205.185 mycat-01,keeplived,jdk 192.16 ...
- Python中字典get方法的使用技巧
get方法,用于获取字典中某个键值key 对应value的值,此方法可以接收两个参数,第一个参数传入key的值,第二个参数用于传入一个自定义返回值,如果查询的key在字典中存在,就会反回对应key在字 ...
- Java的锁升级策略
什么是锁? java中,synchronized永远都是锁定的一个对象,那么jvm是怎么判断一个对象是被锁定的呢. java的对象内存分布 Java的对象由对象头,对象体和填充空间(Padding)组 ...
- Xshell、winscp连不上Linux虚拟机
1.环境 本地机器WIN7环境,使用VMware Workstation Pro安装的CentOS7,系统镜像CentOS-6.1-x86_64-netinstall.iso 2.问题与分析 我的虚拟 ...
- CentOS7创建个人系统启动服务项的方法
CentOS7.6自定义系统启动项的方法(类似busybox里面的inittab)1.编写属于自己的unit服务文件,命令为my.service[Unit]Description=My-demo Se ...