标签: MyBatis
-
一文带你了解服务降级的前世今生
持续创作,加快生长!这是我参与「日新计划 6 月更文应战」的第16天,点击查看活动概况
-
肝了一个月的 DDD,一文带你掌握!
整体阅读时间,在 30 分钟左右。
(更多…) -
开发插件:分享10个非常实用IDEA插件
持续创作,加速成长!这是我参与「日新计划 6 月更文挑战」的第16天,点击查看活动详情 (更多…)
-
Java基础课程设计-学生管理系统《控制台版本》
持续发明,加快成长!这是我参与「日新计划 6 月更文应战」的第16天,点击查看活动概况
-
图文实例解析,InnoDB 存储引擎中行锁的三种算法
前文提到,对于 InnoDB 来说,随时都可以加锁(关于加锁的 SQL 语句这里就不说了,忘记的小伙伴可以翻一下上篇文章),但是并非随时都可以解锁。具体来说,InnoDlinux系统B 采用的是两阶段锁redis持久化定协议(two-phase locking protocol):即在事务执行过程中,mybatis怎么读随时都可以执行加锁操作,但是只有在事务执行 COMMIT 或者 ROLLBACK 的时候才会释放锁,并且所有的锁是在同一时刻被释放。
-
MybatisPlus—条件构造器和常用接口
一.初始wrapper
-
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); }
执行该测试方法 保存成功,控制台只执行了一次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); }
执行该测试方法 批量分页符怎么取消掉保存时设置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); }
执行该测试方法 对于设置了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); }
根据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); }
批量删除成功
@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); }
与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); }
@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); }
五、自定义 MPG 中的代码模板
MPG 根MyBatis据模板生成 servmybatis分页插件实现原理ice 和 controller 代码, MPG的代码模板在测试工程师 gene测试手机是否被监控rator包下的templates文测试英文件夹下
默认提供的模板只能够生成XxxController类,并不特斯拉汽车价格表包含任何方法,如果需要在XxxContmybatis一级缓存和二级缓存roller类中生成增测试抑郁程度的问卷删改查方法就需要自定义cont分页实体类型符怎么删除roller模板。分页符
使用 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
根据id查询用户 /user/1
更新或者保存用户 /user
查询用户总数 /user/count
根据id删除用户 /use特斯拉车标r分页符怎么设置/1
分页查询用户 /user/page?pageNu分页打印怎么设置m=2&pageS测试手机是否被监控ize=3
批量删除 /user/delete
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对为了简化开发,更多是使Spring用Spring的缓存抽象,Spring的缓存抽mybatis中$和井号区别象的底数据结构教程第5版李春葆答案层概念与JSR107是一致的
Spring 缓存抽象中的重要注解
- @Cacheable:根据方缓存清理法的请求参数对结果进行缓存
- @CacheEvict:清空缓存
- @CachePut:保证方法被调用,同时缓存结果缓存
- @EnableCachispspringcloudring是什么意思ng:开springcloud启基于注解的缓存
每次调用需要缓存功能的方法时,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工程的步骤:
- 创建tesla和factory两张表
- spri数据结构c语言版ng-boot-cache中entity包下创建TJSONespring框架sla和Factory实体类
- 整合Druid数据源
- 配置MyBatis
- 新建TeslaMapp数据结构mybatis一级缓存和二级缓存c语言版第二版课后答案er、Factory数据结构Mapper并增加增删改查方法
- 测试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分页插件实现原理个属性
- cacheNames/valu数据结构实验报告e:指spring定缓存组件的名字
- keymybatis动态sql:缓存数据用的Key,可以用来来指定具体的缓存内容,默认使用的是方法的参数值,也可以通过缓存视频合并SpELjsonobject指定spring漏洞,如”#id”既获取方法的参数id,”#result”为方法执行json数据的结果
- keyGenerator:Key的生成器,可以自己指定Key的生成器组件id,key/keyGeneratospring翻译r二选一使用
- ca缓存的视频在哪cheManager:指定缓存管理器,或者Cachspring翻译eResolver指定获取解析器
- condition:指定符合条件的情况下才会缓存方法的执行结果,如果condition=”#id>0″
- unless:否定缓存,当unle缓存ss的条件为true时,方法的返回值不json格式会被缓mybatis怎么读存,如unless=”缓存视频变成本地视频#result==null”既当结果返回为nmybatiMyBatiss分页插spring框架件实现原理ulmybatis怎么读l时不缓存
- sync:是否使用异步模式
缓存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 |