一、MyBatis简介
iBatis是apche的一个开源项目,2010年迁移到google code后改名为MyBatis,2013年前已到github.MyBatis是一个基于java的持久层框架,与hibernate相比更加简单。关于MyBatis和Hibernate的对比,可参考这篇博客: Hibernate与 MyBatis的比较.
二、MyBatis特点
- 开源的优秀持久层框架
- sql语句与代码分离
- 面向配置编程
- 支持复杂数据映射
- 动态sql
三、MyBatis开发环境搭建
工程目录:
3.1下载jar包
- mybatis-3.2.8.zip(3.2.8之后的jar包没有log4j,这一点我暂时也不知道为什么)
- mysql-connector,选择JDBC Driver for MySQL下载。
3.2在mysql中新建数据库
MyBatis是一个持久层框架,也就是和数据库打交道的,mysql新建一个数据库用来做测试。
create database book
建立一张user表:
Create Table: CREATE TABLE `User` (
`id` int(10) NOT NULL AUTO_INCREMENT,
`username` varchar(20) NOT NULL,
`passWord` varchar(20) NOT NULL,
PRIMARY KEY (`id`)
)
插入几条记录:
+----+----------+------------+
| id | username | passWord |
+----+----------+------------+
| 1 | 小华 | xiaohua |
| 2 | 柯南 | 666666 |
| 3 | 慕白 | 123456 |
| 4 | 小明 | xiaoming12 |
+----+----------+------------+
这样数据库准备好了,也可以在mysql图形界面中操作。
3.3配置开发环境
3.3.1新建java project
在eclipse中新建java project,命名为Mybatis HelloWorld
3.3.2导入jar包
单击工程名右键->build path->config build path->add external jars,加入以下jar包mysql-connector-java-5.1.38-bin.jar
、 mybatis-3.2.8.jar
、asm-3.3.1.jar
、cglib-2.2.2.jar
、commons-logging-1.1.1.jar
、javassist-3.17.1-GA.jar
、log4j-1.2.17.jar
、log4j-api-2.0.2.jar
、log4j-core-2.0.2.jar
、slf4j-api-1.7.5.jar
、slf4j-log4j12-1.7.5.jar
3.3.3配置log4j
在src目录下添加log4j.properties,log4j可用来打印sql查询语句:
log4j.rootLogger=DEBUG, CONSOLE
#Console
log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender
log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout
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
3.3.4 添加User.java
新建ucas.book.map、ucas.book.pojo、ucas.book.test包
在ucas.book.pojo包下新建User实体:
package ucas.book.pojo;
public class User {
private int id;
private String username;
private String password;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}
3.3.5Mybatis配置文件
在ucas.book.map包下加入mybatis.xml和UserMapper.xml:
数据库连接和相关配置信息写在mybatis.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>
<typeAlias alias="User" type="ucas.book.pojo.User" />
</typeAliases>
<environments default="development">
<environment id="development">
<!-- 事务管理类型,JDBC表示直接使用JDBC的提交和回滚设置,依赖于数据源得到的连接来管理事务 -->
<transactionManager type="JDBC" />
<!-- 数据库连接池POOLED表示使用数据库连接池 -->
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver" />
<property name="url" value="jdbc:mysql://localhost:3306/book?useSSL=true" />
<property name="username" value="root" />
<property name="password" value="napoay" />
</dataSource>
</environment>
</environments>
<mappers>
<!-- SQL代码和映射信息配置文件 -->
<mapper resource="ucas/book/map/UserMapper.xml" />
</mappers>
</configuration>
sql代码写在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必须是唯一的,建议用该文件所在的包路径全类名 -->
<mapper namespace="ucas.book.map.UserMapper">
<!-- select:表示这是一个查询操作 -->
<!-- id:用来配合namespace来定位这个操作,也就是在调用时,将采用ucas.book.pojo.User.getUserById -->
<!-- resultType:表示返回值类型,必须是全类名,MyBatis将自动为我们将查询结果封装成Student对象 -->
<!-- parameterType:表示传进来的参数的类型,因为传的是id主键,所以是int型 -->
<select id="getUserById" parameterType="int" resultType="ucas.book.pojo.User">
<!-- #{id}:表示占位符,也就是调用时必须为其传一个id参数进来,注意是#不是$ -->
select * from User where id = #{id}
</select>
</mapper>
<select></select>
中写的是通过id查询记录的sql语句。
3.3.6测试代码
package ucas.book.test;
import java.io.IOException;
import java.io.Reader;
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 ucas.book.pojo.User;
public class TestUser {
public static void main(String[] args) {
String resource = "ucas/book/map/mybatis.xml";
Reader reader = null;
SqlSession session;
try {
reader = Resources.getResourceAsReader(resource);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(reader);
session = factory.openSession();
User user = session.selectOne("getUserById", 1);
System.out.println("\nusername:" + user.getUsername());
session.close();
}
}
结果: