以下代码都是笔者消化以后写出的代码,如有雷同请联系笔者删除,如有错误,还望指正,笔者虚心请假。共勉
1.通过maven工程来引入mabatis依赖因为后面有可能Mapper层的xml文件可能不会被读取,所以要加入Maven的一个约定熟成mysql mysql-connector-java 5.1.47 org.mybatis mybatis 3.5.6 junit junit 4.12
mybatis探究:src/main/resources ***.xml true src/main/java ***.xml true
因为mybatis也是要和数据库打交道的,所以不会避免要与jdbc打交道,所以可以看出mybatis的工作流程基本为:
代理调用方->>mybatis->>jdbc->>sql
而内部可以得知:
- 获取连接
- 预编译sql
- 设置参数
- 执行sql
大体得知:
动态代理方->sqlsession->执行器->jdbc
所以官方通过建造者模式(selsessionFactoryBuilder)先建造一个sqlsession工厂,然后由工厂来创建sqlsession会话,来执行一系列封装了的sql语句
了解:SqlSessionFactoryBuilder 这个类可以被实例化、使用和丢弃,一旦创建了 SqlSessionFactory,就不再需要它了。 因此 SqlSessionFactoryBuilder 实例的最佳作用域是方法作用域(也就是局部方法变量)。 你可以重用 SqlSessionFactoryBuilder 来创建多个 SqlSessionFactory 实例,但最好还是不要一直保留着它,以保证所有的 XML 解析资源可以被释放给更重要的事情。 SqlSessionFactory SqlSessionFactory 一旦被创建就应该在应用的运行期间一直存在,没有任何理由丢弃它或重新创建另一个实例。 使用 SqlSessionFactory 的最佳实践是在应用运行期间不要重复创建多次,多次重建 SqlSessionFactory 被视为一种代码“坏习惯”。因此 SqlSessionFactory 的最佳作用域是应用作用域。 有很多方法可以做到,最简单的就是使用单例模式或者静态单例模式。 SqlSession 每个线程都应该有它自己的 SqlSession 实例。SqlSession 的实例不是线程安全的,因此是不能被共享的,所以它的最佳的作用域是请求或方法作用域。 绝对不能将 SqlSession 实例的引用放在一个类的静态域,甚至一个类的实例变量也不行。 也绝不能将 SqlSession 实例的引用放在任何类型的托管作用域中2.废话不多说,来创建一个sqlsession 2.1先编写一个Mabatis工具类来创建sqlsession
public class MybatisUtis {
//sqlSessionFactory ->sqlSession
private static SqlSessionFactory sqlSessionFactory;
static {
//加载sqlSessionFactory ,引入mybatis
try {
String resource = "mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
} catch (IOException e) {
e.printStackTrace();
}
}
//有了工厂就可以拿到会话函数
public static SqlSession getSqlSession(){
return sqlSessionFactory.openSession(true);
//这里的true是打开自动提交事务
}
}
2.2有了这些还不够,我们既然使用啦数据库,所以必须要有一个数据库配置吧,换句话说,也就是要有一个Mybatis的核心配置吧
编写mybatis-config.xml
注:这里我是直接使用的写死,一般不推荐这种方法,可以分离一个配置文件专门来写数据库文件 2.3接口配置结束后就可以来使用了 2.3.1先编写一个实体类,对应你的数据库里面的数据
@Data
public class User{
private String name;
private int id;
private String pwd;
}
注:这里使用的是一个lomlok的一个插件,可以帮助写过多的getter和setter
2.3.2编写一个接口,来写出数据库具体操作public interface UserDao{
List getUserList();
}
2.3.3编写接口的配置文件,也就是编写sql
select * from mybatis.user
注:这里的namespace是你的Dao层
3.最后,做测试@Test
public void getUserList(){
//第一步:获得SqlSession对象
SqlSession sqlSession = MybatisUtis.getSqlSession();
//方式一:getMapper
UserDao userDao = sqlSession.getMapper(UserDao.class);
List userList = userDao.getUserList();
for (User user : userList) {
System.out.println(user);
}
//关闭SqlSession
sqlSession.close();
}
总结:
mybatis就是一个封装好了sql的jdbc,先要获取sqlsessionFactory来获取sqlsession会话,然后与数据库进行交互,通过sqlsession来编写交互接口。



