Mybatis是什么
Mybatis 是一个轻量级的 Java 持久层框架,它简化了数据库操作,将 SQL 语句与 Java 代码解耦。通过 XML 或注解配置 SQL 映射,开发者可以更灵活地操作数据库,同时避免了传统 JDBC 的繁琐编码。Mybatis 支持动态 SQL、存储过程以及高级映射功能,是 Java 应用中常用的 ORM 解决方案之一。
根据MyBatis的写法完成数据库的操作
1.先创建一个接口
java
@Mapper
public interface UserInfoMapper {
@Select("select * from user_info")
List<UserInfo> selectAll();
}
@Mapper 注解替代了传统的五大注解,用于将该接口交由 Spring 容器进行管理。

java
@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;
}
2.创建测试类

我们在这个接口中点击鼠标右键,然后点击Generate,再点击Test:

然后记得把左下角的那个选项勾选

于是在test文件之下就会生成测试类:

3.进行测试
由于我们这个测试需要搭建Spring的环境,所以@SpringBootTest这个注解不能删除,这个注解的作用就是用来搭建Spring的环境的。
测试方法1:通过注解直接将 IOC 容器中的UserInfoMapper注入到测试类中使用。

测试方法2:通过ApplicationContext(Spring 上下文)主动从 IOC 容器中获取 Bean 的测试方法

执行具体的查询操作
在查询中传入一个参数
java
@Select("select * from user_info where id=#{id}")
UserInfo selectAllById(Integer id);
上面的#{id}就获取到了我们所传入的id的数值,这样我们就可以根据不同的id来灵活查询不同的数据
java
@Test
void selectAllById() {
System.out.println(userInfoMapper.selectAllById(1));
}

在查询中传入多个参数
java
@Select("select * from user_info where username =#{username} and password=#{password}")
List<UserInfo> selectByNameAndPassword (String username,String password);
java
@Test
void testSelectByNameAndPassword() {
System.out.println(userInfoMapper.selectByNameAndPassword("zhangsan123", "zhangsan"));
}
1.新增数据
java
@Options(useGeneratedKeys = true,keyProperty = "id")
@Insert("insert into user_info (username,password,age)VALUES(#{username},#{password},#{age}) ")
Integer insertUser(UserInfo userInfo);
@Options(useGeneratedKeys = true,keyProperty = "id")
这行注解就可以让我们方便在后续拿到自增后的id的数值。
java
@Test
void insertUser() {
UserInfo userInfo=new UserInfo();
userInfo.setAge(18);
userInfo.setUsername("user");
userInfo.setPassword("password");
Integer result= userInfoMapper.insertUser(userInfo);
System.out.println("影响行数:" +result +", id: "+userInfo.getId());
}

参数重命名(参数绑定)
这里我们就引入了@Param这个新的注解:
java
@Select("select * from user_info where username =#{userName} and password=#{PassWord}")
List<UserInfo> selectByNameAndPassword (@Param("userName") String username, @Param("PassWord") String password);
这里就把我们所传入的username这个参数的值赋值给了userName,把password的值赋值给了PassWord。
如果是针对对象来重命名的话要做出额外的处理:
java
@Options(useGeneratedKeys = true,keyProperty = "id")
@Insert("insert into user_info (username,password,age)"+
"VALUES(#{UserInfo.username},#{UserInfo.password},#{UserInfo.age}) ")
Integer insertUser2( @Param("UserInfo") UserInfo userInfo);
我们要在对象对应的属性的前面加上我们重新命名的名字然后再加上.
2.删除数据
java
@Delete("delete from user_info where id=#{id}")
Integer deleteUser(Integer id);
java
@Test
void deleteUser() {
userInfoMapper.deleteUser(2);
}

通过数据库中的信息我们可以发现id为2的数据确实被删除了。
3.更新数据
java
@Update("update user_info set delete_flag=#{deleteFlag},phone=#{phone} where id=#{id}")
Integer updateUser(UserInfo userInfo);
上面参数中的对应关系要注意:
delete_flag是数据库中字段的名称,deleteFlag是Java中UserInfo的属性名称。
java
@Test
void updateUser() {
UserInfo userInfo=new UserInfo();
userInfo.setId(3);
userInfo.setPhone("123456");
userInfoMapper.updateUser(userInfo);
}
