学习Mybatis第三天

1. 日志

1.1 日志工厂

如果一个数据库操作出现了异常,我们需要排错,日志就是最好的助手了!

曾今:sout,debug

现在:日志工厂

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

在Mybatis中具体使用哪一个日志实现,在设置中设定

STDOUT_LOGGING 标准日志输出

在mybatis核心配置文件中配置

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

1.2 LOG4J

什么是LOG4J

  • Log4j是Apache的一个开源项目

  • 通过使用Log4j,我们可以控制日志信息输送的目的地:控制台,文本,GUI组件…

  • 我们也可以控制每一条日志的输出格式

  • 通过定义每一条日志信息的级别,我们能够更加细致地控制日志的生成过程。最令人感兴趣的就 是,这些可以通过一个配置文件来灵活地进行配置,而不需要修改应用的代码。

  1. 先导入LOG4J的包
<dependency><groupId>log4j</groupId><artifactId>log4j</artifactId><version>1.2.12</version>
</dependency>
  1. log4j.properties
 #将等级为DEBUG的日志信息输出到console和file这两个目的地,console和file的定义在下面的代码log4j.rootLogger=DEBUG,console,file#控制台输出的相关设置log4j.appender.console = org.apache.log4j.ConsoleAppenderlog4j.appender.console.Target = System.outlog4j.appender.console.Threshold=DEBUGlog4j.appender.console.layout = org.apache.log4j.PatternLayoutlog4j.appender.console.layout.ConversionPattern=[%c]-%m%n#文件输出的相关设置log4j.appender.file = org.apache.log4j.RollingFileAppenderlog4j.appender.file.File=./log/zhang.loglog4j.appender.file.MaxFileSize=10mblog4j.appender.file.Threshold=DEBUGlog4j.appender.file.layout=org.apache.log4j.PatternLayoutlog4j.appender.file.layout.ConversionPattern=[%p][%d{yy-MM-dd}][%c]%m%n#日志输出级别log4j.logger.org.mybatis=DEBUGlog4j.logger.java.sql=DEBUGlog4j.logger.java.sql.Statement=DEBUGlog4j.logger.java.sql.ResultSet=DEBUGlog4j.logger.java.sql.PreparedStatement=DEBUG
  1. 配置log4j为日志的实现
<settings><setting name="logImpl" value="LOG4J"/>
</settings>
      4. LOG4J的使用,直接测试运行刚才的查询

简单使用

  1. 在要使用LOG4J的类中,导入包import org.apache.log4j.Logger;

  2. 日志对象,参数为当前类的class

  static Logger logger = Logger.getLogger(UserDaoTest.class);
  1. 日志级别
 logger.info("info:进入了testlog4j");logger.debug("debug:进入了testlog4j");logger.error("erro:进入了testlog4j");

2.分页

为什么要分页

  • 减少数据的处理量

2.1使用Limit分页

语法 select * from user limit startIndex,pageSize
select * from user limit n;  #[0,n)

使用Mybatis实现分页,核心SQL

  1. 接口
 //分页List<User> getUserByLimit(Map<String,Integer> map);
  1. Mapper.xml
<!--分页--><select id="getUserByLimit" parameterType="map" resultType="User">select * from mybatis.user limit #{startIndex},#{pageSize}</select>
  1. 测试
    @Testpublic void getUserByLimit(){SqlSession sqlSession = MybatisUtils.getSqlSession();UserMapper mapper = sqlSession.getMapper(UserMapper.class);HashMap<String, Integer> stringIntegerHashMap = new HashMap<>();stringIntegerHashMap.put("startIndex",0);stringIntegerHashMap.put("pageSize",2);List<User> userByLimit = mapper.getUserByLimit(stringIntegerHashMap);for (User user : userByLimit) {System.out.println(user);}sqlSession.close();}

2.2 RowBounds

不再使用SQL实现分页

  1. 接口
 //分页2List<User> getUserByRowBounds();
  1. mapper.xml
<!--分页2--><select id="getUserByRowBounds" parameterType="map" resultType="User">select * from mybatis.user</select>
  1. 测试
 @Testpublic void getUserByRowBounds(){SqlSession sqlSession = MybatisUtils.getSqlSession();//RowBounds实现RowBounds rowBounds = new RowBounds(1, 2);//通过java代码层面实现分页List<Object> userList = sqlSession.selectList("com.zhang.dao.UserMapper.getUserByRowBounds",null,rowBounds);for (Object user : userList) {System.out.println(user);}sqlSession.close();}

2.3 分页插件

[MyBatis 分页插件 PageHelper]()

3. 使用注解开发

3.1 面向接口编程

  • 大家之前都学过面向对象编程,也学习过接口,但在真正的开发中,很多时候我们会选择面向接口编程
  • 根本原因 : 解耦 , 可拓展 , 提高复用 , 分层开发中 , 上层不用管具体的实现 , 大家都遵守共同的标准 , 使得开发变得容易 , 规范性更好
  • 在一个面向对象的系统中,系统的各种功能是由许许多多的不同对象协作完成的。在这种情况下, 各个对象内部是如何实现自己的,对系统设计人员来讲就不那么重要了;
  • 而各个对象之间的协作关系则成为系统设计的关键。小到不同类之间的通信,大到各模块之间的交 互,在系统设计之初都是要着重考虑的,这也是系统设计的主要工作内容。面向接口编程就是指按 照这种思想来编程。

关于接口的理解

  • 接口从更深层次的理解,应是定义(规范,约束)与实现(名实分离的原则)的分离。

  • 接口的本身反映了系统设计人员对系统的抽象理解。

  • 接口应有两类:

    1. 第一类是对一个个体的抽象,它可对应为一个抽象体(abstract class);

    2. 第二类是对一个个体某一方面的抽象,即形成一个抽象面(interface);

  • 一个体有可能有多个抽象面。抽象体与抽象面是有区别的。

三个面向区别

  • 面向对象是指,我们考虑问题时,以对象为单位,考虑它的属性及方法 .
  • 面向过程是指,我们考虑问题时,以一个具体的流程(事务过程)为单位,考虑它的实现 .
  • 接口设计与非接口设计是针对复用技术而言的,与面向对象(过程)不是一个问题.更多的体现就是 对系统整体的架构

3.2 利用注解开发

  1. 注解在接口上实现
     @Select("select * from user")List<User> getUsers();
  1. 需要在核心配置文件中绑定接口
 <!--绑定接口--><mappers><mapper class="com.zhang.dao.UserMapper"/></mappers>
  1. 测试
 @Testpublic void test(){SqlSession sqlSession = MybatisUtils.getSqlSession();UserMapper mapper = sqlSession.getMapper(UserMapper.class);List<User> users = mapper.getUsers();for (User user : users) {System.out.println(user);}sqlSession.close();}

本质:反射机制实现

底层:动态代理

3.3 注解的CRUD

  1. 我们可以在工具类创建的时候实现自动提交事务
public static SqlSession getSqlSession(){//此处设置为ture,可以不用手动提交SqlSession sqlSession = sqlSessionFactory.openSession(true);return sqlSession;}
  1. 编写接口,增加注解
//方法存在多个参数,所有参数前面必须加上@Param("id")注解@Select("select * from user where id = #{id}")User getUserByID(@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 updateUser(User user);@Delete("delete from user where id = #{id}")int deleteUser(@Param("id") int id);
  1. 绑定接口
<!--绑定接口--><mappers><mapper class="com.zhang.dao.UserMapper"/></mappers>

【注意:我们必须要将接口注册绑定到我们的核心配置文件中】

  1. 测试类
@Testpublic void test(){SqlSession sqlSession = MybatisUtils.getSqlSession();UserMapper mapper = sqlSession.getMapper(UserMapper.class);
//        List<User> users = mapper.getUsers();
//        for (User user : users) {//            System.out.println(user);
//        }//        User userByID = mapper.getUserByID(1);
//        System.out.println(userByID);//        mapper.addUser(new User(5, "爱飞", "131444"));
//        mapper.updateUser(new User(5,"爱青","121212"));mapper.deleteUser(5);sqlSession.close();}

3.4关于@Param()注解

  • 基本类型的参数或者String类型,需要加上
  • 引用类型不需要加
  • 如果只有一个基本类型的话,可以忽略,建议加上
  • 我们在SQL中引用的就是这里的@Param()中设定的属性名
//方法存在多个参数,所有参数前面必须加上@Param("id")注解@Select("select * from user where id = #{id}")User getUserByID(@Param("id") int id);

学习Mybatis第三天相关推荐

  1. MyBatis学习总结(三)

    MyBatis学习总结(三) 之前对数据库的增删改查是基于XML实现的,现在要基于注解实现. 1 .定义SQL映射接口 这个是我的项目目录 创建一个接口UserMapperI接口 package co ...

  2. 菜鸟Vue学习笔记(三)

    菜鸟Vue学习笔记(三) 本周使用了Vue来操作表单,接下来说下Vue中双向绑定表单元素的用法. Vue中双向绑定是使用的v-model,所谓的双向绑定即改变变量的值,表单元素的值也会改变,同样的,改 ...

  3. python学习之第三课时--基本数据类型及区别,变量

    python学习之第三课时--基本数据类型及区别,变量 基本数据类型及区别 1. 数字类型(int) 数字型--变量值直接是数字,没有双引号""   整数 2. 浮点数(float ...

  4. HTML5 Canvas 学习日志(三)

    2019独角兽企业重金招聘Python工程师标准>>>  HTML5 Canvas 学习日志(三) Canvas的11种合成 蓝色为destination,粉色为source 1 ...

  5. Linux学习之CentOS(三十四)--配置域主DNS服务器

    在上一篇随笔里 Linux学习之CentOS(三十三)--DNS基础及域名系统架构,讲解了DNS的一些基础知识以及域名系统架构,在本篇随笔里将详细地讲解主DNS服务器的配置... 一.DNS服务器的类 ...

  6. Java NIO 学习笔记(三)----Selector

    目录: Java NIO 学习笔记(一)----概述,Channel/Buffer Java NIO 学习笔记(二)----聚集和分散,通道到通道 Java NIO 学习笔记(三)----Select ...

  7. 拒绝从入门到放弃_《鸟哥的 Linux 私房菜 — 基础学习篇(第三版)》必读目录

    目录 目录 前言 关于这本书 必看知识点 最后 前言 相信部分刚进入这个行业的新同学会对一个问题感到疑惑,为什么从培训学校出来的学员不被欢迎? 这里记录下一些我个人的看法(博主也曾有面试新员工的经历) ...

  8. UFLDL深度学习笔记 (三)无监督特征学习

    UFLDL深度学习笔记 (三)无监督特征学习 1. 主题思路 "UFLDL 无监督特征学习"本节全称为自我学习与无监督特征学习,和前一节softmax回归很类似,所以本篇笔记会比较 ...

  9. 学习javascript数据结构(三)——集合

    前言 总括: 本文讲解了数据结构中的[集合]概念,并使用javascript实现了集合. 原文博客地址:学习javascript数据结构(三)--集合 知乎专栏&&简书专题:前端进击者 ...

最新文章

  1. 微软python在线学习_微软再推免费在线 Python 教程,面向数据科学和机器学习初学者...
  2. CSS3颜色渐变模式
  3. python操作文件夹-Python文件操作大全,随机删除文件夹内的任意文件
  4. 802.1x认证EAP包结构
  5. 【市场调研与分析】Intel发力移动安全领域——By Me at 20140613
  6. LSGO软件技术团队内部技术交流
  7. apt mysql 5.1_linux下apt安装mysql导致mysql.user table is damaged
  8. java编写两邮件传输,JAVA邮件发送(文字+图片+附件)【源码】
  9. androidpn的学习研究(五)androidpn-client 常见BUG解决方法
  10. oracle 12c 自增序列
  11. 注入修改代码,白嫖按键精灵ios手机版
  12. Tensorflow-Keras教程
  13. Android项目用到的or比较好的资料
  14. jupyter notebook报错:ModuleNotFoundError: No module named ‘cufflinks‘
  15. 2W字!梳理50道经典计算机网络面试题(收藏版)
  16. java小游戏-扫雷游戏
  17. 路由器总是显示未连接到服务器,链接路由器但一直显示未连接服务器
  18. Python黑客入门:暴力破解zip,零基础也可以学会
  19. RBAC权限管理系统
  20. Ubuntu 20.04 使用 哆点教程

热门文章

  1. 百度地图API显示车辆运行轨迹并动画展示
  2. C# NPIO导出Excel设置宽度背景色
  3. 镜头选型——景深计算
  4. 什么是服务器丢包?恒讯科技教你如何解决
  5. vc 实时显示系统时间
  6. 剑指offer T46把数字翻译成字符串
  7. 4.4 服务器上的 Git - 配置服务器
  8. AJAX步步精心系列(一)AJAX简介
  9. Tomcat出现警告:[RMI TCP Connection(3)-127.0.0.1] org.apache.tomcat.util.descriptor.web.WebXml.setVersion
  10. 教研室 计算机实验室管理制度,实验室规章制度(电子版)