Mybatis(前身是iBatis)是一个支持普通SQL查询、存储过程以及高级映射的持久层框架,它消除了几乎所有的JDBC代码和参数的手动设置以及对结果集的检索,并使用简单的XML或注解进行配置和原始映射,用以将接口和Java的POJO映射成数据库中的记录,使得Java开发人员可以使用面向对象的编程思想来操作数据库。
在实际开发中,查询操作通常都会涉及单条数据的精确查询,以及多条数据的模糊查询。下面使用Mybatis框架来实现这两种查询。
1.1 在mysql数据库中,创建一个名为mybatis的数据库,在此数据库中创建一个t_customer表,同时预先插入几条数据。SQL语句如下:
//创建一个名为mybatis的数据库
CREATE DATABASE mybatis;
//使用mybatis数据库
USE mybatis;
//创建一个名称为t_customer的表
CREATE TABLE t_customer(
id int(32) PRIMARY KEY AUTO_INCRENMENT,
username varchar(50),
jobs varchar(50),
phone varchar(16)
);
//预先插入3条数据
INSERT INTO t_customer VALUES ('1','joy','doctor','13745874578');
INSERT INTO t_customer VALUES ('2','jack','teacher','13521210112');
INSERT INTO t_customer VALUES ('3','tom','worker','15179405961');
完成上述操作后,数据库t_customer表中数据如下:
1.2 在Eclipse中创建一个名为WebTest的Web项目,将Mybatis的核心JAR包以及MySQL数据的驱动JAR一同添加到项目的的lib目录下:
1.3由于mybatis默认使用log4j日志,所以需要在src目录下创建log4j.properties文件,文件内容如下:
# Global logging configuration
log4j.rootLogger=ERROR, stdout
# MyBatis logging configuration...
log4j.logger.com.itheima=DEBUG
# 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
1.4 在src目录下,创建一个com.webtest.po包,在该包下创建持久化类Customer:
package com.webtest.po;
/**
* 客户持久化类
* */
public class Customer {
private Integer id; //主键id
private String username; //客户名称
private String jobs; //职业
private String phone; //电话
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getJobs() {
return jobs;
}
public void setJobs(String jobs) {
this.jobs = jobs;
}
public String getPhone() {
return phone;
}
public void setPhone(String phone) {
this.phone = phone;
}
@Override
public String toString(){
return "Customer [id=" + id +", username="+username+", jobs="+jobs+", phone="+phone +"]";
}
}
1.5 在src目录下,创建一个com.webtest.mapper包,在包中创建映射文件CustomerMapper.xml,编辑后如下:
<mapper namespace="com.webtest.mapper.CustomerMapper">
<select id="findCustomerById" parameterType="Integer" resultType="com.webtest.po.Customer">
select * from t_customer where id = #{id}
select>
mapper>
在定义的SQL语句中,”#{}”相当于一个占位符,而”#{id}”表示该占位符等待接收的参数名称为id。
1.6 在src目录下,创建mybatis的核心配置文件mybatis-config.xml ,如下:
<configuration>
<environments default="mysql">
<environment id="mysql">
<transactionManager type="JDBC">transactionManager>
<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="root"/>
dataSource>
environment>
environments>
<mappers>
<mapper resource="com/webtest/mapper/CustomerMapper.xml"/>
mappers>
configuration>
1.7 在src目录下,创建一个com.webtest.test包,在该包下编写测试类MybatisTest,代码如下:
package com.webtest.test;
import java.io.InputStream;
import com.webtest.po.Customer;
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.Test;
/**
* 入门程序测试类
* */
public class MybatisTest {
/**
* 根据客户标号查询客户信息
*
* */
@Test
public void findCustomerByIdTest() throws Exception{
String resource = "mybatis-config.xml"; //1.读取配置文件
InputStream inputStream = Resources.getResourceAsStream(resource);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream); //2.根据配置文件构建SqlSessionFactory
SqlSession sqlSession = sqlSessionFactory.openSession(); //3.通过SqlSessionFactory创建SqlSession
Customer customer = sqlSession.selectOne("com.webtest.mapper.CustomerMapper.findCustomerById",1); //4.SqlSession执行配置文件中定义的SQL,并返回映射结果
System.out.println(customer.toString()); //打印输出结果
sqlSession.close(); //5.关闭SqlSession
}
}
使用JUnit4测试执行findCustomerById()方法后,控制台输出结果,可以看出,使用Mybatis框架已经成功从Mysql数据库中查询了id为1的客户信息。