欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

MyBatis(傻瓜式)框架

程序员文章站 2022-04-28 08:31:31
log4j的配置文件: 使用一个log4j.properties的配置文件,会设定log4j的设置信息,例如日志级别,日志输出方式,日志格式等等; # Set root category priority to INFO and its only appender to CONSOLE. # log ......

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日志的输出格式

MyBatis(傻瓜式)框架

 

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();

}

}