在mybatis中使用log4j

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/qq_42681787/article/details/101605300

1.log4j详解
链接:https://blog.csdn.net/eagleuniversityeye/article/details/80582140

对于log4j的使用详解,这篇链接文章的博主总结的很详细!可以参考一下!

2.在mybatis中开启log4j日志步骤:

1.在 mybatis 全局配置文件中通过标签控制 mybatis 全局开关

2.在 mybatis.xml 中开启 log4j

2.1 必须保证有 log4j.jar

2.2 在 src 下有 log4j.properties

下面是我的配置文件(仅供参考)

# Set log4j.rootCategory=ERROR, CONSOLE ,LOGFILE
log4j.rootCategory=ERROR,LOGFILE
log4j.logger.a.b=DEBUG
#log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender
#log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout
#log4j.appender.CONSOLE.layout.ConversionPattern=%C %p  %m %n

log4j.appender.LOGFILE=org.apache.log4j.FileAppender
log4j.appender.LOGFILE.File=C:/Users/zhou'en'xian/Desktop/logs.txt
log4j.appender.LOGFILE.Append=true
log4j.appender.LOGFILE.layout=org.apache.log4j.PatternLayout
log4j.appender.LOGFILE.layout.ConversionPattern=%d{YYYY-MM-dd HH:mm:ss} %C %m %L %n 

2.3在mybatis的全局配置文件按中的第一行加上如下代码(具体原因请参考官方文档)

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

此时全局配置文件如下(仅供参考);

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration
  PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
  "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<settings>
		<setting name="logImpl" value="LOG4J"/>
	</settings>
  <environments default="development">
    <environment id="development">
      <transactionManager type="JDBC"/>
      <!-- transationManager的type取值:JDBC:使用原生的JDBC进行事务管理/MANAGED
      2.MANAGED 把事务管理转交给其他容器(spring); -->
      <dataSource type="POOLED">
      <!-- dataSource的type取值:
      1. POOLED 使用数据库连接池
      2. UNPOOLED 不实用数据库连接池,和直接使用 JDBC 一样
      3.JNDI :java 命名目录接口技术.
       -->
        <property name="driver" value="com.mysql.cj.jdbc.Driver"/>
        <property name="url" value="jdbc:mysql://127.0.0.1:3306/my?useUnicode=true&amp;characterEncoding=UTF-8&amp;useSSL=false&amp;serverTimezone=GMT%2B8"/>
        <property name="username" value="root"/>
        <property name="password" value="xxxxxx"/>
      </dataSource>
    </environment>
  </environments>
  <mappers>
    <mapper resource="my/mapper.xml"/>
  </mappers>
</configuration> 

4.测试

xxxmapper.xml如下: 

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
  PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
  "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
  <!--namespace是类名的全路径(包名+类名)  -->
<mapper namespace="a.b">
<!-- id的值是类中的方法名;parameterType:是传入方法的参数类型;
resultType:方法的返回值类型(注意:如果方法返回值是 list,在 resultType 中写 List 的泛型,
如果泛型为类,必须写类的全路径(包名+类名)因为 mybatis是对 jdbc 封装,一行一行读取数据) -->
  <select id="name"  resultType="dao.Person">
    select * from person
  </select>
  <select id="abc" resultType="dao.Person">
  select * from person where id=9
  </select>
  <select id="abcd" resultType="dao.Person">
  select * from person where age=18
  </select>
</mapper>

测试代码如下: 

import java.io.IOException;
import java.io.InputStream;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;

import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;


public class MybatisDemo {

	public static void main(String[] args) throws IOException {
		InputStream is =Resources.getResourceAsStream("mybatis.xml");
		//使用工厂设计模式
		SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(is);
		//生产 SqlSession
		SqlSession session=factory.openSession();
		/**List<Person> list =session.selectList("dao.Interface.name");
		//表示数据查询结果封装在集合中
		for (Person flower : list) {
						System.out.println(flower.toString());
						}**/
		//Person person=session.selectOne("a.b.abc");
		//System.out.println(person.toString());
		Map<String,Person>map=session.selectMap("a.b.abcd","tele");
		/*tele表示数据表中的列作为map中的Key的泛型
		a.b.abcd定位mapper.xml中的SQL语句
		其中该SQL语句中的resultType的值决定map中的value的泛型*/
		Set<String>set=map.keySet();
		Iterator<String> it=set.iterator();
		while(it.hasNext()) {
			String key=it.next();
			Person value=map.get(key);
			System.out.println(key+":"+value.toString());
		};
		
		session.close(); 
		/**
		 * 1.selectList() 返回值为 List<resultType 属性控制>
		 1.1 适用于查询结果都需要遍历的需求
		List<Flower> list = session.selectList("a.b.selAll");
		for (Flower flower : list) {
				System.out.println(flower.toString());
				}
		2.selectOne() 返回值 Object
		2.1 适用于返回结果只是变量或一行数据时
		int count = session.selectOne("a.b.selById");
		System.out.println(count);
		3.selectMap() 返回值 Map
		3.1 适用于需要在查询结果中通过某列的值取到这行数据的需求.
		 3.2 Map<key,resultType 控制>
		Map<Object, Object> map = session.selectMap("a.b.c","name123");
		System.out.println(map);**/
		
	}

}

 测试结果:

1.控制台

2.文件夹

猜你喜欢

转载自blog.csdn.net/qq_42681787/article/details/101605300