MyBatis(傻瓜式)框架
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(傻瓜式)框架的更多相关文章
- .NET Core开发者的福音之玩转Redis的又一傻瓜式神器推荐
		
作者:依乐祝 原本链接:https://www.cnblogs.com/yilezhu/p/9947905.html 引子 为什么写这篇文章呢?因为.NET Core的生态越来越好了!之前玩转.net ...
 - Webpack傻瓜式指南(转)
		
add by zhj: 作者写了三篇文章,这是第一篇幅,另外两篇参见 https://zhuanlan.zhihu.com/p/20397902 https://zhuanlan.zhihu.com/ ...
 - [翻译] C# 8.0 新特性 Redis基本使用及百亿数据量中的使用技巧分享(附视频地址及观看指南)  【由浅至深】redis 实现发布订阅的几种方式  .NET Core开发者的福音之玩转Redis的又一傻瓜式神器推荐
		
[翻译] C# 8.0 新特性 2018-11-13 17:04 by Rwing, 1179 阅读, 24 评论, 收藏, 编辑 原文: Building C# 8.0[译注:原文主标题如此,但内容 ...
 - myBatis+Spring+SpringMVC框架面试题整理
		
myBatis+Spring+SpringMVC框架面试题整理(一) 2018年09月06日 13:36:01 新新许愿树 阅读数 14034更多 分类专栏: SSM 版权声明:本文为博主原创文章 ...
 - 实现 MyBatis 流式查询的方法
		
基本概念流式查询指的是查询成功后不是返回一个集合而是返回一个迭代器,应用每次从迭代器取一条查询结果.流式查询的好处是能够降低内存使用.如果没有流式查询,我们想要从数据库取 1000 万条记录而又没有足 ...
 - MyBatis 流式查询
		
流式查询指的是查询成功后不是返回一个集合而是返回一个迭代器,应用每次从迭代器取一条查询结果.流式查询的好处是能够降低内存使用. 流式查询的过程当中,数据库连接是保持打开状态的,因此要注意的是:执行一个 ...
 - webpack之傻瓜式教程
		
接触webpack也有挺长一段时间了,公司的项目也是一直用着webpack在打包处理,但前几天在教新人的情况下,遇到了一个问题,那就是:尽管网上的webpack教程满天飞,但是却很难找到一个能让新人快 ...
 - NOSDK--关于android傻瓜式的分包设想
		
一直以来,我总是以“够用就好”为理由,很少再维护过自己的一键打包的项目.最近接触了棱镜的sdk,感觉将apk包上传到棱镜服务器,后台来进行分包这种简单的方式很招人待见. 原理似乎不难,apk即zip压 ...
 - 傻瓜式操作Nagios
		
傻瓜式操作Nagios 不少接触Nagios的朋友都会觉得安装配置困难,应用在企业网中所花费的时间成本很高,下面通过OSSIM来搞定它把. 为了节省资源,首先在淘汰的机器上安装一个低版本的OSSI ...
 - 一个响应式框架——agera
		
Google在上周开源了一个响应式框架——agera,相信它会慢慢地被广大程序员所熟知.我个人对这样的技术是很感兴趣的,在这之前也研究过RxJava,所以在得知Google开源了这样的框架之后第一时间 ...
 
随机推荐
- 【翻译】ES6生成器简介
			
原文地址:http://davidwalsh.name/es6-generators ES6生成器全部文章: The Basics Of ES6 Generators Diving Deeper Wi ...
 - Python GUI之tkinter窗口视窗教程大集合(看这篇就够了)
			
一.前言 由于本篇文章较长,所以下面给出内容目录方便跳转阅读,当然也可以用博客页面最右侧的文章目录导航栏进行跳转查阅. 一.前言 二.Tkinter 是什么 三.Tkinter 控件详细介绍 1. T ...
 - 【教程】在UEFI启动方式下,通过GRUB2引导,直接从硬盘ISO文件安装Windows10和Ubuntu双系统
			
本文为作者原创,允许转载,但必须注明原文地址: https://www.cnblogs.com/byronxie/p/9949789.html 动机 最近在自学MIT6.828 Operating S ...
 - java与json,一篇就够了
			
本示例使用的json包为阿里的fastjson 首先写三个工具类(seter和geter方法省略,自行补上): /** * 屏幕实体类 */ public class Screen { private ...
 - Java中的Interrupt使用
			
初心 用interrupt中断程序 初步实现 public class InterruptionInJava implements Runnable{ @Override public void ru ...
 - docker使用ssh远程连接容器(没钱买服务器又不想安装虚拟机患者必备)
			
突然有需求,需要使用go语言写个ssh终端连接功能,这时候手上又没有服务器,虚拟机也没有,正好使用docker搞起来 docker容器开启sshd服务,模拟服务器 我们知道docker是可以用exec ...
 - 【ASP.NET MVC系列】浅谈ASP.NET 页面之间传值的几种方式
			
ASP.NET MVC系列文章 [01]浅谈Google Chrome浏览器(理论篇) [02]浅谈Google Chrome浏览器(操作篇)(上) [03]浅谈Google Chrome浏览器(操作 ...
 - 解读经典-《C#高级编程》第七版-Chapter1-.Net体系结构-Page6-13
			
01 中间语言(IL) .Net中间语言(IL)的特性,很大程度上来自于要支持多语言互操作性.要支持多语言互操作性,是因为微软想搞一个大事情,将它的老产品线VB和VC++,VJ++都装入.Net架构中 ...
 - pxe+http+kickstart实验原理
			
1.说明 所谓的PXE是Preboot Execution Environment的缩写,字面上的意思是开机前的执行环境. 要实现pxe,至少需要3个服务 2.流程 注意:全部用的udp封装 1)cl ...
 - [转]chrome浏览器中 F12 功能的简单介绍
			
本文转自:https://www.cnblogs.com/zhuzhubaoya/p/9758648.html chrome浏览器中 F12 功能的简单介绍 由于F12是前端开发人员的利器,所以我自己 ...