一. MyBatis系列:第一个MyBatis工程

本文将使用最小化配置及代码来开发一个MyBatis示例,以此来了解我们要开发一个MyBatis项目所需要的最小资源。

开发环境

Eclipse Java EE: Luna Release (4.4.0)

JDK: java v 1.8.x

MyBatis:3.2.8

MySQL:5.6.15

 

MyBatis 3.2.8 依赖的 jar 包可以在  http://mvnrepository.com/artifact/org.mybatis/mybatis/3.2.8 处发现和下载

依赖包

导入jar包的说明:

mybatis(必需):mybatis 组件包

junit(可选):用于支持编写单元测试

mysql-connector-java(必选):用于连接目标数据库的jdbc驱动包

commons-loggin, log4j(可选):用于显示mybatis运行时的日志输出

pom.xml 依懒包配置

<dependency>
    <groupId>org.mybatis</groupId>
    <artifactId>mybatis</artifactId>
    <version>3.2.8</version>
</dependency>
<dependency>
    <groupId>junit</groupId>
    <artifactId>junit</artifactId>
    <version>4.11</version>
</dependency>
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>5.1.35</version>
</dependency>
<dependency>
    <groupId>commons-logging</groupId>
    <artifactId>commons-logging</artifactId>
    <version>1.1.1</version>
</dependency>
<dependency>
    <groupId>log4j</groupId>
    <artifactId>log4j</artifactId>
    <version>1.2.17</version>
</dependency>

工程目录结构

工程结构

本文中所使用的是 Maven 工程项目,也可以使用本地 jar 包导入工程;

User.java 为实体模型类

MybatisFirstTest.java 为单元测试类

mapper/user.xml  为实体mapper映射文件

log4j.properties 为日志输出配置文件

MybatisConfig.xml 为MyBatis的全局配置文件

数据库表结构

CREATE TABLE `user` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `username` varchar(32) NOT NULL,
  `birthday` date DEFAULT NULL,
  `sex` char(1) DEFAULT NULL,
  `address` varchar(256) DEFAULT NULL,
  PRIMARY KEY (`id`)
);

MyBatisConfig.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>
	<environments default="development">
		<environment id="development">
			<!-- 配置该工程所使用的事务管理器类型,JDBC 为  JdbcTransactionFactory.class 的别名 -->
			<transactionManager type="JDBC" />
			<!-- 配置数据源类型, POOLED 为 PooledDataSourceFactory.class 的别名 -->
			<dataSource type="POOLED">
				<property name="driver" value="com.mysql.jdbc.Driver" />
				<property name="url" value="jdbc:mysql://localhost:3306/mybatis" />
				<property name="username" value="root" />
				<property name="password" value="123456" />
			</dataSource>
		</environment>
	</environments>
	<mappers>
		<!-- 配置工程所使用的 User 的 Mapper 映射文件路径 -->
		<mapper resource="mapper/user.xml"/>
	</mappers>
</configuration>

为了能输出日志,还需配置 log4j.properties

# Global logging configuration
log4j.rootLogger=DEBUG, stdout
# Console output...
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%5p [%t] - %m%n

User 实体模型类

public class User {
     public int id;
     public String username;
     public Date birthday;
     public String sex;
     public String address; 
} 

User.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">
<mapper namespace="test">
    <select id="getUserById" parameterType="int" resultType="cn.xleos.mybatisfirst.po.User">
        SELECT * FROM user WHERE id = #{value}
    </select>
</mapper> 

单元测试代码

package cn.xleos.mybatisfirst.test;

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;
import org.junit.Before;
import org.junit.Test;

import cn.xleos.mybatisfirst.po.User;

public class MybatisFirstTest {
	
	private SqlSessionFactory sqlSessionFactory; 

	@Before
	public void setUp() throws Exception {
		// 1. 读取  MybatisConfig.xml 自定义命名的全局配置文件.
		//    getResourceAsStream 使用的资源路径
		//    getUrlAsStream 使用的是文件路径
		InputStream inputStream = Resources.getResourceAsStream("MybatisConfig.xml");
		
		// 2. 使用sqlSession的工厂构造器来读入全局配置,再生成一个sqlSession工厂.
		sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
	}

	@Test
	public void getUserByIdTest() {
		// 3. 通过 sqlSession 工厂打开一个 sqlSession
		SqlSession sqlSession = sqlSessionFactory.openSession();
		try {
			// 4. 使用 selectOne 来调用 user.xml 配置中的(命名空间+statementId) text.getUserById 节的SQL语句
			//    并传入简单类型参数值  1
			User user = sqlSession.selectOne("test.getUserById", 1);
			System.out.println(user);
		}finally{
			sqlSession.close();
		}
	}
}

以下是单元测试日志输出,可以方便的查看MyBatis所产生的SQL脚本,以及数据库连接的状态;

DEBUG [main] - Opening JDBC Connection
DEBUG [main] - Created connection 660143728.
DEBUG [main] - Setting autocommit to false on JDBC Connection [com.mysql.jdbc.JDBC4Connection@2758fe70]
DEBUG [main] - ==>  Preparing: SELECT * FROM user WHERE id = ? 
DEBUG [main] - ==> Parameters: 1(Integer)
DEBUG [main] - <==      Total: 1
User [id=1, username=王五, birthday=null, sex=2, address=null]
DEBUG [main] - Resetting autocommit to true on JDBC Connection [com.mysql.jdbc.JDBC4Connection@2758fe70]
DEBUG [main] - Closing JDBC Connection [com.mysql.jdbc.JDBC4Connection@2758fe70]
DEBUG [main] - Returned connection 660143728 to pool.

 

posted @ 2015-06-10 09:03  夏亮  阅读(428)  评论(0编辑  收藏  举报