MyBatis
概述:
MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以使用简单的 XML 或注解来配置和映射原生信息,将接口和 Java 的 POJOs(Plain Ordinary Java Object,普通的 Java对象)映射成数据库中的记录。
mybatis快速入门
准备开发环境
1、创建测试项目,普通java项目即可,如下图所示:
2、添加相应的jar包
3、创建数据库和表,针对MySQL数据库
使用MyBatis查询表中的数据
1、添加Mybatis的配置文件sqlMapConfig.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">
<!-- 指定事务管理类型 -->
<transactionManager type="JDBC"></transactionManager>
<!-- 配置数据源 type指定数据库连接池方式 -->
<dataSource type="POOLED">
<!-- 配置数据库相关的连接信息 name值固定 -->
<property name="driver" value="com.mysql.cj.jdbc.Driver"/>
<property name="url" value="jdbc:MySQL://localhost:3306/test?serverTimezone=Asia/Shanghai"/>
<property name="username" value="root"/>
<property name="password" value="root"/>
</dataSource>
</environment>
</environments>
</configuration>
2、定义表所对应的实体类Emp.java,如下图所示:
代码如下:
import java.util.Date;
/**
* 员工信息实体类
*/
public class Emp {
/**
* 员工编号
*/
private int eno;
/**
* 员工姓名
*/
private String ename;
/**
* 员工性别
*/
private String sex;
/**
* 联系方式
*/
private String phone;
/**
* 出生日期
*/
private Date birthday;
/**
* 部门编号
*/
private int dno;
public int getEno() {
return eno;
}
public void setEno(int eno) {
this.eno = eno;
}
public String getEname() {
return ename;
}
public void setEname(String ename) {
this.ename = ename;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public String getPhone() {
return phone;
}
public void setPhone(String phone) {
this.phone = phone;
}
public Date getBirthday() {
return birthday;
}
public void setBirthday(Date birthday) {
this.birthday = birthday;
}
public int getDno() {
return dno;
}
public void setDno(int dno) {
this.dno = dno;
}
@Override
public String toString() {
return "Emp{" +
"eno=" + eno +
", ename='" + ename + '\'' +
", sex='" + sex + '\'' +
", phone='" + phone + '\'' +
", birthday=" + birthday +
", dno=" + dno +
'}';
}
}
3、定义操作Emp表的sql映射文件mapper.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="me.gacl.mapping.userMapper"就是me.gacl.mapping(包名)+userMapper(userMapper.xml文件去除后缀)
-->
<mapper namespace="test">
<!--
id: sql的唯一标识,
parameterType: 指定要传入的参数类型
resultType:指定返回值类型,只有查询操作才会需要返回值类型
#{val}: 代表占位符,其中的val与实体类中的属性名保持一致
-->
<!--
根据id查询得到一个user对象
-->
<select id="queryEmpById" parameterType="java.lang.Integer" resultType="com..bean.Emp">
select eno,ename,sex,phone,birthday,dno from emp where eno=#{eno}
</select>
</mapper>
4、在sqlMapConfig.xml文件中注册mapper.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">
<!-- 指定事务管理类型 -->
<transactionManager type="JDBC"></transactionManager>
<!-- 配置数据源 type指定数据库连接池方式 -->
<dataSource type="POOLED">
<!-- 配置数据库相关的连接信息 name值固定 -->
<property name="driver" value="com.mysql.cj.jdbc.Driver"/>
<property name="url" value="jdbc:MySQL://localhost:3306/test?serverTimezone=Asia/Shanghai"/>
<property name="username" value="root"/>
<property name="password" value="root"/>
</dataSource>
</environment>
</environments>
<mappers>
<!-- 注册mapper.xml文件,
mapper.xml与sqlMapConfig.xml位于同一包下,所以resource写成mapper.xml-->
<mapper resource="mapper.xml"/>
</mappers>
</configuration>
5、编写测试代码:执行定义的select语句
创建一个Test类,编写如下的测试代码:
import com..bean.Emp;
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;
import java.io.IOException;
import java.io.InputStream;
import java.text.ParseException;
import java.text.SimpleDateFormat;
public class MabtisTest {
@Test
public void queryEmpList() throws IOException {
//mybatis的配置文件
InputStream inputStream = Resources.getResourceAsStream("sqlMapConfig.xml");
//构建sqlSession的工厂 获取SqlSessionFactoryBuilder对象
SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(inputStream);
// 创建能执行映射文件中sql的sqlSession
SqlSession sqlSession = factory.openSession();
//执行sql
Emp emp = sqlSession.selectOne("test.queryEmpById",4);
System.out.println(emp);
// 关闭SqlSqssion对象
sqlSession.close();
}
}
执行结果: