标签: MyBatis

  • 最近火起的 Bean Searcher 与 MyBatis Plus 到底有啥区别?

    最近火起的 Bean Searcher 与 MyBatis Plus 到底有啥区别?

    上篇: 我这样写代码,比直接运用 MyBatis 功率提高了 100 倍

    (更多…)

  • 一文带你了解服务降级的前世今生

    一文带你了解服务降级的前世今生

    持续创作,加快生长!这是我参与「日新计划 6 月更文应战」的第16天,点击查看活动概况

    (更多…)

  • 开发插件:分享10个非常实用IDEA插件

    开发插件:分享10个非常实用IDEA插件

    持续创作,加速成长!这是我参与「日新计划 6 月更文挑战」的第16天,点击查看活动详情 (更多…)

  • Java基础课程设计-学生管理系统《控制台版本》

    持续发明,加快成长!这是我参与「日新计划 6 月更文应战」的第16天,点击查看活动概况

    (更多…)

  • 图文实例解析,InnoDB 存储引擎中行锁的三种算法

    图文实例解析,InnoDB 存储引擎中行锁的三种算法

    前文提到,对于 InnoDB 来说,随时都可以加锁(关于加锁的 SQL 语句这里就不说了,忘记的小伙伴可以翻一下上篇文章),但是并非随时都可以解锁。具体来说,InnoDlinux系统B 采用的是两阶段锁redis持久化定协议(two-phase locking protocol):即在事务执行过程中,mybatis怎么读随时都可以执行加锁操作,但是只有在事务执行 COMMIT 或者 ROLLBACK 的时候才会释放锁,并且所有的锁是在同一时刻被释放。

    (更多…)

  • Data Access 之 MyBatis Plus(三)- MPG代码生成器(Part B)

    Data Access 之 MyBatis Plus(三)- MPG代码生成器(Part B)

    四、MPG 的 IService 接口

    MPG代码生成器生成的服务接口继承MP的iService接口。除了基本的额外删除外,该界面还包含批处理操作方法,该方法定义了def页面预览如何关闭ault方法,以测试手机是否被监控及service entity类图Impl页面预览如何关闭类。

    public in分页符和分节符的区别terface itesla service extends iservice Tesla {

    }

    IService 接口的 save 相关方法

    //插入记录(选择字段,插入策略),直接调用的BaseMapper的insert()方法

    Default boolean save(T entity) {

    //插入测试工程师(布局)

    default boolean savemybatis面试题 batch(collection t entity list)

    //插入(布局)

    boolean save batch(collection t entity list,int batch size);

    //插入批量修改

    def测试英文ault boolean saveorupdatebatch(collection t ent实体类型ity list){

    //插入批量修改

    boolean saveorupdatebatch(collectio测试抑郁症的20道题n t entity list,int batch size);

    在ITeslaServiceTes中

    t测试类中增加相应的测试方法

    @Test
    public void saveBatch(){
        List<Tesla> teslaList = new ArrayList<>();
        for (int i = 0; i < 5; i++) {
            Tesla tesla = new Tesla();
            tesla.setName("Cyber Truck 202" + i);
            tesla.setFactory("得克萨斯州特斯拉超级工厂");
            tesla.setVehicleType("皮卡");
            tesla.setPrice(300000.00 + 1000 * i);
            teslaList.add(tesla);
        }
        boolean b = teslaService.saveBatch(teslaList);
        System.out.println("是否保存成功:" + b);
    }
    

    执行该测试方法

    Data Access 之 MyBatis Plus(三)- MPG代码生成器(Part B)
    保存成功,控制台只执行了一次SQL将数据全部保存到表中

    @Test
    public void saveBatchByBatchSize(){
        List<Tesla> teslaList = new ArrayList<>();
        for (int i = 0; i < 5; i++) {
            Tesla tesla = new Tesla();
            tesla.setName("Cyber Truck 202" + i);
            tesla.setFactory("上海特斯拉超级工厂");
            tesla.setVehicleType("皮卡");
            tesla.setPrice(300000.00 + 1000 * i);
            teslaList.add(tesla);
        }
        boolean b = teslaService.saveBatch(teslaList, 2);
        System.out.println("是否保存成功:" + b);
    }
    

    执行该测试方法

    Data Access 之 MyBatis Plus(三)- MPG代码生成器(Part B)
    批量分页符怎么取消掉保存时设置mybatis注解类batchSize,测试仪既每次执行批量插入时只插mybatis面试题入两条分页预览怎么重新分页数据,因此控制台执行了3次SQ分页符怎么删除L语句

    @Test
    public void saveOrUpdateBatch(){
        List<Tesla> updateList = new ArrayList<>();
        for (int i = 1166057549; i < 1166057551; i++) {
            Tesla tesla = new Tesla();
            tesla.setId(i);
            tesla.setName("Semi Truck 202" + i);
            tesla.setFactory("弗拉蒙特特斯拉超级工厂");
            updateList.add(tesla);
        }
        List<Tesla> saveList =  new ArrayList<>();
        for (int i = 0; i < 2; i++) {
            Tesla tesla = new Tesla();
            tesla.setName("Semi Truck 202" + i);
            tesla.setFactory("柏林特斯拉超级工厂");
            saveList.add(tesla);
        }
        List<Tesla> saveOrUpdateList = new ArrayList<>();
        saveOrUpdateList.addAll(updateList);
        saveOrUpdateList.addAll(saveList);
        boolean b = teslaService.saveOrUpdateBatch(saveOrUpdateList);
        System.out.println("是否更新或者保存成功:" + b);
    }
    

    执行该测试方法

    Data Access 之 MyBatis Plus(三)- MPG代码生成器(Part B)
    对于设置了i特斯拉yd的对象会限制性测试抑郁程度的问卷SELECT语句再执行UPDA特斯拉汽车TE语句,并且只会更新给出的字段分页符怎么删除,对于没有设置id的对象会执行INSE分页符怎么加入RT语句

    IService 接口的 remove 相关方法

    // 根据 ID 删除, 直接调用BaseMapper的deleteById()方法
    default boolean removeById(Serializable id)
    // 根据 columnMap 条件,删除记录,直接调用BaseMapper的deleteByMap()方法
    default boolean removeByMap(Map<String, Object> columnMap) 
    // 根据 entity 条件,删除记录,直接调用BaseMapper的remove()方法
    default boolean remove(Wrapper<T> queryWrapper)
    // 删除(根据ID 批量删除)
    default boolean removeByIds(Collection<?> list) 
    // 批量删除(jdbc批量提交)
    default boolean removeBatchByIds(Collection<?> list)
    // 批量删除(jdbc批量提交)
    default boolean removeBatchByIds(Collection<?> list, int batchSize)
    

    在ITeslaServimybatis中$和井号区别ceTest特斯拉实体类的作用汽车测试类中增加remove的测试方法

    @Test
    public void removeByMap(){
        Map<String, Object> map = new HashMap<>();
        map.put("id", 1166057551);
        map.put("name", "Cyber Truck 2029");
        boolean b = teslaService.removeByMap(map);
        System.out.println("是否删除成功:" + b);
    }
    

    Data Access 之 MyBatis Plus(三)- MPG代码生成器(Part B)
    根据Ma测试英文p组成删除的Where子句执行删除操作

    @Test
    public void removeByIds(){
        List<Integer> idList = new ArrayList<>();
        idList.add(1166057563);
        idList.add(1166057562);
        idList.add(1166057561);
        boolean b = teslaService.removeByIds(idList);
        System.out.println("是否批量删除成功:" + b);
    }
    

    Data Access 之 MyBatis Plus(三)- MPG代码生成器(Part B)
    批量删除成功

    @Test
    public void removeBatchByIds(){
        List<Integer> idList = new ArrayList<>();
        idList.add(1166057560);
        idList.add(1166057559);
        idList.add(1166057558);
        boolean b = teslaService.removeBatchByIds(idList);
        System.out.println("是否批量删除成功:" + b);
    }
    

    Data Access 之 MyBatis Plus(三)- MPG代码生成器(Part B)
    与rem实体类是什么oveByIds()方法所调用删除语句不同

    IS特斯mybatis注解拉车标ervice 接口的 update 相关方法

    ///根据 ID 选择修改,直接调用BaseMapper的updateById()方法
    default boolean updateById(T entity);
    // 根据 whereEntity 条件,更新记录,直接调用BaseMapper的update()方法,传入实体类
    default boolean update(T entity, Wrapper<T> updateWrapper);
    // 根据ID 批量更新
    default boolean updateBatchById(Collection<T> entityList);
    // TableId 注解存在更新记录,否插入一条记录
    boolean saveOrUpdate(T entity);
    

    在ITeslaServiceTest测试类中增加update的测试方法

    @Test
    public void updateBatchById(){
        List<Tesla> updateList = new ArrayList<>();
        for (int i = 1166057556; i < 1166057560; i++) {
            Tesla tesla = new Tesla();
            tesla.setId(i);
            tesla.setFactory("柏林特斯拉超级工厂");
            updateList.add(tesla);
        }
        boolean b = teslaService.updateBatchById(updateList);
        System.out.println("是否更新成功:" + b);
    }
    

    Data Access 之 MyBatis Plus(三)- MPG代码生成器(Part B)

    @Test
    public void saveOrUpdate(){
        Tesla tesla = new Tesla();
        tesla.setName("Model S");
        tesla.setFactory("得克萨斯州特斯拉超级工厂");
        tesla.setPrice(880000.00);
        boolean b = teslaService.saveOrUpdate(tesla);
        System.out.println("保存或者更新成功:" + b);
    }
    

    Data Access 之 MyBatis Plus(三)- MPG代码生成器(Part B)

    五、自定义 MPG 中的代码模板

    MPG 根MyBatis据模板生成 servmybatis分页插件实现原理ice 和 controller 代码, MPG的代码模板在测试工程师 gene测试手机是否被监控rator包下的templates文测试英文件夹下

    Data Access 之 MyBatis Plus(三)- MPG代码生成器(Part B)

    默认提供的模板只能够生成XxxController类,并不特斯拉汽车价格表包含任何方法,如果需要在XxxContmybatis一级缓存和二级缓存roller类中生成增测试抑郁程度的问卷删改查方法就需要自定义cont分页实体类型符怎么删除roller模板。分页符

    Data Access 之 MyBatis Plus(三)- MPG代码生成器(Part B)

    使用 Spring 全家桶之 Spring Boot 2.6.4(四)- Data Acces实体类的定义s(Part D My实体类图Ba特斯拉老板tis Pl分页符怎么取消掉us) 中的 spring-boot-mybatisplus项目,将controllemybatis工作原理r代码模板拷贝至自己项目中的tem分页打印怎么设置plates文件夹下,项目分页符怎么加入中使用测试你的自卑程度的是freemarker模测试你的自卑程度板引擎,所以拷贝ftl结尾的controller模板

    在amybatis分页插件实现原理pplicationmybatis动态sql.yml中增加测试freemarker模板引擎的配置

    spring:
      freemarker:
        template-loader-path: classpath:/resources/templates
        suffix: .ftl
    
    package ${package.Controller};
    import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
    import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
    import org.springframework.web.bind.annotation.RequestMapping;
    import javax.annotation.Resource;
    import java.util.List;
    import org.springframework.web.bind.annotation.RestController;
    import ${package.Entity}.${entity};
    /**
     * @author ${author}
     * @since ${date}
     */
    @RestController
    @RequestMapping("/${table.entityPath}")
    public class ${table.controllerName} {
         @Resource
         private ${table.serviceName} ${table.entityPath}Service;
         // 查询列表
         @GetMapping
         public List<${entity}> list(){
             return ${table.entityPath}Service.list();
         }
         // 根据id查询
         @GetMapping("/{id}")
         public ${entity} findOne(@PathVariable("id") Integer id){
             return ${table.entityPath}Service.getById(id);
         }
         // 更新或保存
         @PostMapping
         public Boolean save(@RequestBody ${entity} ${table.entityPath}){
             return ${table.entityPath}Service.saveOrUpdate(${table.entityPath});
         }
         // 根据id删除
         @DeleteMapping("/{id}")
         public Boolean removeById(@PathVariable("id") Integer id){
             return ${table.entityPath}Service.removeById(id);
         }
         // 查询总记录数
         @GetMapping("/count")
         public Long count(){
             return ${table.entityPath}Service.count();
         }
         // 批量删除
         @PostMapping("/delete")
         public Boolean batchDelete(@RequestBody List<Integer> ids){
             return ${table.entityPath}Service.removeBatchByIds(ids);
         }
         // 批量更新或者保存
         @PostMapping("/batch")
         public Boolean saveOrUpdateBatch(List<${entity}> ${table.entityPath}List){
             return ${table.entityPath}Service.saveOrUpdateBatch(${table.entityPath}List);
         }
         // 分页查询
         @GetMapping("/page")
         public Page<${entity}> findPage(@RequestParam("pageNum") Integer pageNum,
                                         @RequestParam("pageSize") Integer pageSize){
             Page<${entity}> page = new Page<>(pageNum, pageSize);
             QueryWrapper<${entity}> queryWrapper = new QueryWrapper<>();
             userService.page(page, queryWrapper);
             return page;
         }
    }
    

    代码模板中

    • ${entity}:实体类类名,如Umybatis一级缓存和二级缓存ser
    • ${table.entityPath}:实体类类名小写,us特斯拉er
    • ${table.servic特斯拉价格eName}:Service接口名,IUserService
    • ${table.co特斯拉ntro分页符怎么加入llerN特斯拉yame}特斯拉y:Controll特斯拉汽车er类类名,UserControll特斯拉股票er

    将mybatis-plus-mpg中的代码生mybatis框架成器G测试你适合学心理学吗eneratorApp拷贝至spring-bo实体类的作用ot-mybatisplus的test目录下,运行代码生成器

    @RestController
    @RequestMapping("/user")
    public class UserController {
        @Resource
        private IUserService userService;
        // 查询列表
        @GetMapping
        public List<User> list(){
        return userService.list();
        }
        // 根据id查询
        @GetMapping("/{id}")
        public User findOne(@PathVariable("id") Integer id){
            return userService.getById(id);
        }
        // 更新或保存
        @PostMapping
        public Boolean save(@RequestBody User user){
            return userService.saveOrUpdate(user);
        }
        // 根据id删除
        @DeleteMapping("/{id}")
        public Boolean removeById(@PathVariable("id") Integer id){
            return userService.removeById(id);
        }
        // 查询总记录数
        @GetMapping("/count")
        public Long count(){
            return userService.count();
        }
        // 批量删除
        @PostMapping("/delete")
        public Boolean batchDelete(@RequestBody List<Integer> ids){
            return userService.removeBatchByIds(ids);
        }
        // 批量更新或者保存
        @PostMapping("/batch")
        public Boolean saveOrUpdateBatch(List<User> userList){
            return userService.saveOrUpdateBatch(userList);
        }
        // 分页查询
        @GetMapping("/page")
        public Page<User> findPage(@RequestParam("pageNum") Integer pageNum,
                                        @RequestParam("pageSize") Integer pageSize){
            Page<User> page = new Page<>(pageNum, pageSize);
            QueryWrapper<User> queryWrapper = new QueryWrapper<>();
            userService.page(page, queryWrapper);
            return page;
        }
    }
    

    启动SpringBoot项目,测试生实体类型成的代码

    查询用户列表 /user

    Data Access 之 MyBatis Plus(三)- MPG代码生成器(Part B)

    根据id查询用户 /user/1

    Data Access 之 MyBatis Plus(三)- MPG代码生成器(Part B)

    更新或者保存用户 /user

    Data Access 之 MyBatis Plus(三)- MPG代码生成器(Part B)

    查询用户总数 /user/count

    Data Access 之 MyBatis Plus(三)- MPG代码生成器(Part B)

    根据id删除用户 /use特斯拉车标r分页符怎么设置/1

    Data Access 之 MyBatis Plus(三)- MPG代码生成器(Part B)

    分页查询用户 /user/page?pageNu分页打印怎么设置m=2&pageS测试手机是否被监控ize=3

    Data Access 之 MyBatis Plus(三)- MPG代码生成器(Part B)

    批量删除 /user/delete

    Data Access 之 MyBatis Plus(三)- MPG代码生成器(Part B)

  • Spring 全家桶之 Spring Boot 2.6.4( Ⅰ )- Caching(Part A)

    Spring 全家桶之 Spring Boot 2.6.4( Ⅰ )- Caching(Part A)

    一起养成写作习惯!这是我参加“一神论计划4月份经文挑战”的第25天。点击查看活动详细信息。

    一、Spring Cache Abstraction

    The spring framework provides support fojson数据r transparently adding caching to an application . at its core,The abstraction applies caspring面试

    Sspring面试题pring高速缓存抽象是一组高速缓存规范,通过定义org . springframeworkjson . cache . cache和CacheManager的两个接口集成了不同的高速缓存技术

    高速缓存接口mybatis面试题提供高速缓存组件的规范定义,并包含缓慢JSON内存的各种操作集合

    高速缓存接数据结构教程第5版李春葆答案口下的弹簧提供了多种xxxCache实现数据结构c语言版本(RedisCache、EhCjson格式怎么打开acheCache、Concurre缓存视频变成本地视频ntMapCache等)

    Cach缓存是什么意思eManager是管理各种缓存组件的缓存管理器

    CacheManager和Cache的关系类似于数据库连接池和数据库连springmvc的工作原理接。

    为了简化开发,Spring高速缓存抽象同时支持Jacache的注释,Jacache也是一组规范。

    JCache定义了五个核心接口:

    CachingProvjsonider:定义多个CacheManagerjson解析的创建、配置、导入、管理和控制,在运行过程中可以访问多个caching提springmvc的工作原理供程序

    CaCaiderManager:创建、配置、导入、管理和控制存在于Cachemanager的j数据结构c语言版严蔚敏第二版答案sonp上下文中的多个唯一命名的ca高速缓存是指che。CacheManager只能MyBatis属于一mybatis框架个Cachismybatis一级缓存和二级缓存pringngProvjson

    Cache:暂时储存类似快取的Map数目jsonp资料结构、金钥索引值。缓存只能属于一个CacheManager

    数据结构题库目:高速缓存

    的Key-数据结构有哪些Value对
  • Expiry:每一个存储spring面试题在Ca缓存文件夹名称che中的条目有一个mybatis注解定义的有效期,一旦超过这个事件,条目为过期状态且无法访问、更新和删除,缓存有数据结构知识点总结效期可以通过ExpiryPolicy设置
  • 为了简化开发,更多是使Spring用Spring的缓存抽象,Spring的缓存抽mybatis中$和井号区别象的底数据结构教程第5版李春葆答案层概念与JSR107是一致的

    Spring 缓存抽象中的重要注解

    每次调用需要缓存功能的方法时,Spring会检查数据结构严蔚敏指定参数的执springmvc的工作原理行目标方法是否已经被调用过,如果有就直接从数据结构题库spring翻译缓存中获取方法调用后的结果,如果没数据结构严蔚敏有就调用目标方法并缓存结果json怎么读后返回给用户,下次再次调用的时候直接从缓存中获取

    You can a数据结构c语言版第二版课后答案lso use the standard缓存视频合并 JSR-107 (JCache) annotations (such aJSONs @CacheResult) transparently. However, we strongly advise you to not mix and match the Spring Cache and JCache annotations.

    Sprisjsonppring框架ng Boot 官方建议spring框架不要混用 Spring Cache 和mybatisplus JCache 的注解

    工程搭建与测试

    创建spring bomybatis中$和井号区别ot工程smybatisplusprimybatis怎么读ng-boot-cache

    根据S缓存的视频在哪QL文件新建tesla、json格式怎么打开factory两数据结构有哪些张表

    SET NAMES utf8mb4;
    SET FOREIGN_KEY_CHECKS = 0;
    -- ----------------------------
    -- Table structure for factory
    -- ----------------------------
    DROP TABLE IF EXISTS `factory`;
    CREATE TABLE `factory` (
      `id` int(11) NOT NULL AUTO_INCREMENT,
      `factory_name` varchar(255) DEFAULT NULL,
      PRIMARY KEY (`id`)
    ) ENGINE=InnoDB AUTO_INCREMENT=1166057542 DEFAULT CHARSET=utf8;
    -- ----------------------------
    -- Records of factory
    -- ----------------------------
    BEGIN;
    INSERT INTO `factory` VALUES (1, '上海特斯拉超级工厂');
    INSERT INTO `factory` VALUES (2, '加州弗拉蒙特特斯拉超级工厂');
    INSERT INTO `factory` VALUES (3, '得克萨斯州特斯拉超级工厂');
    INSERT INTO `factory` VALUES (4, '柏林特斯拉超级工厂');
    COMMIT;
    SET FOREIGN_KEY_CHECKS = 1;
    
    SET NAMES utf8mb4;
    SET FOREIGN_KEY_CHECKS = 0;
    -- ----------------------------
    -- Table structure for tesla
    -- ----------------------------
    DROP TABLE IF EXISTS `tesla`;
    CREATE TABLE `tesla` (
      `id` int(11) NOT NULL AUTO_INCREMENT,
      `name` varchar(255) DEFAULT NULL,
      `price` double(10,2) DEFAULT NULL,
      `vehicle_type` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL,
      `factory_id` int(11) DEFAULT NULL,
      PRIMARY KEY (`id`)
    ) ENGINE=InnoDB AUTO_INCREMENT=1166057542 DEFAULT CHARSET=utf8;
    -- ----------------------------
    -- Records of tesla
    -- ----------------------------
    BEGIN;
    INSERT INTO `tesla` VALUES (1166057520, 'Model 3P 2021', 280000.00, '四门轿车', 1);
    COMMIT;
    SET FOREIGN_KEY_CHECKS = 1;
    

    entity包下增加Tesla和Factory实体类

    @Data
    public class Tesla {
        private Integer id;
        private String name;
        private Double price;
        private String vehicleType;
        private Integer factoryId;
    }
    
    @Data
    public class Factory {
        private Integer id;
        private String factoryName;
    }
    

    application.ym数据结构c语言版第二版课后答案l中配置druid

    spring:
      datasource:
        # driver可以不写,会根据连接自动判断
        driver-class-name: com.mysql.cj.jdbc.Driver
        username: root
        password: 123456
        url: jdbc:mysql://localhost:3306/test
        druid:
          # 初始化大小,最小,最大
          initial-size: 5
          max-active: 100
          min-idle: 1
          # 配置获取连接等待超时的时间
          max-wait: 60000
          # 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位毫秒
          time-between-eviction-runs-millis: 60000
          # 配置一个连接在池中最小生存时间
          min-evictable-idle-time-millis: 300000
          # 用来检测连接是否有效的sql 必须是一个查询语句 注意没有此语句以下三个属性不会生效
          validation-query: SELECT 1 FROM DUAL
          # 归还连接时会执行validationQuery检测连接是否有效,开启会降低性能,默认为true
          test-on-return: false
          # 申请连接时会执行validationQuery检测连接是否有效,开启会降低性能,默认为true
          test-on-borrow: true
          # 申请连接的时候检测,如果空闲时间大于timeBetweenEvictionRunsMillis,执行validationQuery检测连接是否有效。
          test-while-idle: true
          # 配置监控统计拦截的 Filter,去掉后监控界面 SQL 无法统计,wall 用于防火墙
          filters: stat,wall
          # 通过 connection-properties 属性打开 mergeSql 功能;慢 SQL 记录
          connection-properties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000
          # 配置 DruidStatFilter
          web-stat-filter:
            enabled: true
            url-pattern: /*
            exclusions: .js,*.gif,*.jpg,*.bmp,*.png,*.css,*.ico,/druid/*
          # 配置 DruidStatViewServlet
          stat-view-servlet:
            url-pattern: /druid/*
            # IP 白名单,没有配置或者为空,则允许所有访问
            #allow: 127.0.0.1
            # IP 黑名单,若白名单也存在,则优先使用
            #deny: 192.168.31.253
            # 禁用 HTML 中 Reset All 按钮
            reset-enable: true
            # 登录用户名/密码
            login-username: root
            login-password: 123
            # 注意 此处必须开启,否则无法访问druid监控面板
            enabled: true
          use-global-data-source-stat: true
    logging:
      level:
        # 输出mapper接口中方法执行的SQL语句
        com.lilith.mapper: debug
    mybatis:
      # 全局配置文件的位置
      config-location: classpath:mybatis-config.xml
      mapper-locations: classpath:mappers/*.xml
        # configuration:
      # map-underscore-to-camel-case: true
    debug: true
    

    在mymybatisplusbatis-config.mybatis分页插件实现原理xml缓存视频合并app中配置MyBatis全局配置

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE configuration
            PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
            "http://mybatis.org/dtd/mybatis-3-config.dtd">
    <configuration>
        <settings>
            <setting name="mapUnderscoreToCamelCase" value="true"/>
        </settings>
        <typeAliases>
            <package name="com.lilith.entity"/>
        </typeAliases>
    </configuration>
    

    mapper包下增加TeslaMapper和FactspringoryMapper两个接口,实现增删改查方法

    public interface TeslaMapper {
        void insert(Tesla tesla);
        Tesla selectOneById(Integer id);
        void update(Tesla tesla);
        void deleteOneById(Integer id);
    }
    
    public interface FactoryMapper {
        Factory selectOneById(Integer id);
        void deleteOneById(Integer id);
        void insert(Factory factory);
        void update(Factory factory);
    }
    

    resourcmybatispluses目录下m数据结构教程第5版李春葆答案appers文件夹中的Mapper XML映射文件TeslaMap数据结构题库per.xml和FactoryMapper.xml

    <?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.lilith.mapper.TeslaMapper">
        <sql id="Base_Columns_List">
            id, name, price, vehicle_type, factory_id
        </sql>
        <select id="selectOneById" resultType="tesla">
            select <include refid="Base_Columns_List" /> from tesla where id = #{id}
        </select>
        <insert id="insert">
            INSERT INTO tesla (name, price, vehicle_type, factory_id)
            VALUES (#{name}, #{price}, #{vehicleType},#{factoryId})
        </insert>
        <update id="update">
            UPDATE tesla SET name = #{name}, price = #{price}, vehicle_type = #{vehicleType}, factory_id = #{factoryId}
            WHERE id = #{id}
        </update>
        <delete id="deleteOneById">
            DELETE FROM tesla WHERE id=#{id}
        </delete>
    </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 namespace="com.lilith.mapper.FactoryMapper">
        <sql id="Base_Columns_List">
            id, factory_name
        </sql>
        <select id="selectOneById" resultType="factory">
            SELECT <include refid="Base_Columns_List" /> FROM factory WHERE id = #{id}
        </select>
        <delete id="deleteOneById">
            DELETE FROM factory WHERE id=#{id}
        </delete>
        <insert id="insert" useGeneratedKeys="true" keyColumn="id" keyProperty="id">
            INSERT INTO factory (factory_name)
            VALUES (#{factoryName})
        </insert>
        <update id="update">
            UPDATE factory SET factory_name = #{factoryName} where id = #{id}
        </update>
    </mapper>
    

    初始化spring-boot-cache工程的步骤:

    1. 创建tesla和factory两张表
    2. spri数据结构c语言版ng-boot-cache中entity包下创建TJSONespring框架sla和Factory实体类
    3. 整合Druid数据源
    4. 配置MyBatis
    5. 新建TeslaMapp数据结构mybatis一级缓存和二级缓存c语言版第二版课后答案er、Factory数据结构Mapper并增加增删改查方法
    6. 测试TeslaMapper、FactoryMapper的增删改缓存查方法

    数据结构知识点总结配置完成数据访问层并测试成功之后,新建service包并在该目录下新增impl包,在springservice包中新增TeslaService接口并在impl包中新增TeslaService的实现类TeslaServiceIMyBatismpl

    public interface TeslaService {
        Tesla getTeslaById(Integer id);
    }
    
    @Service
    @Slf4j
    public class TeslaServiceImpl implements TeslaService {
        @Autowired
        private TeslaMapper teslaMapper;
        @Override
        public Tesla getTeslaById(Integer id) {
            log.info("查询" + id + "特斯拉");
            return teslaMapper.selectOneById(id);
        }
    }
    

    新增controller包,spring增加TeslaController类,返回JSON格式数据

    @RestController
    public class TeslaController {
        @Autowired
        private TeslaService teslaService;
        @GetMapping("/tesla/{id}")
        public Tesla find(@PathVariable("id") Integer id){
            Tesla teslaById = teslaService.getTeslaById(id);
            return teslaById;
        }
    }
    

    启动应用,测试Controller缓存类,不要忘了数据结构c语言版在主程序类上添加@MapperSc缓存是什么意思a数据结构c语缓存是什么意思言版第二版课后答案n扫描所有的Mapper接口

    Spring Cache 的使用

    首先在主程序类上使用@EnableCachimybatis中$和井号区别ng来开启基于注解的缓存

    @Cacheable

    mybatis注解在TeslaServiceImpl类上的getTeslaBspring翻译yI缓存英文d()方法未添加@Cacheable注解之前,每一次查询都会调用数据库执行SQL语句,@Cacheable注解可以将方法运行的结果缓存,以后查询结果相同的spring翻译数据直接缓存中获取,不会在调数据结构实验报告用方法

    增加@Cacheable注解后,添加ca缓存清理cheNames属性,重启应用,多次查询只会执行一次SQL语句

    @Cacheable的几mybatis分页插件实现原理个属性

    缓存SpELl表达式

    名称 位置 描述 缓存视频怎样转入相册
    methodNammybatis怎么读e root object 当前被调用的方法名 #root.met数据结构有哪些hodName
    method root object 当前被调用的方法 #root.method.name
    target root object 当前被调缓存视频变成本地视频用的目标对象 #root.taspringrget
    targespring翻译tClass root object 当前被调用的目标对象类 #root.targetClasspring框架s
    args rootmybatis框架 objejson数据ct 当前被调用的参数列表 #root.args[0]
    cachesspring是什么意思 root object 当前方法调用使用的缓存列表数据结构c语言版,@Cacheable(value={“cache1”, “cache2”}) #root.caches.name[0]
    argumMyBatisent name evaluation context 方法参数的名字,可以直接 “缓存的视频在spring漏洞#参数名”, 也可以使用”#p0″或者”#a0″, 0代表索引 #p0
    result evaluation context 方法执行后的返回值,仅当该结果会被缓存时才可使用 #result
  • Myabtis源码分析五-Mybatis配置加载完全图解,建造者模式的使用

    Myabtis源码分析五-Mybatis配置加载完全图解,建造者模式的使用

    ​一起养成写作习惯!这是我参与「日新计划 4 月更文挑战」的第10天,[点击查看活动详情]

    (更多…)

  • ShardingSphere 之 Sharding-JDBC 数据分片实践

    ShardingSphere 之 Sharding-JDBC 数据分片实践

    Offer 驾到,掘友接招!我正在参与2022春招打卡活动,点击查看活动详情。

    (更多…)