初始化 spring boot 工程(idea)
忽略无聊文件
file -> settings -> editor -> file types -> ignored files and folders 把用不到的文件忽略掉,让工程看起来清爽。
在丢失root密码的时候,可以这样:
j忘记 mysql 数据库连接密码,怎么办? | 东Ge博客gg
建议直接重装 mysql 。
准备写 application.yml 文件
spring.datasource.url=jdbc:mysql://localhost:3306/mybatistest?characterEncoding=utf8&useSSL=false&serverTimezone=Asia/Shanghai&rewriteBatchedStatements=true
spring.datasource.password=root
spring.datasource.username=root
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
mysql8.0 前 driver 是 com.mysql.jdbc.Driver
创建 entity(实体类)
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@AllArgsConstructor
@NoArgsConstructor
public class User {
private Integer id;
private String name;
private Double money;
@DateTimeFormat(pattern = "yyyy-MM-dd")
private Date birthDay;
}
mapper(接口)
注意文件名需要和 mapper.xml 相同,并且标注 @mapper 注解哦。
或者在主启动类上标注 @MapperScan("mapper文件所在包包的路径")
package com.lzy.practice.mybatisplus.mapper;
import com.lzy.practice.mybatisplus.entity.User;
import org.apache.ibatis.annotations.*;
import java.util.List;
@Mapper
public interface UserMapper {
// 简单的 sql 语句可以直接这样写在注释里
@Select("select * from t_users;")
List<User> selectAll();
@Insert("insert into t_users values" +
"(null,#{name},#{money},#{birthDay})")
int insert(User user);
@Delete("delete from t_users where id = #{id}")
int deleteById(int id);
// 复杂一点的语句可以写到 xml 映射文件中去,
// 通过方法名对应 xml 中的 id 故可以不写注解。
int updateById(User user);
}
mapper.xml(资源映射文件)
注意 mapper.xml 文件的位置要和 mapper 文件对应,使得编译后在同一个文件夹下哦。
<?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 文件,注意用 '.' 不是 '/' -->
<mapper namespace="com.lzy.practice.mybatisplus.mapper.UserMapper">
<!-- 这里是结果映射,指向 entity 实体类-->
<resultMap id="User" type="com.lzy.practice.mybatisplus.entity.User">
<!-- column 列 指的是表中的列名, property 指的是 实体类的属性 -->
<result column="id" property="id"/>
<result column="name" property="name"/>
<result column="money" property="money"/>
<result column="birthday" property="birthDay"/>
</resultMap>
<!-- 复杂的 sql 语句 可以写在这里, 通过 id 指向 mapper 文件中的 方法名-->
<update id="updateById">
update t_users set name = #{name},money = #{money},birthday = #{birthDay}
where id = #{id}
</update>
</mapper>
测试
package com.lzy.practice.mybatisplus;
import com.lzy.practice.mybatisplus.entity.User;
import com.lzy.practice.mybatisplus.mapper.UserMapper;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import java.sql.Date;
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.util.List;
@SpringBootTest
class MybatisPlusApplicationTests {
@Autowired
UserMapper mapper;
@Test
void selectAll() {
List<User> users = mapper.selectAll();
users.forEach(System.out::println);
}
@Test
void insert() {
int h = mapper.insert(new User(null, "哈哈", 15.2, Date.valueOf("1999-11-9")));
System.out.println(h == 1 ? "插入成功" : "插入失败");
}
@Test
void update() {
String date = "1999-05-09";
DateTimeFormatter dateTimeFormatter =
DateTimeFormatter.ofPattern("yyyy-MM-dd");
LocalDate localDate = LocalDate.parse(date, dateTimeFormatter);
int haha = mapper.updateById(new User(5, "haha", 15200.0, Date.valueOf("1999-11-9")));
System.out.println(haha == 1 ? "修改成功" : "修改失败");
}
@Test
void delete() {
System.out.println(mapper.deleteById(5) == 1 ? "删除成功" : "删除失败");
}
}
常见错误排查
org.apache.ibatis.binding.BindingException: Invalid bound statement (not found)
1. mapper 和 mapper.xml 文件名不一致。
2.mapper 和 mapper.xml 文件位置不匹配。.xml 文件的位置要注意 建多层文件目录用 '/' 而不是'.',后者建出来的是一个名字叫 'com.lzy.practicce...'的文件夹 不是 com/lzy/practice 这样多层的文件目录。最终需要在 target 里面看到编译完 两个文件是在同一个文件夹下的。
启用插件 MyBatisX 红蓝小鸟很方便