MyBatis的配置与简单实例测试(Oracle+mybatis+log4j+junit)

一.搭建工程环境:

1.数据库准备

使用oracle数据库,创建一个名为t_user的表:

create table t_user(
  id number(7) primary key,
  username varchar2(120) not null,
  password varchar2(16) not null,
  gender varchar(5),
  birthday date default null
);

向user插入四条数据,以供测试:

insert all into t_user (id,username,password,gender,birthday)
                values (1,'zhangsan','111','男',to_date('1992-11-09','yyyy-mm-dd'))
           into t_user (id,username,password,gender,birthday)  
                values (2,'lisi','222','男',to_date('1999-9-03','yyyy-mm-dd'))
           into t_user (id,username,password,gender,birthday)
                values (3,'wangwu','333','男',to_date('1997-06-28','yyyy-mm-dd'))
           into t_user (id,username,password,gender,birthday)
                values (4,'hanmeimei','444','女',to_date('1995-01-15','yyyy-mm-dd'))
           select 1 from dual;

 

2.创建工程以及导入依赖的jar包

首先打开Eclipse,创建一个Web工程,这里将其命名为MyBatisDemo。

导入依赖的jar包:这里所使用的核心jar包为mybatis-3.4.1.jar

其他依赖的jar包如下,并将这些jar包放在WEB-INF的lib文件夹下,然后全选所有jar包,右键选择BuilPath->Add To Build Path,将依赖jar包引入工程环境。

3.引入mybatis的dtd约束文件:

mybatis的配置文件是.xml文件,mybatis框架在读取该xml文件时,并不能保证配置文件中的每一个标签对。以及标签对中的参数值配置完全符合标准。这就要求引入一种“DTD(Document Type Definition)”文档定义类型。

dtd文件下载地址:

mybatis-3-config.dtd约束文件下载:

http://mybatis.org/dtd/mybatis-3-config.dtd

mybatis-3-mapper.dtd约束文件下载:

http://mybatis.org/dtd/mybatis-3-mapper.dtd

在项目中创建一个文件夹来存放dtd文件:

然后配置xml自动提示:

点击eclipse的Window->Preferences,搜索XML Catalog,点击右侧ADD按钮,依次将两个dtd文件添加进入。

Location选择Workspace中dtd文件的位置。

Key:mybatis-3-config.dtd:-//mybatis.org//DTD Config 3.0//EN

         mybatis-3-mapper.dtd:-//mybatis.org//DTD Mapper 3.0//EN

4.为工程开发准备需要的目录结构

一般将目录结构分为源代码目录、配置文件目录和测试目录,src文件夹是存放源代码的地方,该工程的代码主要分为三大块:数据库连接、持久层对象、映射接口、测试主程序。所以首先在src下创建四个包,分别是com.mybatis.datasource、com.mybatis.po、com.mybatis.mapper、com.mybatis.test。如下所示:

然后,我们在项目下创建一个config文件夹,用来存放配置文件:

5.编写日志文件和数据库配置文件

在之前创建的config文件夹下创建一个名为oracle.properties的文件

设置数据库的driver url username password

driver=oracle.jdbc.driver.OracleDriver
url=jdbc:oracle:thin:@localhost:1521:ORCL
username=rosinante
password=123456

 在config文件夹下再创建一个名为log4j.properties的文件

log4j.rootLogger=DEBUG, stdout 
log4j.appender.stdout=org.apache.log4j.ConsoleAppender 
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout 
log4j.appender.stdout.layout.ConversionPattern=%d [%-5p] %c - %m%n
#show sql
log4j.logger.java.sql.ResultSet=INFO  
log4j.logger.org.apache=INFO  
log4j.logger.java.sql.Connection=DEBUG  
log4j.logger.java.sql.Statement=DEBUG  
log4j.logger.java.sql.PreparedStatement=DEBUG 

6.编写数据库连接池配置文件

在之前创建的config文件夹下创建一个名为mybatis-config.xml的xml文件。

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>
        <!--指定当前配置文件中的常量值-->
	<properties resource="oracle.properties">
        <!--注意:oracle.properties文件中的值优先级高-->
		<property name="username" value="rosinante"/>
		<property name="passwprd" value="123456"/>
	</properties>
	<!-- 设置全局参数 -->
	<settings>
		<setting name="logImpl" value="LOG4J"/>
	</settings>
	<!-- 配置环境变量和数据库信息 -->
	<environments default="development">
		<environment id="development">
			<!-- 事务管理器 -->
			<transactionManager type="JDBC"/>
			<!-- 数据库连接池 -->
			<dataSource type="POOLED">
				<property name="diver" value="${driver}"/>
				<property name="url" value="${url}"/>
				<property name="username" value="${username}"/>
				<property name="password" value="${password}"/>
			</dataSource>	
		</environment>
	</environments>
</configuration>

指定xml的版本信息和编码格式信息:

<?xml version="1.0" encoding="UTF-8"?>

引入DTD文档定义类型:

<!DOCTYPE configuration 
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">

在setting标签对中配置日志输出模式logImpl为LOG4J

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

在environments中配置mybatis的环境信息,里面允许有多个environment标签,这是因为项目开发中我们不可能只用到一个数据库,每一个单独的environment标签对代表一个单独的数据库配置环境,由于这里我们只用oracle数据库,所以只需要有一个environment标签来配置数据库。

在environment标签对中,transactionManager标签配置的是MyBatis的事务控制类型

<transactionManager type="JDBC"/>

dataSource标签对中配置的是数据库链接信息,其中包含多个property标签,用于配置数据库驱动信息driver、数据库连接地址url、数据库用户名username、数据库密码password。

<dataSource type="POOLED">
    <property name="diver" value="${driver}"/>
    <property name="url" value="${url}"/>
    <property name="username" value="${username}"/>
    <property name="password" value="${password}"/>
</dataSource>	

我们这里使用oracle.properties将diver、url、username、password的参数传入dataSource标签对中,这样在以后的开发中如果需要修改数据库连接可以直接通过oracle.properties而不用修改源码。

二、编写数据交互类与测试用例

1.编写pojo类

POJO(Plain Old Java Object)类,即普通java对象。POJO类方便程序员将数据库中的数据信息映射为Java类的实体类,当POJO类满足有一个空的构造方法,可序列化,类中的属性可以用get/set方法来获取和设置时,那么就可以称之为一个JavaBean。

我们在com.mybatis.po包下创建一个名为User的pojo类:

package com.mybatis.po;

import java.io.Serializable;
import java.util.Date;

public class User implements Serializable{

	public User() {
		// TODO Auto-generated constructor stub
	}
	private Integer id;
	private String username;
	private String password;
	private String gender;
	private Date birthday;
	public User(Integer id, String username, String password, String gender,
			Date birthday) {
		super();
		this.id = id;
		this.username = username;
		this.password = password;
		this.gender = gender;
		this.birthday = birthday;
	}
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
              ...
	    get/set
              ...
	@Override
	public String toString() {
		return "User [id=" + id + ", username=" + username + ", password="
				+ password + ", gender=" + gender + ", birthday=" + birthday
				+ "]";
	}
}

2.编写映射接口

在com.mybatis.mapper包下面新建一个接口UserMapper.java,用来对应xml文件中的sql语句(映射),从而方便我们调用

package com.mybatis.mapper;

import com.mybatis.po.User;

public interface UserMapper {
	public void insertUser(User user);
	public void updateUser(User user);
	public void DeleteStudent(Integer i);
	public User findUserById(Integer i);
}

3.编写映射接口配置文件

在com.mybatis.mapper下,创建一个名为UserMapper.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是UserMapper接口的路径-->
<mapper namespace="com.mybatis.mapper.UserMapper">
	<resultMap type="com.mybatis.po.User" id="userResult">
                <!--通过resultMap建立pojo类属性与数据库字段一一对应的关系-->
                <!--主键必须要有-->
		<id property="id" column="id"/>
		<result property="username" column="username"/>
		<result property="password" column="password"/>
		<result property="gender" column="gender"/>
		<result property="birthday" column="birthday"/>
	</resultMap>
        <!--id与接口中的方法名要一致-->
	<select id="findUserById" parameterType="int" resultType="com.mybatis.po.User">
                <!--#{}表示一个占位符,其中的id表示接受输入参数的名称-->
		SELECT * FROM T_USER WHERE id=#{id}
	</select>
</mapper>

    在select标签中可以看到一个值为"findUserById"的id属性,我们知道,SQL映射配置文件中的SQL都被解析并封装到mapperStatement对象中,为了调取相应的SQL,需要一个唯一的标识,所以该id属性是映射文件中的SQL被解析并转换成为Statement的id。

    这里的parameterType指定输入参数的类型为int,而resultType表示将单条记录映射成为一个名为User的Java对象。在select标签中配置的是SQL语句。

我们创建里一个mapper以后,还必须要在mybatis-config.xml文件中对其进行配置,这是为了让MyBatis资源文件加载类解析Mapper文件,需要把Mapper文件的路径配置在全局配置文件mybatis-config.xml中。

<configuration>
  
    ......

    <mappers>
        <mapper resource="com/mybatis/mapper/UserMapper.xml"/>
    </mappers>
</configuration>

4.编写数据交互类

在com.mybatis.datasource下创建一个名为DataConnection的类,该类的作用是获取SqlSession数据库交互对象。

package com.mybatis.datasource;

import java.io.IOException;
import java.io.InputStream;

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 DataConnection {
	//MyBatis配置文件
	private String resource="mybatis-config.xml";
	private SqlSessionFactory sqlSessionFactory;
	private SqlSession sqlSession;
	public SqlSession getSqlSession() throws IOException{
		InputStream inputStream=Resources.getResourceAsStream(resource);
		//创建会话工厂,传入MyBatis配置文件信息
		sqlSessionFactory=new SqlSessionFactoryBuilder().build(inputStream);
		sqlSession=sqlSessionFactory.openSession();
		return sqlSession;
	}
}

    在该类中,通过Resource资源加载类加载mybatis-config.xml配置文件,然后获取SQL会话工厂SqlSessionFactory,之后使用会话工厂创建可以与数据库交互的sqlSession类的实例对象。

5.编写测试类

测试工具:JUnit4

如何使用Junit测试可以参考这篇博文:Junit的基本使用

测试实例:从数据库t_user表中取出id为1的用户的数据

我们在com.mybatis.test下创建一个名为MyBatisTest的类

package com.mybatis.test;

import java.io.IOException;
import java.text.SimpleDateFormat;

import org.apache.ibatis.session.SqlSession;
import org.junit.Test;

import com.mybatis.datasource.DataConnection;
import com.mybatis.mapper.UserMapper;
import com.mybatis.po.User;

public class MyBatisTest {
	public DataConnection dataConn=new DataConnection();
	@Test
	public void TestSelect() throws IOException{
                //构建sqlsession对象
		SqlSession sqlSession=dataConn.getSqlSession();
		//sqlSession.selectOne最终结果与映射文件中所匹配的resultType类型
                //得到映射接口实例
		UserMapper userMapper=sqlSession.getMapper(UserMapper.class);
                //执行方法
		User user=userMapper.findUserById(1);
		System.out.println(user);
		sqlSession.close();
                //因为是查询语句,不需要提交事务
                //只用insert,update,delete需要提交事务
	}
}

 测试方法:选中要测试的方法TestSelect,右键run as->JUnit Test

 测试结果:

JUnit未报错

log4j输出日志到控制台

成功查询到id为1的数据项:

User [id=2, username=lisi, password=222, gender=男, birthday=Fri Sep 03 00:00:00 GMT+08:00 1999]

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值