在没有整合spring框架的时候,最原始的mybatis.cfg.xml配置如下:
mysql.properties配置文件(数据库连接信息)
jdbc.driver=org.gjt.mm.mysql.Driver
jdbc.url=jdbc:mysql://127.0.0.1:3306/test?useUnicode=true&characterEncoding=UTF8
jdbc.username=root
jdbc.password=1234
mybatis.cfg.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.cfg.xml 该配置文件主要用于:配置数据库的相关连接信息 -->
<configuration>
<!-- 将外部文件链接到mybatis.cfg.xml中 -->
<properties resource="mysql.properties"></properties>
<settings>
<!-- 开启懒加载的功能 -->
<setting name="lazyLoadingEnabled" value="true"/>
<!-- 将积极主动的关联对象加载方式,修改为消极按需的懒加载方式 -->
<setting name="aggressiveLazyLoading" value="false"/>
</settings>
<!-- 开启自动扫描,并为 com.gt.mybatis.bean 下面的所有的JavaBean创建别名
是将类的类名 来作为类的全限名的别名-->
<typeAliases>
<package name="com.gt.mybatis.bean"/>
</typeAliases>
<!-- 配置数据源 -->
<!-- 数据库连接池的工作原理:
连接池:就是一个存放连接的池子,或者叫容器,只不过这个池子被分为2个部分:活跃区,空闲区
比如:配置 初始化连接条数为5,当连接不够重新获取条数为15,最大连接数为50
连接池创建的时候,会根据配置信息,使用JDBC技术初始化 5 根连接,存放在连接池的"活跃区"中。当应用程序需要访问数据库时,连接池将从活跃区 中获取1根连接给应用程序,用于访问数据库,当该连接完成了SQL执行之后,不需要销毁而是直接重新回到连接池中。从而做到连接资源的复用。
当应用程序将"活跃区"中的5根连接都使用完毕之后,将按照配置信息重新再获取 15 根连接到"活跃区"中,以供应用程序使用,当然还是有出去的,就有回来
的。只不过回来的时候,需要判断"活跃区"中的连接是否已达到最初的状态,如果超过了,连接将回到"空闲区"去,以供应用程序 优先 下次访问(注意:空闲
区中的连接,一旦使用完毕,将直接销毁,不会再回到连接池中) 当重新获取新的连接之后,如果还是不够,就一直获取新的连接,直到达到最大连接数 50 ,当业务量逐渐上升的时候,连接池可以采用上述的方式不断的获取新的连接,当业务量逐渐下降时,也可以不断的销毁旧的连接 -->
<environments default="default">
<environment id="default">
<!-- 采用JDBC的事务管理方式,去管理数据库事务 -->
<transactionManager type="JDBC"></transactionManager>
<dataSource type="POOLED">
<property name="driver" value="${jdbc.driver}"/>
<property name="url" value="${jdbc.url}"/>
<property name="username" value="${jdbc.username}"/>
<property name="password" value="${jdbc.password}"/>
</dataSource>
</environment>
</environments>
<!-- 向mybatis框架,注册SQL映射文件 -->
<mappers>
<package name="com.gt.mybatis.o2mmag.mapper"/>
<package name="com.gt.mybatis.m2mmag.mapper"/>
<package name="com.gt.mybatis.extendsmag.mapper"/>
<!-- 如果有多个:<package name="com.gt.mybatis.usermag.mapper"/>
</mappers>
</configuration>
配置文件写好了之后,就需要有东西去读取这片配置
SessionUtil工具类,会去读取mybatis.cfg.xml这个配置文件,给我们产生一个session,通过这个session我们可以去建立与mapper接口的关系
import java.io.IOException;
import java.io.Reader;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
/**
* 获取Session的工具类
* @author Administrator
*
*/
public class SessionUtil {
private static ThreadLocal<SqlSession> local = new ThreadLocal<SqlSession>() {
protected SqlSession initialValue() {
return ssf.openSession();
};
};
private static SqlSessionFactory ssf;
/**
* 读取mybatis.cfg.xml配置文件,然后采用建造者模式产生SqlSessionFactory类
* 默认读取src目录,所以根目录是src,将配置文件放在src下,就可以直接写文件名
*/
static {
String xml = "mybatis.cfg.xml";
try {
Reader reader = Resources.getResourceAsReader(xml);
ssf = new SqlSessionFactoryBuilder().build(reader);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
/**
* 从工厂类中获取SqlSession实例
* @return
*/
public static SqlSession getSession() {
SqlSession session = local.get();
if(session == null) {
session = ssf.openSession();
local.set(session);
}
return session;
}
}
然后我们就可以去调用mapper里面定义的查询方法了
public class StudentDaoImpl implements IStudentDao {
@Override
public int countStudentBeanList(StudentBean stu) {
// TODO Auto-generated method stub
//通过工具获取session
SqlSession session = SessionUtil.getSession();
//通过session建立与自己写的mybatismapper接口的联系
StudentMapper sm = session.getMapper(StudentMapper.class);
//调用自己写的mapper接口的方法
int rows = sm.countStudentBeanList(stu);
session.close();
return rows;
}
}