mybatis 练习一 (mapper)

初始化 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 红蓝小鸟很方便

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值