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


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

    新建项目

    大致目录结构

    核心配置文件

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

    1. <?xml version="1.0" encoding="UTF-8"?>
    2. <configuration debug="false">
    3. <!--定义⽇志⽂件的存储地址-->
    4. <property name="LOG_HOME" value="D:/home"/>
    5. <!-- 控制台输出 -->
    6. <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
    7. <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
    8. <!--格式化输出:%d表示⽇期,%thread表示线程名,%-5level:级别从左显示5
    9. 个字符宽度%msg:⽇志消息,%n是换⾏符-->
    10. <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
    11. </encoder>
    12. </appender>
    13. <!-- 按照每天⽣成⽇志⽂件 -->
    14. <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
    15. <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
    16. <!--⽇志⽂件输出的⽂件名-->
    17. <FileNamePattern>${LOG_HOME}/TestWeb.log.%d{yyyy-MM-dd}.log</FileNamePattern>
    18. <!--⽇志⽂件保留天数-->
    19. <MaxHistory>30</MaxHistory>
    20. </rollingPolicy>
    21. <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
    22. <!--格式化输出:%d表示⽇期,%thread表示线程名,%-5level:级别从左显示5
    23. 个字符宽度%msg:⽇志消息,%n是换⾏符-->
    24. <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logge
    25. r{50} - %msg%n</pattern>
    26. </encoder>
    27. <!--⽇志⽂件最⼤的⼤⼩-->
    28. <triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
    29. <MaxFileSize>100MB</MaxFileSize>
    30. </triggeringPolicy>
    31. </appender>
    32. <!--mybatis log configure-->
    33. <logger name="com.apache.ibatis" level="TRACE"/>
    34. <logger name="java.sql.Connection" level="DEBUG"/>
    35. <logger name="java.sql.Statement" level="DEBUG"/>
    36. <logger name="java.sql.PreparedStatement" level="DEBUG"/>
    37. <!-- ⽇志输出级别,logback⽇志级别包括五个:TRACE < DEBUG < INFO < WARN < ERROR -->
    38. <root level="DEBUG">
    39. <appender-ref ref="STDOUT"/>
    40. <appender-ref ref="FILE"/>
    41. </root>
    42. </configuration>

    映射文件

    1. <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
    2. "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
    3. <mapper namespace="com.example.mapper.XXXMapper">
    4. <insert id="insert">
    5. insert into t_car value(null,#{carNum},#{brand},#{guidePrice},#{produceTime},#{carType})
    6. </insert>
    7. <delete id="deleteById">
    8. delete from t_car where id=#{id}
    9. </delete>
    10. <update id="update">
    11. update t_car set car_num=#{carNum},brand=#{brand},guide_price=#{guidePrice},produce_time=#{produceTime},car_type=#{carType} where id=#{id}
    12. </update>
    13. <select id="selectById" resultType="car">
    14. /*
    15. 这里可以使用* 原因是配置里配置了自动转驼峰,
    16. 也可以通过resultMp方式或者sql里写别名的方式
    17. */
    18. select * from t_car where id=#{id}
    19. </select>
    20. <select id="selectAll" resultType="car">/*因配置了实体类包 因此这里可以写类名大写或者小写都行*/
    21. select * from t_car
    22. </select>
    23. </mapper>

    pojo实体类

    XXXMapper

    1. package com.example.mapper;
    2. import com.example.pojo.Car;
    3. import java.util.List;
    4. /**
    5. * @author hrui
    6. * @date 2023/9/18 2:17
    7. */
    8. public interface XXXMapper {
    9. int insert(Car car);
    10. int deleteById(Long id);
    11. int update(Car car);
    12. Car selectById(Long id);
    13. List selectAll();
    14. }

    单元测试

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

    1. import com.example.mapper.XXXMapper;
    2. import com.example.pojo.Car;
    3. import com.example.utils.SqlSessionUtil;
    4. import org.apache.ibatis.session.SqlSession;
    5. import java.util.List;
    6. import java.util.zip.CheckedOutputStream;
    7. /**
    8. * @author hrui
    9. * @date 2023/9/18 2:42
    10. */
    11. public class Test {
    12. @org.junit.Test
    13. public void testInsert(){
    14. SqlSession sqlSession = SqlSessionUtil.openSession();
    15. XXXMapper mapper=sqlSession.getMapper(XXXMapper.class);
    16. int count = mapper.insert(new Car(null, "2001", "奇美拉", 20.0, "2020-01-01", "新能源"));
    17. System.out.println(count);
    18. sqlSession.commit();
    19. }
    20. @org.junit.Test
    21. public void testDeleteById(){
    22. SqlSession sqlSession = SqlSessionUtil.openSession();
    23. XXXMapper mapper=sqlSession.getMapper(XXXMapper.class);
    24. int count = mapper.deleteById(3L);
    25. System.out.println(count);
    26. sqlSession.commit();
    27. }
    28. @org.junit.Test
    29. public void testUpdate(){
    30. SqlSession sqlSession = SqlSessionUtil.openSession();
    31. XXXMapper mapper=sqlSession.getMapper(XXXMapper.class);
    32. Car car = new Car(4L, "2002", "奇美拉2", 202.0, "2020-01-01", "新能源");
    33. int count = mapper.update(car);
    34. System.out.println(count);
    35. sqlSession.commit();
    36. }@org.junit.Test
    37. public void testSelectById(){
    38. SqlSession sqlSession = SqlSessionUtil.openSession();
    39. XXXMapper mapper=sqlSession.getMapper(XXXMapper.class);
    40. Car car = mapper.selectById(4L);
    41. System.out.println(car);
    42. sqlSession.commit();
    43. }
    44. @org.junit.Test
    45. public void testSelectAll(){
    46. SqlSession sqlSession = SqlSessionUtil.openSession();
    47. XXXMapper mapper=sqlSession.getMapper(XXXMapper.class);
    48. List<Car> cars = mapper.selectAll();
    49. System.out.println(cars);
    50. sqlSession.commit();
    51. }
    52. }

  • 相关阅读:
    不同大小的缓冲区对 MD5 计算速度的影响
    【C++】C++职工信息管理系统
    D. Problem with Random Tests(暴力&贪心)
    数据链路层(2层 Data Link Layer)
    工业互联网企业身份与访问控制课题研究与探索
    2022年全国最新消防设施操作员(中级消防设施操作员)真题题库及答案
    忘记mysql密码后如何修改密码(2022最新版详细教程保姆级)
    Review-Spring
    [Tools: git] Github Pull Request
    eax和ax、ah、al的区别简介
  • 原文地址:https://blog.csdn.net/tiantiantbtb/article/details/132962047