热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

MyBatis学习笔记日志、分页、注解开发、LomBok

MyBatis学习官方文档:mybatis–MyBatis3|简介Github:mybatismybatis-3:MyBatisSQLmapperfr
MyBatis学习
  • 官方文档:mybatis – MyBatis 3 | 简介
  • Github:mybatis/mybatis-3: MyBatis SQL mapper framework for Java (github.com)
  • 参考视频:【狂神说Java】Mybatis最新完整教程IDEA版通俗易懂_哔哩哔哩_bilibili
  • 项目完整代码参考:lexiaoyuan/MyBatisStudy: My MyBatis study notes (github.com)、MyBatisStudy: 我的MyBatis学习笔记 (gitee.com)

日志

在核心配置文件中开启日志支持
在这里插入图片描述

SLF4J | LOG4J | LOG4J2【掌握】 | JDK_LOGGING | COMMONS_LOGGING | STDOUT_LOGGING【掌握】 | NO_LOGGING

日志工厂


<settings><setting name&#61;"logImpl" value&#61;"STDOUT_LOGGING"/>
settings>

在这里插入图片描述

LOG4J


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


  • 先导入log4j的包


<dependency><groupId>log4jgroupId><artifactId>log4jartifactId><version>1.2.17version>
dependency>

  • 建立log4j.properties

### set log levels ###
log4j.rootLogger &#61; DEBUG , C , D , E### console ###
log4j.appender.C &#61; org.apache.log4j.ConsoleAppender
log4j.appender.C.Target &#61; System.out
log4j.appender.C.layout &#61; org.apache.log4j.PatternLayout
log4j.appender.C.layout.ConversionPattern &#61; [mybatis_study][%p] [%-d{yyyy-MM-dd HH\:mm\:ss}] %C.%M(%L) | %m%n### log file ###
log4j.appender.D &#61; org.apache.log4j.DailyRollingFileAppender
log4j.appender.D.File &#61; ./logs/mybatis_study.log
log4j.appender.D.Append &#61; true
log4j.appender.D.Threshold &#61; INFO
log4j.appender.D.layout &#61; org.apache.log4j.PatternLayout
log4j.appender.D.layout.ConversionPattern &#61; [mybatis_study][%p] [%-d{yyyy-MM-dd HH\:mm\:ss}] %C.%M(%L) | %m%n### exception ###
log4j.appender.E &#61; org.apache.log4j.DailyRollingFileAppender
log4j.appender.E.File &#61; ../logs/mybatis_study_error.log
log4j.appender.E.Append &#61; true
log4j.appender.E.Threshold &#61; ERROR
log4j.appender.E.layout &#61; org.apache.log4j.PatternLayout
log4j.appender.E.layout.ConversionPattern &#61; [mybatis_study][%p] [%-d{yyyy-MM-dd HH\:mm\:ss}] %C.%M(%L) | %m%n###mybatis show sql###
log4j.logger.com.ibatis&#61;debug
log4j.logger.com.ibatis.common.jdbc.SimpleDataSource&#61;debug
log4j.logger.com.ibatis.common.jdbc.ScriptRunner&#61;debug
log4j.logger.com.ibatis.sqlmap.engine.impl.SqlMapClientDelegate&#61;debuglog4j.logger.java.sql.Connection&#61;debug
log4j.logger.java.sql.Statement&#61;debug
log4j.logger.java.sql.PreparedStatement&#61;debug

  • 核心配置文件中设置支持

<settings><setting name&#61;"logImpl" value&#61;"LOG4J"/>
settings>

  • 测试类中

//注意导的是这个包
import org.apache.log4j.Logger;//定义属性
static Logger logger &#61; Logger.getLogger(UserDaoTest.class);//测试&#64;Test
public void getUserLogTest(){logger.info("[info]测试方法getUserLogTest成功");logger.debug("[debug]测试方法getUserLogTest成功");logger.error("[error]测试方法getUserLogTest成功");
}

常用的方法&#xff1a;logger.info()logger.debug()logger.error()


分页


使用limit分页

select * from user limit startIndex,pageSize; #startIndex:起始下标&#xff0c;pageSize&#xff1a;每页显示的条数

如&#xff1a;

select * from user limit 1,3;

使用MyBatis实现分页


三步曲&#xff1a;写接口–>写Mapper.xml–>写测试


  1. 写接口

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

  1. 写Mapper.xml

<select id&#61;"getUserByLimit" resultMap&#61;"UserMap" parameterType&#61;"map">select * from mybatis.user limit #{startIndex},#{pageSize};
select>

  1. 写测试

&#64;Test
public void getUserByLimitTest(){SqlSession sqlSession &#61; MyBatisUtil.getSqlSession();UserMapper mapper &#61; sqlSession.getMapper(UserMapper.class);HashMap<String, Integer> map &#61; new HashMap<String, Integer>();map.put("startIndex", 1);map.put("pageSize", 3);List<User> userByLimit &#61; mapper.getUserByLimit(map);for (User user : userByLimit) {System.out.println(user);}sqlSession.close();
}

运行结果&#xff1a;
在这里插入图片描述

使用注解开发


  • 在工具类中开启自动提交事务

public static SqlSession getSqlSession() {return sqlSessionFactory.openSession(true); //参数为true&#xff0c;表示开启自动提交事务
}

  1. 写接口&#xff0c;在接口上实现注解

&#64;Select("select * from user")
List <User> getUserAll();//注&#xff1a;SQL语句中取的参数为&#64;Param()注解中指定的参数名
&#64;Select("select * from user where id&#61;#{uid}")
User getUserById(&#64;Param("uid") int id );//注&#xff1a;引用类型的参数不使用&#64;Param()注解&#xff0c;SQL中通过#{}取出的参数为实体类中的属性
&#64;Insert("insert into user(id, name, pwd) values(#{id},#{name},#{password})")
int insertUser(User user);&#64;Delete("delete from user where id&#61;#{id}")
int deleteUser(&#64;Param("id") int id);

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

不需要使用Mapper.xml&#xff0c;所以需要重新绑定接口&#xff0c;使用class属性

<mappers><mapper class&#61;"com.mybatis.dao.UserMapper"/>
mappers>

  1. 测试

&#64;Test
public void getUserAllTest(){SqlSession sqlSession &#61; MyBatisUtil.getSqlSession();UserMapper mapper &#61; sqlSession.getMapper(UserMapper.class);List<User> userAll &#61; mapper.getUserAll();for (User user : userAll) {System.out.println(user);}sqlSession.close();}&#64;Test
public void getUserByIdTest(){SqlSession sqlSession &#61; MyBatisUtil.getSqlSession();UserMapper mapper &#61; sqlSession.getMapper(UserMapper.class);User userById &#61; mapper.getUserById(3);System.out.println(userById);sqlSession.close();
}&#64;Test
public void insertUserTest(){SqlSession sqlSession &#61; MyBatisUtil.getSqlSession();UserMapper mapper &#61; sqlSession.getMapper(UserMapper.class);mapper.insertUser(new User(6, "HelloInsert", "insertHello"));sqlSession.close();
}&#64;Test
public void deleteUserTest(){SqlSession sqlSession &#61; MyBatisUtil.getSqlSession();UserMapper mapper &#61; sqlSession.getMapper(UserMapper.class);mapper.deleteUser(4);sqlSession.close();
}

  1. 运行结果&#xff1a;
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

在这里插入图片描述

注意&#xff1a;使用注解来映射简单语句会使代码显得更加简洁&#xff0c;然而对于稍微复杂一点的语句&#xff0c;Java 注解就力不从心了&#xff0c;并且会显得更加混乱。

关于&#64;Param()注解

  • 基本类型的参数和String类型&#xff0c;需要加上
  • 引用类型不需要加
  • SQL语句中取的参数为&#64;Param()注解中指定的参数名

LomBok


  • 访问&#xff1a;https://projectlombok.org/

偷懒神器。。。

使用&#xff1a;

  1. 在IDEA中安装LomBok插件
    在这里插入图片描述

  2. 导入Maven依赖

<dependencies><dependency><groupId>org.projectlombokgroupId><artifactId>lombokartifactId><version>1.18.10version>dependency>
dependencies>

  1. 实体类上加注解

&#64;Getter
&#64;Setter
&#64;AllArgsConstructor
&#64;NoArgsConstructor
public class User {private int id;private String name;private String password;
}

  1. 常用注解

&#64;Setter &#xff1a;注解在类或字段&#xff0c;注解在类时为所有字段生成setter方法&#xff0c;注解在字段上时只为该字段生成setter方法。

&#64;Getter &#xff1a;使用方法同上&#xff0c;区别在于生成的是getter方法。

&#64;ToString &#xff1a;注解在类&#xff0c;添加toString方法。

&#64;EqualsAndHashCode&#xff1a; 注解在类&#xff0c;生成hashCode和equals方法。

&#64;NoArgsConstructor&#xff1a; 注解在类&#xff0c;生成无参的构造方法。

&#64;RequiredArgsConstructor&#xff1a; 注解在类&#xff0c;为类中需要特殊处理的字段生成构造方法&#xff0c;比如final和被&#64;NonNull注解的字段。

&#64;AllArgsConstructor&#xff1a; 注解在类&#xff0c;生成包含类中所有字段的构造方法。

&#64;Data&#xff1a; 注解在类&#xff0c;生成setter/getter、equals、canEqual、hashCode、toString方法&#xff0c;如为final属性&#xff0c;则不会为该属性生成setter方法。

&#64;Slf4j&#xff1a; 注解在类&#xff0c;生成log变量&#xff0c;严格意义来说是常量。


推荐阅读
author-avatar
哈铁鸡西青年志愿者
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有