搭建Mybatis环境
1.下载需要的jar文件
通过MyBatis官网下载MyBatis和相应版本的jar文件。
(推荐下载mybatis-3.2.2.zip和mybatis-3-mybatis-3.2.2.zip)
其中:mybatis-3.2.2.zip文件是MyBatis的jar文件和官方使用手册等。
mybatis-3-mybatis-3.2.2.zip文件是MyBatis的源码包,存放MyBatis的源文件。
2.引入jar包
在Project Structure的Modules中引入以下jar包,其他jar包根据需要引入,兵于Problems中将问题处理掉。
(1) log4j-1.2.17.jar(负责日志输出的jar文件)
(2) mybatis-3.2.2.jar
(3) mybatis-3.2.2-sources.jar(mybatis源文件jar包)
(4) mysql-connector-java-5.1.0-bin.jar(MySql数据库驱动jar包)
并根据需求引入其他jar包(如需建立测试类,应将测试类jar包引入)
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">
<!--是mybatis的标准根目录-->
<configuration>
<!--获取JDBC配置文件-->
<properties resource="db.properties"/>
<!--将MyBatis实现方式设置为LOG4J-->
<settings>
<setting name="logImpl" value="LOG4J"/>
</settings>
<!--取别名方法:type为类的地址,alias为别名-->
<typeAliases>
<typeAlias type="cn.kgc.kb07.entity.Provider" alias="provider"/>
</typeAliases>
<!--配置MyBatis运行环境-->
<environments default="dev">
<environment id="dev">
<!--选择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="${user}"/>
<property name="password" value="${pwd}"/>
</dataSource>
</environment>
</environments>
<!--配置mapper文件-->
<mappers>
<mapper resource="cn/kgc/dao/ProviderMapper.xml"/>
</mappers>
</configuration>
元素 | 作用 |
---|---|
configuration | 配置文件的根元素节点 |
properties | 从resource类型的文件中获取数据库链接配置 |
settings | 设置mybatis的一些行为 |
typeAliases | 设置元素,取别名 |
environments | 配置mybatis的多个运行环境 |
environment | environments的子节点 |
mappers | 设置映射文件 |
mapper | mappers的子节点 |
注意:配置文件的元素节点是有一定顺序的
4.创建持久化类和SQL映射文件(Dao层)
(1)持久化类
在应用程序中,用来实现业务问题实体的类(如,在电子商务应用程序中的Customer和Order)就是持久化类,即创建数据库对应的类,该类属性名应与数据库表中的参数名对应一致
public class Provider {
private int id;
private String proCode;
private String proName;
private String proDesc;
private String proContact;
private String proPhone;
private String proAddress;
private String proFax;
private int createdBy;
private Date creationDate;
private Date modifyDate;
private int modifyBy;
//此处省略getter&setter&toString方法
对应的表如下:
(2)SQL映射文件
类所对应的映射文件格式为xml 命名为ProviderMapper.xml并建立ProviderMapper接口(方法名与ProviderMapper.XML中id对应)
ProviderMapper.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">
<!--namespace指定关联的接口-->
<mapper namespace="cn.kgc.kb07.dao.ProviderMapper">
<!--id对应接口的方法名,resultType为对应方法返回值类型-->
<select id="queryAllProvider" resultType="provider">
select * from smbms_provider;
</select>
ProviderMapper代码如下:
package cn.kgc.kb07.dao;
import cn.kgc.kb07.entity.Provider;
import java.util.List;
public interface ProviderMapper {
List<Provider> queryAllProvider();
}
5.创建测试类
需在工程中加入JUnit4并自行配置JUnit4配置文件,创建测试类,并通过JUnit4方法输出日志(也可通过System.out.println在控制台打印结果)
测试类如下:
package cn.kgc.dao;
import cn.kgc.entity.User;
import cn.kgc.until.MapperConfig;
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 java.io.IOException;
import java.io.InputStream;
import java.util.List;
import static org.junit.Assert.*;
public class UserMapperTest {
Logger logger=Logger.getLogger(UserMapperTest.class);
@Test
public void queryAllProvider() throws IOException {
//1、工程队
SqlSessionFactoryBuilder builder=new SqlSessionFactoryBuilder();
//2、建工厂
InputStream is= Resources.getResourceAsStream("mybatis-cfg.xml");
SqlSessionFactory factory=builder.build(is);
//生产SqlSession对象
SqlSession session=factory.openSession();
List<Provider> providerList=session.getMapper(ProviderMapper.class).queryAllProvider();
for (Provider provider : providerList) {
System.out.println(provider);
}
session.close();
}
6.代码优化提取方法
提取的方法如下:
package cn.kgc.until;
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 java.io.IOException;
import java.io.InputStream;
/**
* @Author shi
* @Date 2020/6/9
* @Description 目的是为Mybatis中读取配置文件创建SqlSession对象时方便调用
*/
public class MapperConfig {
private static SqlSessionFactory factory;
//静态方法可能会导致报错,如出现错误可改为动态方法
static{
SqlSessionFactoryBuilder builder=new SqlSessionFactoryBuilder();
try {
InputStream is= Resources.getResourceAsStream("mybatis-cfg.xml");
factory=builder.build(is);
} catch (IOException e) {
e.printStackTrace();
}
}
public static SqlSession getSession(){
//非事物的情况下,把自动提交开启
return factory.openSession(true);
}
public static void closeSession(SqlSession session){
//关闭方法
if (session!=null){
session.close();
}
}
}
提取方法后的测试类如下:
public class ProviderMapperTest {
@Test
public void queryAllProvider() {
SqlSession session= MapperConfig.getSession();
List<Provider> providerList=session.getMapper(ProviderMapper.class).queryAllProvider();
for (Provider provider : providerList) {
System.out.println(provider);
}
MapperConfig.close(session);
}
}
MyBatis框架优缺点
(1)优点
1.与JDBC相比,减少了50%以上的代码量
2.最简单的持久化框架,小巧并简单易学
3.SQL代码从程序代码中彻底分离,可重用
4.提供XML标签,支持编写动态SQL
5.提供映射标签,支持对象与数据库的ORM字段映射
(2)缺点
1.SQL语句编写工作量大,对开发人员有一定要求
2.数据库移植性差