Mybatis学习笔记5 面向接口CRUD练习

Mybatis学习笔记4 用javassist动态实现DAO接口基于接口的CRUD_biubiubiu0706的博客-CSDN博客

新建项目

大致目录结构

核心配置文件

日志配置文件,只需要引入logback依赖 配置文件名为logback.xml即可

复制代码
<?xml version="1.0" encoding="UTF-8"?>
<configuration debug="false">
    <!--定义⽇志⽂件的存储地址-->
    <property name="LOG_HOME" value="D:/home"/>
    <!-- 控制台输出 -->
    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <!--格式化输出:%d表示⽇期,%thread表示线程名,%-5level:级别从左显示5
           个字符宽度%msg:⽇志消息,%n是换⾏符-->
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
        </encoder>
    </appender>
    <!-- 按照每天⽣成⽇志⽂件 -->
    <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!--⽇志⽂件输出的⽂件名-->
            <FileNamePattern>${LOG_HOME}/TestWeb.log.%d{yyyy-MM-dd}.log</FileNamePattern>
            <!--⽇志⽂件保留天数-->
            <MaxHistory>30</MaxHistory>
        </rollingPolicy>
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <!--格式化输出:%d表示⽇期,%thread表示线程名,%-5level:级别从左显示5
           个字符宽度%msg:⽇志消息,%n是换⾏符-->
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logge
                r{50} - %msg%n</pattern>
        </encoder>
        <!--⽇志⽂件最⼤的⼤⼩-->
        <triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
            <MaxFileSize>100MB</MaxFileSize>
        </triggeringPolicy>
    </appender>
    <!--mybatis log configure-->
    <logger name="com.apache.ibatis" level="TRACE"/>
    <logger name="java.sql.Connection" level="DEBUG"/>
    <logger name="java.sql.Statement" level="DEBUG"/>
    <logger name="java.sql.PreparedStatement" level="DEBUG"/>
    <!-- ⽇志输出级别,logback⽇志级别包括五个:TRACE < DEBUG < INFO < WARN < ERROR -->
    <root level="DEBUG">
        <appender-ref ref="STDOUT"/>
        <appender-ref ref="FILE"/>
    </root>
</configuration>

映射文件

复制代码
<?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.example.mapper.XXXMapper">
    <insert id="insert">
        insert into t_car value(null,#{carNum},#{brand},#{guidePrice},#{produceTime},#{carType})
    </insert>
    <delete id="deleteById">
        delete from t_car where id=#{id}
    </delete>
    <update id="update">
        update t_car set car_num=#{carNum},brand=#{brand},guide_price=#{guidePrice},produce_time=#{produceTime},car_type=#{carType} where id=#{id}
    </update>
    <select id="selectById" resultType="car">
        /*
        这里可以使用* 原因是配置里配置了自动转驼峰,
        也可以通过resultMp方式或者sql里写别名的方式

          */
        select * from t_car where id=#{id}
    </select>
    <select id="selectAll" resultType="car">/*因配置了实体类包 因此这里可以写类名大写或者小写都行*/
        select * from t_car
    </select>
</mapper>

pojo实体类

XXXMapper

复制代码
package com.example.mapper;

import com.example.pojo.Car;

import java.util.List;

/**
 * @author hrui
 * @date 2023/9/18 2:17
 */
public interface XXXMapper {

    int insert(Car car);

    int deleteById(Long id);

    int update(Car car);

    Car selectById(Long id);

    List<Car> selectAll();


}

单元测试

关于selectOne selectList等等方法在sqlSession.getMapper(xxx)这个底层用javassist动态生成的实现类中封装了 也是因为这个实现类的原因:要求在映射文件中--->namespace必须是dao接口的全限定名称。id必须是dao接口中方法名

复制代码
import com.example.mapper.XXXMapper;
import com.example.pojo.Car;
import com.example.utils.SqlSessionUtil;
import org.apache.ibatis.session.SqlSession;

import java.util.List;
import java.util.zip.CheckedOutputStream;

/**
 * @author hrui
 * @date 2023/9/18 2:42
 */
public class Test {

    @org.junit.Test
    public void testInsert(){
        SqlSession sqlSession = SqlSessionUtil.openSession();
        XXXMapper mapper=sqlSession.getMapper(XXXMapper.class);
        int count = mapper.insert(new Car(null, "2001", "奇美拉", 20.0, "2020-01-01", "新能源"));
        System.out.println(count);
        sqlSession.commit();

    }
    @org.junit.Test
    public void testDeleteById(){
        SqlSession sqlSession = SqlSessionUtil.openSession();
        XXXMapper mapper=sqlSession.getMapper(XXXMapper.class);
        int count = mapper.deleteById(3L);
        System.out.println(count);
        sqlSession.commit();
    }
    @org.junit.Test
    public void testUpdate(){
        SqlSession sqlSession = SqlSessionUtil.openSession();
        XXXMapper mapper=sqlSession.getMapper(XXXMapper.class);
        Car car = new Car(4L, "2002", "奇美拉2", 202.0, "2020-01-01", "新能源");
        int count = mapper.update(car);
        System.out.println(count);
        sqlSession.commit();

    }@org.junit.Test
    public void testSelectById(){
        SqlSession sqlSession = SqlSessionUtil.openSession();
        XXXMapper mapper=sqlSession.getMapper(XXXMapper.class);
        Car car = mapper.selectById(4L);
        System.out.println(car);
        sqlSession.commit();
    }
    @org.junit.Test
    public void testSelectAll(){
        SqlSession sqlSession = SqlSessionUtil.openSession();
        XXXMapper mapper=sqlSession.getMapper(XXXMapper.class);
        List<Car> cars = mapper.selectAll();
        System.out.println(cars);
        sqlSession.commit();
    }

}
相关推荐
星辰大海141226 分钟前
摄影入门学习笔记
笔记·数码相机·学习
沐矢羽29 分钟前
upload文件上传漏洞浅析
学习·web安全·网络安全·文件上传·top10
朝新_34 分钟前
【SpringBoot】配置文件
java·spring boot·笔记·后端·spring·javaee
shenghaide_jiahu1 小时前
数学分析简明教程——2.3 (未完)
学习
Jul1en_1 小时前
【Excalidraw】简洁好看的超轻量级画图白板
笔记·其他
zjshuster2 小时前
elastic search 学习
学习·elasticsearch·jenkins
岑梓铭2 小时前
《考研408数据结构》第七章(6.1~6.3图的概念、存储方式、深/广度遍历)复习笔记
数据结构·笔记·考研·算法·图论·408·ds
D.....l3 小时前
STM32学习(MCU控制)(RS485 and ModBus)
stm32·单片机·学习
deng-c-f3 小时前
Linux C/C++ 学习日记(42):dpdk(五):基于dpdk实现用户态的UDP收发数据、和TCP的三次握手及接收数据
学习·dpdk
恒者走天下3 小时前
cpp / c++零基础就业学习一站式学习平台
开发语言·c++·学习