使用注解开发

news2024/11/17 13:41:13

使用注解开发

为了方便查看测试结果以及方便调试,先熟悉和配置日志。

日志

日志工厂

如果一个数据库操作出现了异常、需要进行排错,可以通过查看日志的方式实现。

Mybatis内置的日志工厂能够提供日志功能,具体的日志实现有以下几种:

SLF4J
LOG4J(3.5.9 起废弃)
LOG4J2 | JDK_LOGGING
COMMONS_LOGGING
STDOUT_LOGGING
NO_LOGGING

在Mybatis中具体使用哪个日志实现,可以通过配置文件进行配置。如:设置标准日志输出(STDOUT_LOGGING)

<settings>
    <setting name="logImpl" value="STDOUT_LOGGING"/>
</settings>

在这里插入图片描述

logImpl 可选的值有:SLF4JLOG4JLOG4J2JDK_LOGGINGCOMMONS_LOGGINGSTDOUT_LOGGINGNO_LOGGING,或者是实现了接口 org.apache.ibatis.logging.Log ,且构造方法是以字符串为参数的类的完全限定名。


LOG4J

  • 通过Log4j,可以控制日志信息输送的目的地是控制台、文件、GUI组件,甚至是套接口服务器、NT的事件记录器、UNIX Syslog守护进程等。
  • 可以控制每一条日志的输出格式。
  • 通过定义每一条日志信息的级别,能更加细致地控制日志生成过程。这些操作可以通过一个配置文件来灵活配置,而不需要修改应用的代码。
使用步骤

导入依赖

<dependency>
    <groupId>log4j</groupId>
    <artifactId>log4j</artifactId>
    <version>1.2.17</version>
</dependency>

在CLASSPATH下建立log4j.properties

log4j.rootLogger=debug,stdout,D,E
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{yyyy-MM-dd HH\:mm\:ss} %p %c\:%L - %m%n
log4j.appender.D=org.apache.log4j.DailyRollingFileAppender
#修改到自己的路径下
log4j.appender.D.File=coding\JAVAIDEA\log\log.log
log4j.appender.D.Append=true
log4j.appender.D.Threshold=DEBUG
log4j.appender.D.layout=org.apache.log4j.PatternLayout
log4j.appender.D.layout.ConversionPattern=%d{yyyy-MM-dd HH\:mm\:ss} %p %c\:%L - %m%n
log4j.appender.E=org.apache.log4j.DailyRollingFileAppender
#修改到自己的路径下
log4j.appender.E.File=coding\JAVAIDEA\log\error.log
log4j.appender.E.Append=true
log4j.appender.E.Threshold=ERROR
log4j.appender.E.layout=org.apache.log4j.PatternLayout
log4j.appender.E.layout.ConversionPattern=%-d{yyyy-MM-dd HH:mm:ss}  [ %t:%r ] - [ %p ]  %m%n

配置log4j为日志实现

<settings>
    <setting name="logImpl" value="LOG4J"/>
</settings>

使用

(1)创建日志对象(Logger),参数为当前类的Class

static Logger logger = Logger.getLogger(TestUserDao.class);

(2)注意导入的包为下面这个

import org.apache.log4j.Logger;

(3)日志级别

   logger.info("info:进入了testLog4j");
   logger.debug("debug:进入了testLog4j");
   logger.error("error:进入了testLog4j");

在这里插入图片描述


分页

使用分页可以减少数据的处理量。在java层面可以使用RowBounds实现分页,市场上也有一些分页插件如:PageHelper

PageHelper:https://github.com/pagehelper/Mybatis-PageHelper/blob/master/README_zh.md

在数据库中我们通常使用Limit来处理分页

SELECT * FROM user LIMIT startIndex, pageSize;
SELECT * FROM user LIMIT 3; #[0,n]

使用Mybatis实现分页(核心是SQL)

(1)接口

//分页
List<User> getUserByLimit(Map<String, Integer> map);

(2)Mapper.xml

<!--分页-->
<select id="getUserByLimit" parameterType="map" resultType="com.louis.pojo.User">
    select * from mybatis.user limit #{startIndex}, #{pageSize}
</select>

(3)测试

@Test
public void getUserByLimit(){
    SqlSession sqlSession = MybatisUtils.getSqlSession();
    UserMapper mapper = sqlSession.getMapper(UserMapper.class);
    HashMap<String, Integer> map = new HashMap<>();
    map.put("startIndex", 0);
    map.put("pageSize", 2);
    List<User> userByLimit = mapper.getUserByLimit(map);
    for (User user : userByLimit) {
        logger.info(user);
    }
}

使用注解开发

步骤

在接口上实现注解

@Select("select * from user")
List<User> getUsers();

在核心配置文件中绑定接口

<mappers>
	<mapper class="com.louis.dao.UserMapper"/>
</mappers>

使用注解方式完成CRUD

数据库的部分操作需要设置提交事务。在工具类中自动提交事务,这样就不用再次commit

public static SqlSession getSqlSession(){
    return sqlSessionFactory.openSession(true);
}

编写接口,添加注解

public interface UserMapper {
    @Select("select * from user")
    List<User> getUsers();

    //方法存在多个参数,所有的参数前面必须加上@Param注解
    @Select("select * from user where id = #{id}")
    User getById(@Param("id") int id);

    @Insert("insert into user(id, name, pwd) values (#{id}, #{name}, #{pwd})")
    int addUser(User user);

    @Update("update user set name = #{name}, pwd = #{pwd} where id = #{id}")
    int update(User user);

    @Delete("delete from user where id = #{id}")
    int delete(@Param("id") int id);
}

测试

@Test
public void getUserByLimit(){
    SqlSession sqlSession = MybatisUtils.getSqlSession();
    UserMapper mapper = sqlSession.getMapper(UserMapper.class);
    User userById = mapper.getById(1);
    logger.info(userById);
    sqlSession.close();
}

@Test
public void addUser(){
    SqlSession sqlSession = MybatisUtils.getSqlSession();
    UserMapper mapper = sqlSession.getMapper(UserMapper.class);
    mapper.addUser(new User(6, "露露", "cty345"));
    sqlSession.close();
}

@Test
public void update(){
    SqlSession sqlSession = MybatisUtils.getSqlSession();
    UserMapper mapper = sqlSession.getMapper(UserMapper.class);
    mapper.update(new User(1, "Alex", "1234"));
    logger.info(mapper);
    sqlSession.close();
}

@Test
public void delete(){
    SqlSession sqlSession = MybatisUtils.getSqlSession();
    UserMapper mapper = sqlSession.getMapper(UserMapper.class);
    mapper.delete(1);
    logger.info(mapper);
    sqlSession.close();
}

注意:在有多个实体类的接口时,我们必须要将接口注册绑定到我们的核心配置文件中。

@Param()注解

  • 基本类型的参数和String类型需要加上
  • 除了String类型以外的引用类型不需要添加注解
  • 如果只有一个基本类型,可以忽略,但建议加上

Lombok

Lombok项目是一个java库,它可以自动插入到编辑器和构建工具中,增强java的性能。不需要再写getter、setter或equals方法,只要有一个注解,就有一个功能齐全的构建器、自动记录变量等等。

使用步骤

在IDEA中安装Lombok插件

在这里插入图片描述

在项目中导入jar包

在这里插入图片描述

地址:https://mvnrepository.com

使用(标记表示常用)

@Getter and @Setter
@FieldNameConstants
@ToString
@EqualsAndHashCode
@AllArgsConstructor, @RequiredArgsConstructor and @NoArgsConstructor
@Log, @Log4j, @Log4j2, @Slf4j, @XSlf4j, @CommonsLog, @JBossLog, @Flogger, @CustomLog
@Data
@Builder
@SuperBuilder
@Singular
@Delegate
@Value
@Accessors
@Wither
@With
@SneakyThrows
@StandardException
@val
@var
experimental @var
@UtilityClass

在这里插入图片描述

@Data:可以帮助我们生成get, set, tostring, hashcode, equals
@AllArgsConstructor:有参构造方法
@NoArgsConstructor:无参构造方法

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/700376.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

基于Java+Vue前后端分离“魅力”繁峙宣传网站设计实现(源码+lw+部署文档+讲解等)

博主介绍&#xff1a;✌全网粉丝30W,csdn特邀作者、博客专家、CSDN新星计划导师、Java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专…

国产MCU-CW32F030开发学习-ST7735 LCD模块

国产MCU-CW32F030开发学习-ST7735 LCD模块 硬件平台 CW32_48F大学计划板CW32_IOT_EVA物联网开发评估套件0.96 IIC oled模块 ST7735 LCD模块 硬件接口使用的 2.54mm 间距的排针接口&#xff0c;这使用杜邦线进行连接. ST7735参数供电电压3.3~5.5V驱动ICST7735分辨率128x1…

基于antdv封装的特殊复杂表格,带通行描述信息、可展示通行的单元格信息、可跨页选择数据功能、分页功能、可编辑单元格功能

基于antdv封装的特殊复杂表格&#xff0c;带通行描述信息 主要功能&#xff1a; 可展示通行的单元格信息可跨页选择数据功能表单插槽、合计插槽、操作按钮区插槽分页功能接口内请求api可编辑单元格表格组件暴漏出的方法&#xff1a;查询、获取选中数据、接口返回数据、当前表…

消防应急照明和疏散指示系统手动控制的设计与应用

摘要&#xff1a;针对非集中控制型消防应急照明和疏散指示系统在火灾确认后如何手动控制系统的应急启动存在的实际问题&#xff1a;在哪里手动控制&#xff1f;由谁来手动控制&#xff1f;什么时候能够手动控制&#xff1f;提出 3 种手动控制应急启动系统的方案&#xff1a;① …

Fluttter的ClipRRect控件

ClipRRect简介 ClipRRect&#xff08;Rounded Rectangle Clip&#xff09;是Flutter中的一个控件&#xff0c;用于将其子控件剪裁为圆角矩形形状。 使用场景 ClipRRect通常在需要给子控件添加圆角效果时使用。它可以用于创建圆角图片、圆角容器等各种UI元素。 主要属性 bo…

uniapp 开发小程序之实现不同身份展示不同的 tabbar(底部导航栏),附带相关问题解答

效果展示&#xff1a; 引言 在开发过程中逐渐意识到uniapp原生的tabbar可能不能满足开发要求&#xff0c;通过浏览博客才选择使用uView的Tabbar 底部导航栏来实现&#xff0c;我选择用的是2X版本 安装 我是使用Hbuilder插件的方式引入的组件库&#xff0c;安装配置可以看这篇…

CVE-2023-34541 LangChain 任意命令执行

漏洞简介 LangChain是一个用于开发由语言模型驱动的应用程序的框架。 在LangChain受影响版本中&#xff0c;由于load_prompt函数加载提示文件时未对加载内容进行安全过滤&#xff0c;攻击者可通过构造包含恶意命令的提示文件&#xff0c;诱导用户加载该文件&#xff0c;即可造成…

单片机学习 14-DS18B20温度传感器实验

DS18B20 温度传感器实验 ​ 本次实验我们来学习精度较高的外部 DS18B20 数字温度传感器&#xff0c;由于此传感器是单总线接口&#xff0c;所以需要使用 51 单片机的一个 IO 口模拟单总线时序与 DS18B20 通信&#xff0c;将检测的环境温度读取出来。开发板上集成了 1 个 DS18B…

createdTime(new Date()) 数据库时间比实际多八小时

本来是createdTime&#xff08;new Date&#xff08;&#xff09;&#xff09;&#xff0c;一次生成两条数据 一直正常&#xff0c;今天却多八小时 一开始往new Date&#xff08;&#xff09;差八个小时的问题上找&#xff0c; 网上说要 在apprication.yml文件中配置一下数据…

大佬详细讲解:银行核心项目之测试阶段

最近有小伙伴留言说「想了解核心系统建设中&#xff0c;冒烟、SIT、UAT、回归测试的重点&#xff0c;如何设计测试案例&#xff0c;或相关的资料推荐等」。 这个话题很笼统&#xff0c;测试这一块儿除了业务测试&#xff0c;还有性能测试、安全测试等&#xff1b;以及不同的角…

解决pyecharts图表在jupyter notebook无法显示的问题

在jupyter notebook尝试制作pyecharts图表&#xff0c;遇到无法显示的问题&#xff0c;网上查到的结果有各种不同原因&#xff0c;此处一一罗列&#xff0c;便于大家排查并彻底解决问题。 情况1&#xff1a;图表完全无法显示 解决方案&#xff1a;参考此文档 注&#xff1a;…

web自动化测试——xpath和css语法详解(五)

目录 1.css选择器 1.1什么是css选择器&#xff1f; 1.2css选择器语法 2.xpath 1.什么是xpath&#xff1f; 2.什么是XML? 3.XML与HTML 4.节点的概念 5.XPath &#x1f381;更多干货 完整版文档下载方式&#xff1a; 1.css选择器 1.1什么是css选择器&#xff1…

SmaAt-UNet github

来源 SmaAt-UNet github SmaAt-UNet&#xff1a; 使用小型关注网结构的降水预报 论文链接 安装依赖 这个项目使用poetry作为依赖性管理。因此&#xff0c;安装所需的依赖项就像这样简单&#xff1a; conda create --name smaat-unet python3.9 conda activate smaat-unet p…

基于Java学生宿舍管理设计实现(源码+lw+部署文档+讲解等)

博主介绍&#xff1a;✌全网粉丝30W,csdn特邀作者、博客专家、CSDN新星计划导师、Java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专…

正负压自动控制技术在离体肺通气系统中的应用

摘要&#xff1a;模拟肺呼吸过程的离体肺通气控制新方法——真空压力&#xff08;正负压&#xff09;法&#xff0c;目前还停留在理论层面的文献报道&#xff0c;还未见到这种方法的仪器化内容和细节。本文基于这种新方法提出了仪器化实现的具体解决方案&#xff0c;解决方案的…

闲置iPad Pro打造真正的生产力工具!使用vscode编程写代码

文章目录 前言视频教程1. 本地环境配置2. 内网穿透2.1 安装cpolar内网穿透(支持一键自动安装脚本)2.2 创建HTTP隧道 3. 测试远程访问4. 配置固定二级子域名4.1 保留二级子域名4.2 配置二级子域名 5. 测试使用固定二级子域名远程访问6. iPad通过软件远程vscode6.1 创建TCP隧道 7…

Windows电脑玩游戏出现白屏的解决方法

逢年过节玩游戏&#xff0c;周末放假玩游戏&#xff0c;休闲娱乐玩游戏…玩游戏成了不少电脑用户的小乐趣。但是有时候在玩游戏的过程中&#xff0c;会遇到一些令人头疼的问题&#xff0c;比如游戏突然白屏&#xff0c;无法正常进行。这种情况可能会影响游戏体验&#xff0c;甚…

Recurdyn导入x_t格式装配体

装配层次结构&#xff1a;选上表示导入的装配体包括子装配体&#xff0c;再勾选body或者subsystem表示子装配体以零件或者子系统显示在recurdyn中&#xff1b;不选&#xff0c;表示导入的装配体全部以零件显示。

如何修改 Linux 的时区

文章结构 一、查看 Linux 当前时区二、获取时区 TZ 值&#xff08;可选做&#xff09;三、配置 TZ 值四、加载配置并检验是否生效 TZ 是 time zone 的缩写&#xff01; 一、查看 Linux 当前时区 你可以使用如下命令非常容易地就查看到 Linux 系统的当前时区&#xff1a; # 查…

AE插件:能量激光描边光效特效Saber Mac

Saber Mac插件主要用于AE软件中创造制作&#xff1a;能量光束&#xff0c;光剑&#xff0c;激光&#xff0c;传送门&#xff0c;霓虹灯&#xff0c;闪电&#xff0c;电流&#xff0c;朦胧等特效&#xff0c;插件操作直观简单&#xff0c;含有25种不同类型的特效预设&#xff08…