一. 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.