GVKun编程网logo

mybatis(2) 听课笔记12.09(mybatis教学)

14

本文将介绍mybatis(2)听课笔记12.09的详细情况,特别是关于mybatis教学的相关信息。我们将通过案例分析、数据研究等多种方式,帮助您更全面地了解这个主题,同时也将涉及一些关于0312听课

本文将介绍mybatis(2) 听课笔记12.09的详细情况,特别是关于mybatis教学的相关信息。我们将通过案例分析、数据研究等多种方式,帮助您更全面地了解这个主题,同时也将涉及一些关于0312听课笔记、12.08mvc(3)听课笔记、fastmybatis 1.10.12 发布,mybatis 开发利器、java day56【 Mybatis 延迟加载策略 、 Mybatis 缓存、Mybatis 注解开发 】的知识。

本文目录一览:

mybatis(2) 听课笔记12.09(mybatis教学)

mybatis(2) 听课笔记12.09(mybatis教学)

 mybatis crud增删改查

首先搭建一个普通工程,

mybatis对数据库进行修改时,需要手动提交事务,要不然会回滚事务.

 

如何获取新增记录之后的主键?

第一种方法:

 

 

第二种方法

 

 

 

两种模糊查询方式:

 

第一种预编译,

第二种直接传值

 

多个参数查询

使用map:

 

输入参数名称问题?

 

0312听课笔记

0312听课笔记

课堂纪律

1:首先不能无故迟到、早退、缺席,有事请假,上课签到需要截图发到有道云笔记上(https://note.youdao.com)正常至少4次,一次上课签到,课程中间签到,随机签到,下课签到,都必须附带上课时间和系统时间,最终把链接复制下来发送到小鹅通打卡页面。

2.任务:课前预习笔记+直播的课堂笔记 (任务的话必须在第二天14点前完成,逾期讲无法上传)。

3.老师会时不时微信或者电话咨询情况,不能超过两次不回复,否者留级。

4.每周考核分数小于等于60%记过1次,超过3次,自动留级。

考核

1.不签到不打卡记0分,请假的给2分,少截图或者不合格的每张截图2分

2.没有按时打开的记0分,根据打卡笔记完整合格性打分,一共10分

3.每周测验,满分10分,四舍五入

奖惩

老学员需要交200奖惩基金,新学员在学费里扣,考核积分在85%以上才有奖励,瓜分奖金,不合格的没机会参与

学习方法

1.课前预习,在官网预习下面要学的内容,边看视频边总结,记好预习笔记

2.直播课用来解惑答疑

3.直播课重点也要记笔记

4.遇到问题学会思考,解决不了群里咨询

运维的介绍

岗位职责(目前对运维的要求越来越高趋向于SRE)

 DEVOPS (看作开发(软件工程)、技术运营和质量保障(QA)三者的交集)              SRE(一个SRE工程师基本上需要掌握很多知识:算法,数据结构,编程能力,网络编程,分布式系统,可扩展架构,故障排除。)

 

12.08mvc(3)听课笔记

12.08mvc(3)听课笔记

springmvc处理异常

servlet默认的处理方式

1 如果不加已处理,就会直接抛出异常到页面

2 如何处理

(1 )配置错误处理页面在web.xml

 

编写错误页面给出提示..

 

 

404.jsp>

 

测试>

 

 

 

springmvc如何处理异常

1 定义一个错误处理页面

2 定义异常处理类

(1)

@controller

模拟数组下标越界异常

@exceptionhandler注解帮助我们处理异常信息,使用这个注解修饰一个方法

处理空指针异常和处理算术和下标越界异常

 

以上都是运行运行时异常,可以一起处理所有运行时异常

使用RuntimeExcetion

以上异常代码处理和controller混合不太合适,这种异常处理的方式解决了问题。但是异常处理的代码和控制器代码

在一个controller 里面定义,违反了代码编写的职责单一性。

(2) 可以单独建一个类进行异常处理

@controllerAdvice声明异常处理类>

 

(3)使用

接口来处理异常信息

 

 

springmvc中的拦截器

 

Springmvc和过滤器Filter相似,用于处理器进行预处理和后处理

 

fastmybatis 1.10.12 发布,mybatis 开发利器

fastmybatis 1.10.12 发布,mybatis 开发利器

fastmybatis 1.10.12 发布,本次发布内容如下:

  • Query 类新增条件表达式 query.eq(StringUtils.hasText(name), "name", name);
  • 修复 mysql 下 tinyint (1) 返回 boolean 值问题
  • 检查空字符串默认进行一次 trim。mybatis.empty-string-with-trim=true
  • 查询字段忽略空字符调整为默认开启 mybatis.ignore-empty-string=true

到 1.10.12 版本为止,fastmybatis 实现多个有用的功能

将参数放在对象中查询

参数类,接收前端传递过来的请求参数

@Data
public class UserParam {
	/**
     * userId
     */
    @Condition(index = 0)
    private Integer userId;

	/**
     * 用户名
     */
    @Condition(operator = Operator.like, index = 1)
    private String username;

    /**
     * 注册开始时间
     */
    @Condition(column = "reg_time", operator = Operator.ge, index = 2)
    private Date regBeginTime;

    /**
     * 注册结束时间
     */
    @Condition(column = "reg_time", operator = Operator.le, handlerClass = EndDateConditionValueHandler.class, index = 3)
    private Date regEndTime;
}

controller 类:

// http://localhost:8080/listUser?userId=1&username=jim&regBeginTime=2021-11-12&regEndTime=2021-11-13
@GetMapping("listUser")
public List<TUser> listUser(UserParam userParam) {
    Query query = Query.build(userParam);
    // SELECT id, username, reg_time FROM t_user 
    // WHERE user_id=? AND username LIKE ''%?%'' AND reg_time >= ? AND reg_time <= ?
    List<TUser> list = mapper.list(query);
    return list;
}

Query.build 会自动将请求参数封装成 sql 条件进行查询

对查询出来的结果做进一步加工

Query query = new Query();
    // 添加查询条件
    query.eq("username", "张三")
        .page(1, 2) // 分页查询,按页码分,通常使用这种。
    ;

    // 分页信息
    PageInfo<TUser> pageInfo = mapper.page(query, tUser -> {
        // 对每行数据进行转换
        String username = tUser.getUsername();
        if ("张三".equals(username)) {
            tUser.setUsername("法外狂徒");
        }
        return tUser;
    });

返回指定字段

有时候只需要查询几个字段,并不需要返回所有字段

/**
 * 返回自定义字段,并转换成自定义类集合
 * 
 * <pre>
 * SELECT id, user_address FROM `t_user` t WHERE username = ?
 * </pre>
 */
@Test
public void testGivenColumns2() {
    Query query = new Query();
    // 添加查询条件
    query.eq("username", "张三");

    // 数据库字段
    List<String> columns = Arrays.asList("id", "user_address");
    // 查询,自定义集合
    List<UserVO> list = mapper.listBySpecifiedColumns(columns, query, UserVO.class);

    for (UserVO obj : list) {
        System.out.println(obj);
    }
}

返回指定字段并分页

Query query = new Query()
        .eq("state", 0)
        .page(1, 6);
PageInfo<UserVO> mapPageInfo = mapper.pageBySpecifiedColumns(Arrays.asList("id", "username"), query, UserVO.class);
System.out.println(mapPageInfo);

只返回一个字段

// 返回username列
List<String> usernameList = mapper.listBySpecifiedColumns(Collections.singletonList("username"), query, String.class);
for (String username : usernameList) {
    System.out.println(username);
}

// 返回时间列
List<Date> dateList = mapper.listBySpecifiedColumns(Collections.singletonList("add_time"), query, Date.class);
for (Date date : dateList) {
    System.out.println(date);
}

// 返回decimal列
List<BigDecimal> moneyList = mapper.listBySpecifiedColumns(Collections.singletonList("money"), query, BigDecimal.class);
for (BigDecimal money : moneyList) {
    System.out.println(money);
}

格式化查询参数

在做日期查询时,前端会传一个日期范围:开始日期、结束日期,如:2022-02-012022-02-02,此时对应数据库查询的日期范围是:2022-02-01 00:00:00 ~ 2022-02-02 23:59:59

此时我们需要对结束时间做一下修改:

public class EndDateConditionValueHandler implements ConditionValueHandler {  

    public Object getConditionValue(Object defaultValue, String fieldName, Object target) {
        if (defaultValue == null) {
            return null;
        } else if (defaultValue instanceof Date) {
            // 设置时间部分
            return setHMS((Date)defaultValue, 23, 59, 59);
        } else {
            return defaultValue instanceof LocalDateTime ? setHMS((LocalDateTime)defaultValue, 23, 59, 59) : defaultValue;
        }
    }

    /**
     * 设置时间部分
     *
     * @param date   日期
     * @param hour   时,0~23
     * @param minute 分,0~59
     * @param second 秒,0~59
     * @return 返回新的对象
     */
    public static Date setHMS(Date date, int hour, int minute, int second) {
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(date);
        calendar.set(Calendar.HOUR_OF_DAY, hour);
        calendar.set(Calendar.MINUTE, minute);
        calendar.set(Calendar.SECOND, second);
        calendar.set(Calendar.MILLISECOND, 0);
        return calendar.getTime();
    }

    /**
     * 设置时间部分
     *
     * @param date   日期
     * @param hour   时,0~23
     * @param minute 分,0~59
     * @param second 秒,0~59
     * @return 返回新的对象
     */
    public static LocalDateTime setHMS(LocalDateTime date, int hour, int minute, int second) {
        return date.withHour(hour).withMinute(minute).withSecond(second).withNano(0);
    }
}

然后使用

/**
 * 有效期,开始时间
 * @mock 2021-12-02
 */
@Condition(column = "begin_time", operator = Operator.ge, index = 2)
private Date effectiveBeginTime;

/**
 * 有效期,结束时间
 * @mock 2021-12-09
 */
@Condition(column = "end_time", operator = Operator.le, handlerClass = EndDateConditionValueHandler.class, index = 3)
private Date effectiveEndTime;

更多 demo 请参考:测试用例

关于 fastmybatis

fastmybatis 是一个 mybatis 开发框架,其宗旨为:简单、快速、有效。

  • 零配置快速上手
  • 无需编写 xml 文件即可完成 CRUD 操作
  • 支持 mysql、sqlserver、oracle、postgresql、sqlite
  • 支持自定义 sql,对于基本的增删改查不需要写 SQL,对于其它特殊 SQL(如统计 SQL)可写在 xml 中
  • 支持与 spring-boot 集成,依赖 starter 即可
  • 支持插件编写
  • 轻量级,无侵入性,是官方 mybatis 的一种扩展

java day56【 Mybatis 延迟加载策略 、 Mybatis 缓存、Mybatis 注解开发 】

java day56【 Mybatis 延迟加载策略 、 Mybatis 缓存、Mybatis 注解开发 】

第 1 章 Mybatis 延迟加载策略

1.1 何为延迟加载?

1.2 实现需求

1.3 使用 assocation 实现延迟加载

1.3.1 账户的持久层 DAO 接口

1.3.2 账户的持久层映射文件

1.3.3 用户的持久层接口和映射文件

1.3.4 开启 Mybatis 的延迟加载策略

1.3.5 编写测试只查账户信息不查用户信息。

1.4 使用 Collection 实现延迟加载

1.4.1 在 User 实体类中加入 List 属性

1.4.2 编写用户和账户持久层接口的方法

1.4.3 编写用户持久层映射配置

1.4.4 编写账户持久层映射配置

1.4.5 测试只加载用户信息

第 2 章 Mybatis 缓存

2.1 Mybatis 一级缓存

2.1.1 证明一级缓存的存在

2.1.1.1 编写用户持久层 Dao 接口

2.1.1.2 编写用户持久层映射文件

2.1.1.3 编写测试方法

2.1.2 一级缓存的分析

2.1.3 测试一级缓存的清空

 2.2 Mybatis 二级缓存

2.2.1 二级缓存结构图

 2.2.2 二级缓存的开启与关闭

2.2.2.1 第一步:在 SqlMapConfig.xml 文件开启二级缓存

2.2.2.2 第二步:配置相关的 Mapper 映射文件

2.2.2.3 第三步:配置 statement 上面的 useCache 属性

2.2.3 二级缓存测试

2.2.4 二级缓存注意事项

第 3 章 Mybatis 注解开发

3.1 mybatis 的常用注解说明

3.2 使用 Mybatis 注解实现基本 CRUD

3.2.1 编写实体类

3.2.2 使用注解方式开发持久层接口

3.2.3 编写 SqlMapConfig 配置文件

3.2.4 编写测试方法

3.3 使用注解实现复杂关系映射开发

3.3.1 复杂关系映射的注解说明

3.3.2 使用注解实现一对一复杂关系映射及延迟加载

3.3.2.1 添加 User 实体类及 Account 实体类

3.3.2.2 添加账户的持久层接口并使用注解配置

3.3.2.3 添加用户的持久层接口并使用注解配置

3.3.2.4 测试一对一关联及延迟加载

3.3.3 使用注解实现一对多复杂关系映射

3.3.3.2 编写用户的持久层接口并使用注解配置

3.3.3.3 编写账户的持久层接口并使用注解配置

 3.3.3.4 添加测试方法

3.4 mybatis 基于注解的二级缓存

3.4.1 在 SqlMapConfig 中开启二级缓存支持

3.4.2 在持久层接口中使用注解配置二级缓存

 

关于mybatis(2) 听课笔记12.09mybatis教学的问题就给大家分享到这里,感谢你花时间阅读本站内容,更多关于0312听课笔记、12.08mvc(3)听课笔记、fastmybatis 1.10.12 发布,mybatis 开发利器、java day56【 Mybatis 延迟加载策略 、 Mybatis 缓存、Mybatis 注解开发 】等相关知识的信息别忘了在本站进行查找喔。

本文标签: