1、MyBatis介绍
MyBatis 是支持普通 SQL 查询,存储过程和高级映射的优秀持久层框架。MyBatis 消除 了几乎所有的 JDBC 代码和参数的手工设置以及结果集的检索。MyBatis 使用简单的 XML 或注解用于配置和原始映射,将接口和 Java 的 POJOs(Plain Old Java Objects,普通的 Java 对象)映射成数据库中的记录。
这意味着我们不必自己去手写DAO(数据访问层),也不必写DBHelper类将数据库查询出的结果映射给实体类了,只需通过配置和注解就可以完成。这大大省去了去编写DAO的死板代码,从而程序员能够有更多的精力去负责编写自己的业务代码。
2、MyBatis环境配置
2.1、首先创建一个JavaWeb工程
如:
2.2、导入相应的包jar
- mysql驱动包 mysql-connector-java-5.0.8-bin.jar
- mybatis包 mybatis-3.4.1.jar
将它们放在lib文件夹下并build path
2.3、创建表
在mysql中创建一个表 如:
CREATE TABLE `users` (
`id` int(11) NOT NULL,
`name` varchar(40) DEFAULT NULL,
`password` varchar(40) DEFAULT NULL,
`email` varchar(60) DEFAULT NULL,
`birthday` date DEFAULT NULL,
PRIMARY KEY (`id`)
)
并插入数据。
insert into users(id,name,password,email,birthday) values(1,'zs','123456','zs@sina.com','1980-12-04');
3、创建mybaitis配置文件
在src目录下创建conf.xml文件和db.properties文件。
conf.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>
<!-- 引用db.properties -->
<properties resource="db.properties" />
<!-- development:开发模式
work:工作模式
-->
<environments default="development">
<environment id="development">
<transactionManager type="JDBC" />
<!-- 配置数据库连接信息 -->
<dataSource type="POOLED">
<property name="driver" value="${jdbc.driver}" />
<property name="url" value="${jdbc.url}" />
<property name="username" value="${jdbc.username}" />
<property name="password" value="${jdbc.password}" />
</dataSource>
</environment>
</environments>
<mappers>
<!-- 注册userMapper.xml映射文件,
usersMapper.xml位于io.xuda.mapping这个包下,所以resource写成io/xuda/mapping/usersMapper.xml-->
<mapper resource="io/xuda/mapping/usersMapper.xml"/>
</mappers>
</configuration>
db.properties如下:
jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://127.0.0.1/eden_db
jdbc.username=root
jdbc.password=root
配置文件conf.xml是mybatis 用来建立 sessionFactory,里面主要包含了数据库连接相关内容,还有 注册映射实体类的xml文件
4、创建实体类和映射文件
创建定义表中相应的实体类Users.java和映射文件usersMapper.xml
实体类Users.java如下:
package io.xuda.beans;
import java.sql.Date;
public class Users {
private int id;
private String name;
private String password;
private String email;
private Date birthday;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public Date getBirthday() {
return birthday;
}
public void setBirthday(Date birthday) {
this.birthday = birthday;
}
@Override
public String toString() {
return "Users [id=" + id + ", name=" + name + ", password=" + password
+ ", email=" + email + ", birthday=" + birthday + "]";
}
}
映射文件usersMapper.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,namespace的值习惯上设置成包名+sql映射文件名,这样就能够保证namespace的值是唯一的
例如namespace="io.xuda.mapping.usersMapper"就是io.xuda.mapping(包名)+userMappers(userMappers.xml文件去除后缀)
-->
<mapper namespace="io.xuda.mapping.usersMapper">
<!-- 在select标签中编写查询的SQL语句, 设置select标签的id属性为getUser,id属性值必须是唯一的,不能够重复
使用parameterType属性指明查询时使用的参数类型,resultType属性指明查询返回的结果集类型
resultType="io.xuda.beans.Users"就表示将查询结果封装成一个Users类的对象返回
User类就是users表所对应的实体类
-->
<!--
根据id查询得到一个users对象
-->
<select id="getUsers" parameterType="int"
resultType="io.xuda.beans.Users">
select * from users where id=#{id}
</select>
</mapper>
在usersMapper.xml 文件里面主要是定义各种 SQL 语句,以及这些语句的参数,以及要返回的类型等等。
5、测试
前四个步骤算是基本搭建完成mybatis环境了,下面我们就来写个Test.java测试一下。
Test.java如下:
package io.xuda.test;
import io.xuda.beans.Users;
import java.io.IOException;
import java.io.InputStream;
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;
public class Test {
public static void main(String[] args) {
//mybatis的配置文件
String resource = "conf.xml";
//使用类加载器加载mybatis的配置文件 (它也加载关联的映射文件)
// InputStream is = Test.class.getClassLoader().getResourceAsStream(resource);
//构建sqlSession的工厂
// SqlSessionFactory sessionFactory =new SqlSessionFactoryBuilder().build(is);
Reader reader=null;
try {
// 读取conf.xml配置文件
reader = Resources.getResourceAsReader(resource);
} catch (IOException e) {
e.printStackTrace();
}
SqlSessionFactory sessionFactory =new SqlSessionFactoryBuilder().build(reader);
SqlSession session = sessionFactory.openSession();
String statement = "io.xuda.mapping.usersMapper.getUsers"; // 映射sql的标识字符串
Users user =null;
try {
user = session.selectOne(statement,1);
} finally{
session.close();
}
System.out.println(user);
}
}
测试结果:
附:mybatis包 mybatis-3.4.1.jar的下载地址