2021-06-01总结

本文介绍了Spring Boot整合MySQL、MyBatis和Shiro的方法。在MySQL配置中说明了数据源和MyBatis XML文件扫描位置的配置;MyBatis部分介绍了插入、查询标签及resultMap标签的使用;Spring Boot部分提及了mapper接口、server的impl、工具类和配置类的注解使用;Shiro部分阐述了自定义realm及相关认证方法的实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  1. spring boot 整合mysql和mybatis
    整合mysql 和shiro
    mysql:
    配置数据源
spring:
   datasource:
       url: jdbc:mysql://localhost:3306/hwx?useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull&autoReconnect=true&allowMultiQueries=true&useSSL=true&serverTimezone=GMT%2B8
    username: root
    password: 123456
    filters: wall,mergeStat
    type: com.alibaba.druid.pool.DruidDataSource
    druid:
      filters: stat,wall
      stat-view-servlet:
        enabled: true
        login-username: hwxadmin
        login-password: hwx001125
      web-stat-filter:
        enabled: true
        urlpattern: /*
        exclusions: '*.js,*.jgp,*.png,*.gif,*.css,*.ico,/druid/*'
      filter:
        slow-sql-millis: 1000
        logslowsql: true
        enabled: true

配置mybatis时,需要配置xml文件的扫描位置
只需要在yml文件中配置

mybatis-plus:
  mapper-locations: classpath:myBatis/*.xml

顶格即可

mybatis
配置mybatis的xml时,
插入用select标签,返回值为Integer,
查询用select标签,返回值为实体类

配置数据库和实体类的关系可以用resultMap标签
property为数据库返回的字段名,column为相对应的实体类的字段名

xml的映射接口mapper需要继承 BaseMapper< shirouser > ,这个shirouser为实体类

spring boot

1:
mapper接口需要@mapper注解否则会报找不到bean的错误,如果标注了注解还是报错,可以在启动类上添加一个扫描mapper的注解@MapperScan(basePackages = “com.demo.mapper”)

2:
server的impl需要添加@service的注解

3:
自己定义的工具类添加@Component注解
需要在工具类中使用其他工具类时,不能自己new,需要在wenconfig中添加@bean ,将其加入到spring ioc 或者

    private  static  bookmainmapper bookmainmapper;


    private  static  bookmainService bookmainService;

   @Autowired
   public void  setBookmainmapper(bookmainmapper bookmainmapper){
       bookdate.bookmainmapper=bookmainmapper;
   }

   @Autowired
   public  void setBookmainService(bookmainService bookmainService){
       bookdate.bookmainService=bookmainService;
   }
    public bookdate() {
    }

4:
配置类记得加上@Configuration注解

shiro:

配置shiroconfig:
自定义realm继承AuthorizingRealm接口,然后在webconfig中@bean,将其加入到spring ioc

然后将realm加入到DefaultWebSecurityManager,再将,DefaultWebSecurityManager加入到ShiroFilterFactoryBean即可

自定义的realm继承AuthorizingRealm,实现两个方法
1:
doGetAuthorizationInfo
这个方法用来做权限认证

2:
doGetAuthenticationInfo
这个方法用来做登录认证

<think>好的,我现在需要处理用户的问题,他们提供了一个日期格式“2023-06-19 23:20:06”,并希望了解如何在MySQL中批量修改这样的日期,仅更改年份。首先,回顾之前的对话,用户之前询问过如何批量修改日期中的年份,我已经给出了使用DATE_ADDDATE_FORMAT的方法,以及步骤注意事项。现在用户提供了一个具体的日期格式,可能需要确认这个格式是否与MySQL兼容,或者是否需要特别处理。 首先,我需要确认用户提供的日期格式是否符合MySQL的日期时间格式。MySQL支持的标准日期时间格式是'YYYY-MM-DD HH:MM:SS',用户提供的“2023-06-19 23:20:06”完全符合这个格式,因此存储为DATETIME或TIMESTAMP类型是没有问题的。接下来,用户可能需要知道如何针对这种格式的字段进行年份修改。 用户之前已经得到过两种方法,现在可能希望针对这个具体例子进行说明。我需要确保回答中提到的两种方法(DATE_ADDDATE_FORMAT)仍然适用,并且给出具体的示例。比如,如果用户想将2023年的日期改为2024年,可以展示如何用这两种方法实现。 另外,需要考虑用户是否有其他潜在需求。例如,他们是否想将特定年份的所有记录都修改为另一个年份,或者是否有条件地修改某些记录。在之前的回答中,提到了WHERE子句来筛选特定年份的记录,这里可能需要再次强调,确保用户明白如何正确筛选数据,尤其是在处理大量数据时使用索引优化,避免全表扫描。 同时,需要注意用户提到的日期包含时间部分,即“23:20:06”。在修改年份时,时间部分是否需要保留。根据之前的方法,使用DATE_ADD会保留时间,而DATE_FORMAT方法也是提取并保留时间部分,所以这两种方法都是适用的。不过,可能需要提醒用户,如果字段是DATE类型而不是DATETIME,时间部分会被截断,但根据提供的例子,用户可能使用的是DATETIME类型。 此外,用户可能关心闰年的问题,比如原日期是2020-02-29,修改到非闰年如何处理。在之前的回答中已经提到过这种情况,可能需要在这里再次简要提及,确保用户了解不同方法对闰日的影响,例如DATE_ADD会自动调整,而DATE_FORMAT方法可以强制设置为特定日期如02-28。 另外,用户可能需要具体的SQL示例,将他们的日期格式代入进去,比如替换表名、字段名具体年份。例如,如果他们有一个表叫orders,日期字段是order_date,想要将2023年的所有订单日期改为2024年,可以给出具体的UPDATE语句。 还需要考虑数据备份测试的重要性,尤其是在生产环境中操作前,建议用户先备份数据或在测试环境验证。此外,事务处理分批更新对于大表来说很重要,避免长时间锁表影响性能,这部分也需要提及。 最后,可能需要检查是否有其他特殊情况,比如时区问题。如果MySQL服务器时区与存储数据的时区不一致,可能导致日期时间转换错误,因此在操作前确保时区设置正确,或者在SQL语句中考虑时区转换。 总结一下,我需要确保回答涵盖以下几点: 1. 确认用户提供的日期格式符合MySQL标准。 2. 提供具体示例,使用DATE_ADDDATE_FORMAT方法修改年份。 3. 强调WHERE子句的正确使用,特别是日期范围筛选以优化性能。 4. 提及备份测试的重要性。 5. 处理可能出现的闰年问题。 6. 考虑时区设置数据类型的注意事项。 7. 给出分批更新的建议,避免锁表。 在组织回答时,结构需要清晰,分步骤说明,确保用户能逐步理解操作。同时,使用用户提供的具体日期格式作为例子,使说明更直观。可能还需要对比两种方法的优缺点,帮助用户根据实际情况选择合适的方法。比如,DATE_ADD简单但可能自动调整日期,而DATE_FORMAT更精确但稍微复杂。</think>--- ### **一、日期格式解析** 你提供的日期 `2023-06-19 23:20:06` 是标准的 MySQL **DATETIME 格式**,符合 `YYYY-MM-DD HH:MM:SS` 规范,可直接存储在 `DATETIME` 或 `TIMESTAMP` 类型的字段中。 --- ### **二、批量修改年份的两种方法** 以下方法均保留原日期的月份、日时间部分,仅修改年份。 #### **方法1:`DATE_ADD` 函数(简单递增)** **场景**:将年份增加或减少固定值(例如将 2023 改为 2024)。 **示例**:将所有 2023 年的日期改为 2024 年: ```sql UPDATE 表名 SET 日期字段 = DATE_ADD(日期字段, INTERVAL 1 YEAR) WHERE 日期字段 BETWEEN '2023-01-01 00:00:00' AND '2023-12-31 23:59:59'; ``` - **优点**:语法简单,自动处理闰年问题(例如 `2020-02-29` 会调整为 `2021-02-28`)。 - **缺点**:无法直接指定目标年份(如从 2023 改为 2025 需调整间隔为 `2 YEAR`)。 --- #### **方法2:`DATE_FORMAT` 字符串重组(精确控制)** **场景**:直接指定目标年份(例如强制将年份改为 2024)。 **示例**:将 2023 年的日期改为 2024 年,保留原月、日时间: ```sql UPDATE 表名 SET 日期字段 = STR_TO_DATE( CONCAT('2024-', DATE_FORMAT(日期字段, '%m-%d %H:%i:%s')), '%Y-%m-%d %H:%i:%s' ) WHERE YEAR(日期字段) = 2023; ``` - **优点**:精确控制目标年份,避免闰年自动修正(例如 `2023-02-28` 直接改为 `2024-02-28`)。 - **缺点**:需手动处理非法日期(如 `2023-02-29` 改为 `2024-02-29` 会报错)。 --- ### **三、操作步骤** 1. **备份数据**(避免误操作): ```sql CREATE TABLE 备份表名 AS SELECT * FROM 原表名 WHERE YEAR(日期字段) = 2023; ``` 2. **验证筛选条件**: ```sql -- 检查待修改的数据范围 SELECT * FROM 表名 WHERE 日期字段 >= '2023-01-01' AND 日期字段 < '2024-01-01'; ``` 3. **执行更新**: - 根据需求选择上述方法之一运行 `UPDATE` 语句。 4. **检查结果**: ```sql -- 确认年份已修改 SELECT 日期字段 FROM 表名 WHERE YEAR(日期字段) = 2024; ``` --- ### **四、注意事项** 1. **非法日期处理** - 若原日期为 `2023-02-29`(非法日期),方法 2 需手动修正: ```sql UPDATE 表名 SET 日期字段 = CASE WHEN DATE_FORMAT(日期字段, '%m-%d') = '02-29' THEN '2024-02-28' ELSE STR_TO_DATE(CONCAT('2024-', DATE_FORMAT(日期字段, '%m-%d %H:%i:%s')), '%Y-%m-%d %H:%i:%s') END WHERE YEAR(日期字段) = 2023; ``` 2. **索引优化** - 若字段有索引,避免使用 `YEAR(日期字段)` 筛选,改用范围查询提升性能: ```sql WHERE 日期字段 >= '2023-01-01' AND 日期字段 < '2024-01-01'; ``` 3. **时区一致性** - 确保 MySQL 会话时区与数据时区一致: ```sql SET time_zone = '+08:00'; -- 例如东八区(北京时间) ``` --- ### **五、扩展应用** **修改为任意年份** 将 `CONCAT('2024-', ...)` 中的 `2024` 替换为任意目标年份即可,例如改为 1990 年: ```sql CONCAT('1990-', DATE_FORMAT(日期字段, '%m-%d %H:%i:%s')) ``` --- 通过上述方法,可安全高效地修改日期字段的年份,建议先在测试环境验证逻辑,再操作生产数据。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

爷可是个天才

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值