Mybatis之安装构建以及执行第一个mybatis程序!
1、什么是 MyBatis?
MyBatis 是一款优秀的持久层框架,它支持自定义 SQL、存储过程以及高级映射。MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作。MyBatis 可以通过简单的 XML 或注解来配置和映射原始类型、接口和 Java POJO(Plain Old Java Objects,普通老式 Java 对象)为数据库中的记录。
2、如何配置mybaits?
在idea工具里新建一个maven项目作为parent,在pom.xml导入依赖
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.2</version>
</dependency>
3、配置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>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<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>
<mappers>
<mapper resource="org/mybatis/example/BlogMapper.xml"/>
</mappers>
</configuration>
这里注意,每一个Mapper文件都需要放在核心文件mapper标签内
4、从 XML 中构建 SqlSessionFactory
每个基于 MyBatis 的应用都是以一个 SqlSessionFactory 的实例为核心的。SqlSessionFactory 的实例可以通过 SqlSessionFactoryBuilder 获得。由于是重复代码,所以封装成一个utils方便使用。
public static SqlSessionFactory sqlSessionFactory = null;
static {
try {
//第一步,获取SqlSessionFactory对象
String resource = "mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
} catch (IOException e) {
e.printStackTrace();
}
}
5、创建entity实体类
package cn.kexing.mybatis.entity;
public class Emp {
public int eid;
public String ename;
public String esex;
public String esalry;
public Emp(int eid, String ename, String esex, String esalry) {
this.eid = eid;
this.ename = ename;
this.esex = esex;
this.esalry = esalry;
}
public Emp() {
}
public int getEid() {
return eid;
}
public void setEid(int eid) {
this.eid = eid;
}
public String getEname() {
return ename;
}
public void setEname(String ename) {
this.ename = ename;
}
public String getEsex() {
return esex;
}
public void setEsex(String esex) {
this.esex = esex;
}
public String getEsalry() {
return esalry;
}
public void setEsalry(String esalry) {
this.esalry = esalry;
}
@Override
public String toString() {
return "Emp{" +
"eid=" + eid +
", ename='" + ename + '\'' +
", esex='" + esex + '\'' +
", esalry='" + esalry + '\'' +
'}';
}
}
6、创建mapper接口(这里的mapper和dao一个意思,只不过更规范)
public interface EmpMapper {
List<Emp> getEmpForList();
}
注意,以往的dao中创建接口后都继续创建实现类来实现方法,在方法中重复写大量jdbc代码,劳财伤神,而mybatis中只需将sql写在配置文件里,避免了所有的jdbc代码。
7、创建mapper映射文件
<?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="cn.kexing.mybatis.dao.EmpMapper">
<select id="getEmpForList" resultType="cn.kexing.mybatis.entity.Emp">
select * from emp;
</select>
</mapper>
我们只需要改mapper内容,namespace参数是你的mapper接口,id指的是mapper接口中的方法名,resultType指的是方法返回的实体类型,mapper中则是sql代码,我这里是查询所有并返回List集合。
8、编写测试类
首先获取SqlSession对象
SqlSession sqlSession = MybatisUtils.getSqlSession();
调用getMapper方法返回接口引用
EmpMapper empMapper = sqlSession.getMapper(EmpMapper.class);
调用方法并输出
for (Emp emp : empMapper.getEmpForList()) {
System.out.println(emp);
}
最后关闭SqlSession
sqlSession.close();
输出:
Emp{eid=1, ename='张三', esex='女', esalry='2000'}
Emp{eid=2, ename='李四', esex='男', esalry='20000'}
Emp{eid=4, ename='赵六', esex='男', esalry='8000'}
Emp{eid=5, ename='可星', esex='男', esalry='40000'}
Emp{eid=8, ename='可可1', esex='男', esalry='299999'}
Emp{eid=9, ename='可可2', esex='男', esalry='299999'}
Emp{eid=10, ename='可可3', esex='男', esalry='299999'}
Emp{eid=11, ename='可可4', esex='男', esalry='299999'}
9、途中可能会遇到的问题
1、配置文件没有注册,也就是你的映射文件没有添加到核心配置的mapper标签中
2、绑定接口错误,注意要写包类路径
3、方法名不对
4、返回类型不对,如果是返回的集合,返回类型写泛型即可
5、maven导出资源问题
如果遇到第5点错误,请在pom.xml加入:
<build>
<resources>
<resource>
<directory>src/main/resources</directory>
<includes>
<include>**/*.properties</include>
<include>**/*.xml</include>
</includes>
<filtering>true</filtering>
</resource>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.properties</include>
<include>**/*.xml</include>
</includes>
<filtering>true</filtering>
</resource>
</resources>
</build>
mybatis其内部是如何运作的,待我之后学习了源码再来给大家分享!