数据持久层框架MyBatis+Log4j的入门、配置与应用

什么是数据持久层

将内存中的数据保存到磁盘上加以固化,而持久化的实现过程则大多通过各种关系数据库来完成。

MyBatis简介

MyBatis 是一款持久层框架,支持定制化 SQL、存储过程以及高级映射。MyBatis 可以使用简单的 XML 或注解来配置和映射原生信息,将接口和 Java 的 POJOs(Plain Old Java Objects,普通的 Java对象)映射成数据库中的记录。

1. Maven配置MyBatis依赖

<dependencies> 
	<dependency>
        <groupId>org.mybatis</groupId>
        <artifactid>mybatis</artifactid> 
        <version>3.3.0</version>
	</dependency>
 

 <!-- 添加log4j依赖-->
<dependency>
	<groupId>org.slf4j</groupId>
	<artifactId>slf4j-api</artifactId>
	<version>1.6.6</version>
</dependency>
<dependency>
	<groupId>org.slf4j</groupId>
	<artifactId>slf4j-log4j12</artifactId>
	<version>1.6.6</version>
</dependency>
<dependency>
	<groupId>log4j</groupId>
	<artifactId>log4j</artifactId>
	<version>1.2.16</version>
</dependency>
 <!-- 添加log4j依赖-->
</dependencies>


2. 配置MyBatis

这里以XML形式进行配置:

  1. 在src/main/resources下创建mybatis-config-xml配置文件,然后输入配置信息:
<?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>
<typeAliases>
	<package name="kuangfeng.mybatis.simple.model"/>
</typeAliases>
<environments default="development">
	<environment id="development">
		<transactionManager type="JDBC" />
			<property name=" " value=" "/>
		</transactionManager>
<dataSource type="UNPOOLED">//UNPOOLED:不使用任何数据库连接池来管理数据库连接
	<property name="driver" value="com.mysql.jdbc.Driver" />
	<property name="url" value="jdbc:mysql://localhost:3306/test" />
	<property name="username" value="root" />
	<property name="password" value="admin" />
</dataSource>
</environment>
</environments>

<mappers>
<mapper resource="com/mybatis3/mappers/StudentMapper.xml" />
</mappers>
</configuration>


  1. configuration:声明在标签里面的信息是配置信息
  2. typeAliases:标签里面配置了包的别名,MyBatis中需要频繁的用到类的全限定名称,为了使用方便,配置kuangfeng.mybatis.simple.model包,这样配置后,在使用类的情况下不需要再写包名部分,只使用类名部分即可。
  3. environments:环境配置中主要配置类数据库的连接。数据库的url、用户名、密码。

3. 创建实体类和MyBatis和Mapper.xml文件

MyBatis是一个结果映射框架,创建的实体类实际上是一个数据对象(Date Value Object),在实际应用中,一个表对应一个实体,且称这个对象为一个实体类。

  1. 在src/main/java 下创建一个基础的包kuangfeng.mybatis.simple,再在这个包下面创建model包。
  2. 然后根据数据库的表,在model包下面创建相对应的实体类。例Student:
package kuangfeng.mybatis.simple.model;
	public class Student{
		private Long id;
		private String name;
		private String code;
		//设置get和set方法
}
  1. 在src/main/resources下面创建kuangfeng/mybatis/simple/mapper目录 。然后在该目录下面创建StudentMapper.xml文件。添加如下内容:
<?xml version="1.0" encoding="UTF-8" ?>   
<!DOCTYPE mapper   
PUBLIC "-//ibatis.apache.org//DTD Mapper 3.0//EN"  
"http://ibatis.apache.org/dtd/ibatis-3-mapper.dtd">

<!-- mapper 为根元素节点, 一个namespace对应一个dao,定义了当前xml的命名空间 -->
<mapper namespace="kuangfeng.mybatis.simple.Student">

<!-- <select>标签:所定义的一个select查询。-->
<!-- id:定义select查询的一个唯一的id。-->
<!-- resultType:定义了当前的返回值类,此处指实体类。如果没有配置别名,此处一个填写kuangfeng.mybatis.simple.model.Student-->
<select id="selectStudentById" resultType="Student">
	select * from student where id = #{id} //查询sql语句
</select>

                                                    

4. 配置Log4j

配置好Mapper.xml和实体类之后,配置Log4j让Mybatis在执行数据库操作的时候可以将执行的SQL和其它信息输出到控制台。

在src/main/resources下面创建log4j.properties配置文件。输入内容:

//全局配置,将等级为DEBUG的日志信息输出到stdout和R这两个目的地,stdout和R的定义在下面的代码,可以任意起名。
//等级可分为OFF、FATAL、ERROR、WARN、INFO、DEBUG、ALL,如果配置OFF则不打出任何信息,
//如果配置为INFO这样只显示INFO, WARN, ERROR的log信息,而DEBUG信息不会被显示,
log4j.rootLogger=DEBUG, stdout, R


//MyBatis配置,添加以上配置后,Log4J 就会记录 org.mybatis.example.Mapper 的详细执行操作,且仅记录应用中其它类的错误信息(若有)。
log4j.logger.kuangfeng.mybatis.simple.mapper = TRACE
//也可以将日志的记录方式从接口级别切换到语句级别,从而实现更细粒度的控制。如下配置只对 selectBlog 语句记录日志:
log4j.logger.kuangfeng.mybatis.simple.mapper.selectBlog=TRACE
//可以对一组映射器接口记录日志,只要对映射器接口所在的包开启日志功能即可:
log4j.logger.kuangfeng.mybatis.simple=TRACE

//控制台输出配置
log4j.appender.stdout = org.apache.log4j.ConsoleAppender(控制台)
log4j.appender.stdout.layout = org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern = [%-5p] %d{yyyy-MM-dd HH:mm:ss,SSS} method:%l%n%m%n

5. 编写测试代码运行MyBatis

  1. 在src/test/java中创建kuangfeng.mybatis.simple.mapper包
  2. 创建StudentMapperTest测试类。创建StudentMapperTest测试类(部分jar包本文pom文件并未依赖,如果报错依赖一下就好了)。
public class StudentMapperTest{
	
	private static SqlSessionFactory sqlSessionFactory;
	@BeforeClass
	public static void init (){
		try {
			//通过Resources工具类将mybatis-config.xml配置文件读入Reader
			Reader reader = Resources .getResourceAsReader(”mybatis-config.xml”) ;
			//
			sqlSessionFactor y =new SqlSessionFactoryBuilder().build(reader);
			reader . close ();} 	   
		catch (IOException ignore) 
			{ ignore .printStackTrace () ;
	}
}
	@Test
	public void testfindStudentById(){
		//通过SqlSessionFactory工厂对象获取一个SqlSession
		SqlSession sqlSession = sqlSessionFactory.openSession();
		try {
		//通过sqlSession的selectList查找到StudentMapper.xml中id=“selectStudentById”的方法,执行sql语句
			List<Student> studentList = sqlSession.selectList (”selectStudentById” );
			//MyBatis底层只用jdbc执行sql,查询结果集ResultSet后,根据resultType的配置,将结果映射为Student类型的集合,返回查询结果。
			//查询结果为studentList,将其输出到控制台
			printCountryList(studentList); }
		 finally {
 	//最后关闭sqlSession。避免连接没有关闭导致数据库连接过多造成系统崩溃                
	sqlSession.close() ;
		
	}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值