log4j的配置文件:

使用一个log4j.properties的配置文件,会设定log4j的设置信息,例如日志级别,日志输出方式,日志格式等等;

# Set root category priority to INFO and its only appender to CONSOLE.

# log4j.rootCategory=DEBUG, CONSOLE

log4j.rootCategory=DEBUG, CONSOLE, LOGFILE

# CONSOLE is set to be a ConsoleAppender using a PatternLayout.

log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender

log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout

log4j.appender.CONSOLE.layout.ConversionPattern=- %m %c %l %d{yyyy-MM-dd HH:mm:ss}%n

# LOGFILE is set to be a File appender using a PatternLayout.

log4j.appender.LOGFILE=org.apache.log4j.FileAppender

log4j.appender.LOGFILE.File=d:/test.log

log4j.appender.LOGFILE.Append=true

log4j.appender.LOGFILE.layout=org.apache.log4j.PatternLayout

log4j.appender.LOGFILE.layout.ConversionPattern=- %m %l%n

4.3.3日志的输出格式

4.3.4测试

package com.bjsxt.test;

import org.apache.log4j.Logger;

public class TestLog4j {

public static void main(String[] args) {

// 获取日志对象

Logger logger = Logger.getLogger(TestLog4j.class);

// 五个日志级别分别对应五个输出方法, 方法名和级别名一致

logger.fatal("系统崩溃了...");

logger.error("系统崩溃了...");

logger.warn("警告!");

logger.info("消息~");

logger.debug("调试...");

}

}

1. MyBatis对log4j的支持

5.1通过《settings》用于设置MyBatis在运行时的行为方式,例如:缓存,延迟加载日志等等;

<!-- settings标签 -->

<settings>

<!-- 设置MyBatis使用log4j日志支持 -->

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

</settings>

5.2局部调整日志级别,定制日志的输出

# 提高整体日志级别

log4j.rootCategory=ERROR, CONSOLE

# 单独设置SQL语句的输出级别为DEBUG级别

# 方法级别

# log4j.logger.com.bjsxt.mapper.UserMapper.selAll=DEBUG

# 类级别

# log4j.logger.com.bjsxt.mapper.UserMapper=DEBUG

# 包级别

log4j.logger.com.bjsxt.mapper=DEBUG

30.<properties>

6.1功能

用于加载外部的properties文件

<!-- properties加载外部文件 -->

<properties resource="db.properties" />

6.2使用方式

获取properties文件中数据时,要通过${}的方式获取

jdbc.driver=com.mysql.jdbc.Driver

jdbc.url=jdbc:mysql://localhost:3306/java505

jdbc.username=root

jdbc.password=root

<environments default="dev">

<environment id="dev">

<transactionManager type="JDBC" />

<dataSource type="POOLED">

<property name="driver" value="${jdbc.driver}"/>

<property name="url" value="${jdbc.url}"/>

<property name="username" value="${jdbc.username}"/>

<property name="password" value="${jdbc.password}"/>

</dataSource>

</environment>

</environments>

31.《typeAliases》

7.1 功能

用于给java类型定义别名, 方便在配置文件中使用.

7.2 使用方式

a) 给User类型定义别名为u

<!-- typeAliases给类型起别名 -->

<typeAliases>

<!-- 给User类起别名为u -->

<typeAlias type="com.bjsxt.pojo.User" alias="u" />

</typeAliases>

b) <typeAlias>中, 可以省略alias属性, 表示类别名为类名, 大小写不敏感

<typeAliases>

<!-- 给User类起别名, 别名为user -->

<typeAlias type="com.bjsxt.pojo.User" />

</typeAliases>

c) 可以通过<package>给整个包下的所有类定义别名为类名

<typeAliases>

<!-- 给包下的所有类定义别名为类名 -->

<package name="com.bjsxt.pojo" />

</typeAliases>

32.带参数的查询

如果执行的是条件查询, 需要在调用方法时传参数进来, 此时, 可以在select标签中通过parameterType属性指定参数的类型. 而在SQL语句中, 可以通过#{}的方式获取参数.

8.1 一个参数的查询

例如, 根据id查询用户信息. 当只有一个参数时, #{}中可以任意填写.

<!-- parameterType, 参数类型, 用于参数的传递 -->

<select id="selById" resultType="user" parameterType="int">

<!--

#{}用于获取参数

index, 索引, 从0开始

param+数字, param1, param2

-->

select * from t_user where id=#{param1}

</select>

@Test

public void selById() {

SqlSession session = null;

try {

session = new SqlSessionFactoryBuilder()

.build(Resources.getResourceAsStream("mybatis-cfg.xml"))

.openSession();

User user = session.selectOne("com.bjsxt.mapper.UserMapper.selById", 2);

System.out.println(user);

} catch (IOException e) {

e.printStackTrace();

} finally {

session.close();

}

}

8.2 多个参数的查询

多个参数传递时, 由于sqlSession中提供的查询方法只允许传入一个参数, 因此可以对多个参数进行封装. 可以使用对象或Map集合.

8.2.1 封装为对象

<select id="sel" resultType="user" parameterType="user">

<!-- 如果参数是对象, 可以通过#{属性名}来获取 -->

select * from t_user where username=#{username} and password=#{password}

</select>

@Test

public void sel() {

SqlSession session = null;

try {

session = new SqlSessionFactoryBuilder()

.build(Resources.getResourceAsStream("mybatis-cfg.xml"))

.openSession();

User u = new User();

u.setUsername("zhangsan");

u.setPassword("123");

User user = session.selectOne("com.bjsxt.mapper.UserMapper.sel", u);

System.out.println(user);

} catch (IOException e) {

e.printStackTrace();

} finally {

session.close();

}

}

8.2.1 封装为对象

<select id="sel" resultType="user" parameterType="user">

<!-- 如果参数是对象, 可以通过#{属性名}来获取 -->

select * from t_user where username=#{username} and password=#{password}

</select>

@Test

public void sel() {

SqlSession session = null;

try {

session = new SqlSessionFactoryBuilder()

.build(Resources.getResourceAsStream("mybatis-cfg.xml"))

.openSession();

User u = new User();

u.setUsername("zhangsan");

u.setPassword("123");

User user = session.selectOne("com.bjsxt.mapper.UserMapper.sel", u);

System.out.println(user);

} catch (IOException e) {

e.printStackTrace();

} finally {

session.close();

}

}

8.2.2 封装为Map

<select id="sel" resultType="user" parameterType="map">

<!-- 如果参数是map, 可以通过#{key}来获取 -->

select * from t_user where username=#{uname} and password=#{upwd}

</select>

@Test

public void sel() {

SqlSession session = null;

try {

session = new SqlSessionFactoryBuilder()

.build(Resources.getResourceAsStream("mybatis-cfg.xml"))

.openSession();

Map<String, String> map = new HashMap<>();

map.put("uname", "lisi");

map.put("upwd", "123");

User user = session.selectOne("com.bjsxt.mapper.UserMapper.sel", map);

System.out.println(user);

} catch (IOException e) {

e.printStackTrace();

} finally {

session.close();

}

}

MyBatis(傻瓜式)框架的更多相关文章

  1. .NET Core开发者的福音之玩转Redis的又一傻瓜式神器推荐

    作者:依乐祝 原本链接:https://www.cnblogs.com/yilezhu/p/9947905.html 引子 为什么写这篇文章呢?因为.NET Core的生态越来越好了!之前玩转.net ...

  2. Webpack傻瓜式指南(转)

    add by zhj: 作者写了三篇文章,这是第一篇幅,另外两篇参见 https://zhuanlan.zhihu.com/p/20397902 https://zhuanlan.zhihu.com/ ...

  3. [翻译] C# 8.0 新特性 Redis基本使用及百亿数据量中的使用技巧分享(附视频地址及观看指南) 【由浅至深】redis 实现发布订阅的几种方式 .NET Core开发者的福音之玩转Redis的又一傻瓜式神器推荐

    [翻译] C# 8.0 新特性 2018-11-13 17:04 by Rwing, 1179 阅读, 24 评论, 收藏, 编辑 原文: Building C# 8.0[译注:原文主标题如此,但内容 ...

  4. myBatis+Spring+SpringMVC框架面试题整理

    myBatis+Spring+SpringMVC框架面试题整理(一) 2018年09月06日 13:36:01 新新许愿树 阅读数 14034更多 分类专栏: SSM   版权声明:本文为博主原创文章 ...

  5. 实现 MyBatis 流式查询的方法

    基本概念流式查询指的是查询成功后不是返回一个集合而是返回一个迭代器,应用每次从迭代器取一条查询结果.流式查询的好处是能够降低内存使用.如果没有流式查询,我们想要从数据库取 1000 万条记录而又没有足 ...

  6. MyBatis 流式查询

    流式查询指的是查询成功后不是返回一个集合而是返回一个迭代器,应用每次从迭代器取一条查询结果.流式查询的好处是能够降低内存使用. 流式查询的过程当中,数据库连接是保持打开状态的,因此要注意的是:执行一个 ...

  7. webpack之傻瓜式教程

    接触webpack也有挺长一段时间了,公司的项目也是一直用着webpack在打包处理,但前几天在教新人的情况下,遇到了一个问题,那就是:尽管网上的webpack教程满天飞,但是却很难找到一个能让新人快 ...

  8. NOSDK--关于android傻瓜式的分包设想

    一直以来,我总是以“够用就好”为理由,很少再维护过自己的一键打包的项目.最近接触了棱镜的sdk,感觉将apk包上传到棱镜服务器,后台来进行分包这种简单的方式很招人待见. 原理似乎不难,apk即zip压 ...

  9. 傻瓜式操作Nagios

    傻瓜式操作Nagios   不少接触Nagios的朋友都会觉得安装配置困难,应用在企业网中所花费的时间成本很高,下面通过OSSIM来搞定它把. 为了节省资源,首先在淘汰的机器上安装一个低版本的OSSI ...

  10. 一个响应式框架——agera

    Google在上周开源了一个响应式框架——agera,相信它会慢慢地被广大程序员所熟知.我个人对这样的技术是很感兴趣的,在这之前也研究过RxJava,所以在得知Google开源了这样的框架之后第一时间 ...

随机推荐

  1. Hadoop学习笔记(二):简单操作

    1. 启动namenode和datanode,在master上输入命令hdsf dfsadmin -report查看整个集群的运行情况(记得关闭防火墙) 2. 输入命令查看hadoop监听的端口,ne ...

  2. windows系统下发布python模块到pypi

    1. 在pypi.python.org网站注册一个用户,记住用户名和密码. 2. 编写需要上传模块的源代码,文件名为:skyersfirstpythonmodule.py 3. 新建文件夹,名称为sk ...

  3. 【EF6学习笔记】(十一)实施继承

    上篇链接:EF学习笔记(十) 处理并发 本篇原文链接:Implementing Inheritance 面向对象的世界里,继承可以很好的重用代码.在本章就对Instructor和Student两个类进 ...

  4. 项目实战4—HAProxy实现高级负载均衡实战和ACL控制

     haproxy实现高级负载均衡实战 环境:随着公司业务的发展,公司负载均衡服务已经实现四层负载均衡,但业务的复杂程度提升,公司要求把mobile手机站点作为单独的服务提供,不在和pc站点一起提供服务 ...

  5. 项目详解4—haproxy 反向代理负载均衡

    一.企业服务架构图及负载均衡的要求 1.场景说明 在企业生产环境中,每天会有很多的需求变更,比如增加服务器.新业务上线.url路由修改.域名配置等等,对于前端负载均衡设备来说,容易维护,复杂度低,是首 ...

  6. 使用docker部署flask遇到的问题

    容器内能访问,但是外网映射了端口怎么也访问不了 解决方法: app.run() 添加参数host='0.0.0.0'

  7. 【Vue.js】基于vue的实时搜索,在结果中高亮显示关键词

    一.搜素效果如下: 二.核心 1)利用oninput属性来触发搜素功能 2)利用RegExp来对字符串来全局匹配关键字,利用replace方法来对匹配的关键字进行嵌入高亮的<span class ...

  8. [Redux] redux的概述

    redux 的概述 随着 javascript 单页应用的不断发展,javascript 需要管理比以往都要多的状态,管理不断变化的 state 非常困难,数据流动不断变的模糊不可预测,代码的开发与维 ...

  9. 小型音乐播放器插件APlayer.js的简单使用例子

      本篇博客将会给出一个小型音乐播放器插件APlayer.js的使用例子.关于APlayer.js的具体介绍和Github地址,可以参考: https://github.com/MoePlayer/A ...

  10. C# winform自动更新 (附 demo下载)

    随着需求的变化,如果Server每次更新出新的内容,Client都要重新安装的话. 太过于复杂化.  所以自动更新是很有必要的. 一..NET自带的更新方式    以服务器端为主  (自动更新,微软爸 ...