MyBatis学习
在学习MyBatis之前我们操作数据库的时候主要流程:
- 创建数据库连接 DataSource
- 通过DataSource获取数据库连接Connection
- 编写要执行带?占位符的SQL语句
- 通过Connection及SQL创建操作指令对象Statement
- 替换占位符,指定要替换的数据库字段类型,占位符索引以及要替换的值
- 使用Statement执行SQL语句
- 查询操作:返回结果集ResultSet,更新操作:返回更新的数量
- 处理结果
- 释放资源
以上操作太麻烦,所以我们学习MyBatis
什么是MyBatis?
MyBatis是一款优秀的持久化框架,用于JDBC的开发。
持久化:指的就是持久化操作层,通常指数据访问层,用来操作数据库的。
MyBatis入门
1.创建工程(IDE版本2021.1.3)
2.引入依赖
<!--Mybatis 依赖包-->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.3.1</version>
</dependency>
<!--mysql驱动包-->
<dependency>
<groupId>com.mysql</groupId>
<artifactId>mysql-connector-j</artifactId>
<scope>runtime</scope>
</dependency>
3.创建yml文件(MyBatis_test是数据库名,可以自行修改)
spring:
datasource:
url: jdbc:mysql://127.0.0.1:3306/mybatis_test?characterEncoding=utf8&useSSL=false
username: root
password: 123456
driver-class-name: com.mysql.cj.jdbc.Driver
3.开始创作
1)创建数据库数据表(我用的是mysqlWorkbench)
2).创建一个UserInfo对象
package com.example.demo.model;
import lombok.Data;
import java.util.Date;
@Data
public class UserInfo {
private Integer id;
private String username;
private String password;
private Integer age;
private Integer gender;
private String phone;
private Integer deleteFlag;
private Date createTime;
private Date updateTime;
}
3).创建mapper
package com.example.demo.mapper;
import com.example.demo.model.UserInfo;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Select;
import org.springframework.stereotype.Component;
import java.util.List;
@Mapper
public interface UerInfoMapper
{
@Select("SELECT * FROM mybatis_test.userinfo")
List<UserInfo> selectAll();
}
4).测试
package com.example.demo.controller;
import com.example.demo.mapper.UerInfoMapper;
import com.example.demo.model.UserInfo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
@RestController
public class UserInfroController {
@Autowired
private UerInfoMapper uerInfoMapper;
@RequestMapping("/selectAll")
public List<UserInfo> selectAll()
{
return uerInfoMapper.selectAll();
}
}
5).运行结果
注意
Mybatis的持久层接⼝规范⼀般都叫XxxMapper
创建数据表时,表名/字段名全都要写
@Mapper注解:表⽰是MyBatis中的Mapper接
• 程序运⾏时,框架会⾃动⽣成接⼝的实现类对象(代理对象),并给交Spring的IOC容器管理
• @Select注解:代表的就是select查询,也就是注解对应⽅法的具体实现内容.
单元测试
1.在mapper文件中右击后点击generate
2.创建test
3.设置test
4.加入日志,和注解
注意一定要加上 @SpringBootTest注解,不然test中拿不到spring容器中的数据,会报错
MyBatis增删查改
package com.example.demo.mapper;
import com.example.demo.model.UserInfo;
import org.apache.ibatis.annotations.*;
import org.springframework.stereotype.Component;
import java.util.List;
@Mapper
public interface UerInfoMapper
{
//查询全部
@Select("SELECT * FROM mybatis_test.userinfo")
List<UserInfo> selectAll();
//查询某一个#相当于一个变量,相当于jdbc中预编译中的?
@Select("SELECT * FROM userinfo where id=#{userId}")
UserInfo selectOne(@Param("userId")Integer id);//重命名
//增
@Insert("insert into userinfo (username, password, age, gender, phone) values(\"zhaoliu\",\"zhaoliu\",19,1,\"18700001234\")")
Integer insert(UserInfo userInfo);
//删
@Delete("delete from userinfo where id=2")
void delete();
//改
@Update("update userinfo set username='zhangsan' where id=1")
void UpdateOne();
}
日志: