优秀的持久层框架-Mybatis框架解析
Posted 程序员食堂
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了优秀的持久层框架-Mybatis框架解析相关的知识,希望对你有一定的参考价值。
Topic
Mybatis步骤
数据库连接,使用时连接,不使用时释放,对数据库进行频繁连接的开启和关闭,造成数据库资源浪费,影响数据库性能
设想:使用数据库连接池管理数据库连接
将sql语句硬编码到Java代码中,如果sql语句修改,需要重新编译Java代码,不利于系统维护.
设想:将SQL语句配置在xml配置文件中,即使SQL变化,不需要对Java代码进行重新编译
向preparedStatement中设置参数,对占位符位置和设置参数硬编码到Java代码中,不利于系统维护.
设想:将SQL语句及占位符和参数全部配置在xml中
从resultset中遍历结果集数据时,存在硬编码,将获取表的字段进行硬编码,不利于系统维护.
设想:将查询结果集,自动映射成Java对象
Mybatis是一个持久层的框架,让程序将主要精力放在SQL上,通过mybatis提供的映射方式,自由灵活生成满足的SQL语句;可以将preparedStatement中的输入参数自行自动输入映射,将查询结果集灵活映射成Java对象(输出映射)
Mybatis架构
通过sqlSessionFactoryBuilder创建会话工厂sqlSessionFactory
将sqlSessionFactoryBuilder当成一个工具类使用,不需要使用单例模式管理,在需要sqlSessionFactory时,只需要new一次sqlSessionFactoryBuilder就行了
sqlSessionFactory
通过sqlSessionFactory创建sqlSession,使用单例模式管理sqlSessionFactory
sqlSession
sqlSession是一个面向用户的接口, sqlSession中提供很多操作数据库的方法,如:selectOne(),selectList().sqlSession是线程不安全的,在sqlSession实现类中除了有接口中的方法(操作数据库的方法)还有数据域属性.
sqlSession最佳应用场合在方法体内,定义成局部变量使用.
MybatisDemo02
编写dao,dao.impl,mapper.xml
Test:
public class BookDaoTest {
private SqlSessionFactory sqlSessionFactory;
@Before
public void setUp() throws IOException{
String resource="mybatis-config.xml";
InputStream inputStream=Resources.getResourceAsStream(resource);
sqlSessionFactory=new SqlSessionFactoryBuilder().build(inputStream);
}
@Test
public void testLoadById() throws Exception{
//创建Dao对象
IBookDao bookDao=new BookDao(sqlSessionFactory);
Book book=bookDao.loadById(5);
System.out.println(book);
}
编写dao,mapper.xml
遵守一定的开发规范:
Dao接口的方法名和mapper.xml中的statement的 id一致
Dao.java接口中的方法输入参数类型和mapper.xml中statement的paramterType指定的类型一致
Dao.java接口中的方法输出参数类型和mapper.xml中statement的ResultType指定的类型一致
Test:
public class BookDaoTest {
private SqlSessionFactory sqlSessionFactory;
@Before
public void setUp() throws IOException{
String resource="mybatis-config.xml";
InputStream inputStream=Resources.getResourceAsStream(resource);
sqlSessionFactory=new SqlSessionFactoryBuilder().build(inputStream);
}
@Test
public void testLoadByName() throws Exception{
SqlSession sqlSession=sqlSessionFactory.openSession();
//创建IBookDao对象,自动生成mapper代理对象
IBookDao bookDao=sqlSession.getMapper(IBookDao.class);
Book book=bookDao.loadById(5);
System.out.println(book);
}
}
properties(属性)
settings(全局配置参数)
typeAliases(类型别名)
typeHandlers(类型处理器)
objectFactory(对象工厂)
plugins(插件)
environments(环境集合属性对象)
environment(环境子属性对象)
transactionManager(事务管理)
dataSource(数据源)
mappers(映射器)
B树 |
nginx |
面试 |
数据库|
集合|
集合|
腾讯|
前端|
Java|
美团|
Java|
滴滴新锐|
以上是关于优秀的持久层框架-Mybatis框架解析的主要内容,如果未能解决你的问题,请参考以下文章