一、MyBatis的前身是iBatis,本是Apache的一个开源的项目
MyBatis是一个支持普通SQL查询,存储过程和高级映射的优秀持久层框架。MyBatis消除了几乎所有的JDBC代码和参数的手工设置以及对结果集的检索封装。MyBatis可以使用简单的XML或注解用于配置和原始映射,将接口和Java的POJO(Plain Old Java Objects,普通的Java对象)映射成数据库中的记录。
4)程序调试方便
四、MyBatis是开发的步骤
2.1、准备开发环境
1、创建测试项目,普通java项目或者是JavaWeb项目均可,如下图所示:
2、添加相应的jar包
【mybatis】
mybatis-3.2.2.jar
【Oracle驱动包】
ojdbc6.jar
3、数据表数据如下:
2.2、使用MyBatis查询表中的数据
1、在src下添加Mybatis的配置文件mybatis-conf.xml,jdbc.properites,log4j.properties
如图所示
jdbc.properties
driver=oracle.jdbc.driver.OracleDriver
url=jdbc:oracle:thin:@localhost:1521:HLX
username=scott
password=hsx
mybatis-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>
<!-- 引入 jdbc.properties 文件 -->
<properties resource="jdbc.properties" />
<environments default="development">
<environment id="development">
<!--配置事务管理,采用JDBC的事务管理 -->
<transactionManager type="JDBC" />
<!-- 配置数据库连接信息 -->
<!-- POOLED:mybatis自带的数据源,JNDI:基于tomcat的数据源 -->
<dataSource type="POOLED">
<property name="driver" value="${driver}" />
<property name="url" value="${url}" />
<property name="username" value="${username}" />
<property name="password" value="${password}" />
</dataSource>
</environment>
</environments>
<!-- 将mapper文件加入到配置文件中 -->
</configuration>
2、定义表所对应的实体类,
package com.hlx.pojo;
/**
* POJO plain old java objects ( 普通的Java对象)
* @author Administrator
*
*/
public class Userinfos {
//ctrl+shift+Y lower
//ctrl+shift+X upper
private int id;
private String uname;
private String upass;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public Userinfos() {
super();
}
public Userinfos(int id, String uname, String upass) {
super();
this.id = id;
this.uname = uname;
this.upass = upass;
}
public String getUname() {
return uname;
}
public void setUname(String uname) {
this.uname = uname;
}
public String getUpass() {
return upass;
}
public void setUpass(String upass) {
this.upass = upass;
}
@Override
public String toString() {
return "Userinfos [id=" + id + ", uname=" + uname + ", upass=" + upass
+ "]";
}
}
3、定义操作userinfos表的sql映射文件UserinfosMapper.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="com.hlx.dao.UserinfosMapper"就是com.hlx.dao(包名)+UserinfosMapper(UserinfosMapper.xml文件去除后缀)
-->
<mapper namespace="com.hlx.dao.UserinfosMapper">
<!-- 在select标签中编写查询的SQL语句, 设置select标签的id属性为getUserinfo,id属性值必须是唯一的,不能够重复
使用parameterType属性指明查询时使用的参数类型,resultType属性指明查询返回的结果集类型
resultType="com.hlx.pojo.Userinfos"就表示将查询结果封装成一个User类的对象返回
User类就是users表所对应的实体类
-->
<!--
根据id查询得到一个userinfos对象
-->
<select id="getUserinfo" parameterType="int" resultType="com.hlx.pojo.Userinfos">
select * from userinfos where id=#{id}
</select>
</mapper>
4、在mybatis-conf.xml文件中注册UserinfosMapper.xml文件
<!-- 将mapper文件加入到配置文件中 -->
<mappers>
<mapper resource="com/hlx/dao/UserinfosMapper.xml"/>
</mappers>
5、测试代码:执行定义的select语句
package com.hlx.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.apache.log4j.Logger;
import org.junit.Test;
import com.hlx.pojo.Userinfos;
/**
* 测试类
* @author Administrator
*
*/
public class UserinfoTest {
//日志对象
private Logger logger = Logger.getLogger(UserinfoTest.class);
@Test
public void findById() {
// mybatis的配置文件
String resources = "mybatis-config.xml";
SqlSession session = null;
try {
// 1.使用类加载器加载mybatis的配置文件(它也加载关联的映射文件)
InputStream is = Resources.getResourceAsStream(resources);
// 2 创建sqlSessionFactory对象(完成对配置文件的读取)
SqlSessionFactory factory = new SqlSessionFactoryBuilder()
.build(is);
// 3 创建sqlSession
session = factory.openSession();
// 4 调用mapper文件来进行数据操作(调用之前,mapper文件需要先加入mybatis-config.xml配置文件中)
/**
* 映射sql的标识字符串, com.hlx.dao.UserinfosMapper是userinfosMapper.
* xml文件中mapper标签的namespace属性的值,
* getUserinfo是select标签的id属性值,通过select标签的id属性值就可以找到要执行的SQL
*/
String statementString = "com.hlx.dao.UserinfosMapper.getUserinfo";
// 执行查询返回一个唯一user对象的sql
Userinfos userinfos = session.selectOne(statementString,3);
logger.debug("查询数据为:");
System.out.println(userinfos);
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
} finally {
session.close(); // 关闭
}
}
}
执行结果如下: