Mybaits系列之MyBatis的发展之路,怎么⽤好MyBatis
为什么要⽤Mybatis?
先看看原⽣操作JDBC的步骤
*注册驱动,获取连接
*创建StateMent对象
*execute()⽅法执⾏SQL
*把结果集转换成POJO
*关闭资源
⼀看,存在⼤量的重复代码,繁琐过程,结果集的处理很复杂,数据库连接的管理也很⿇烦。
所以,慢慢就出现了⼀些包装数据库操作的框架,springJDBC、dbUtils、heibernate、mybatis等。
先说说⽐较早的springJDBC和dbUtil,它们主要解决了数据源的封装和映射结果集的包装。
但是并没有真正解决SQL语句的硬编码(直接把sql写在代码中,业务操作和数据库操作耦合在⼀期);参数只能按顺序传⼊(占位符),不能就通过⼀个对象传进去来操作;没有实现实体类到数据库记录的映射;没有提供缓存等功能。
为了解决这些问题,真正的ORM级的框架就出现了。
Hibernate(全⾃动化,jpa是对hibernate的封装):
提供session对象来直接操作对象,⽐如session.save(bo)
问题:
1、不能指定部分字段(不能像sql样只查部分)
2、⽆法⾃定义SQL,优化困难
3、不⽀持动态SQL
MyBatis(半⾃动化):
1、使⽤连接池对连接进⾏管理
2、SQL和代码分离,集中管理
3、参数映射和动态和动态SQL
4、结果集映射
5、缓存管理
6、重复SQL的提取,sql的标签,可以在其它地⽅来引⽤
7、插件机制
实际开发建议:
*业务简单的项⽬可以使⽤Hibernate
*需要灵活的SQL,可以使⽤,MyBatis
*对性能要求⾼,可以使⽤JDBC
*Spring JDBC可以和ORM框架混⽤
MyBatis编程式开发核⼼配置
去除Spring容器,我们就⽤java和Mybatis来耦合,看看纯MyBatis是怎么编程的。
1、mybatis和MySQL.jar包依赖
2、全局配置⽂件l
3、映射器l
4、Mapper接⼝
/**
* 使⽤MyBatis API⽅式
* @throws IOException
*/
@Test
public void testStatement() throws IOException {jpa mybatis
String resource = "l";
InputStream inputStream = ResourceAsStream(resource);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
SqlSession session = sqlSessionFactory.openSession();
try {
Blog blog = (Blog) session.selectOne("com.darker.mapper.BlogMapper.selectBlogById", 1); System.out.println(blog);
} finally {
session.close();
}
}
/**
* 通过 Mapper(XXXMapper.class) 接⼝⽅式
* @throws IOException
*/
@Test
public void testSelect() throws IOException {
String resource = "l";
InputStream inputStream = ResourceAsStream(resource);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
SqlSession session = sqlSessionFactory.openSession(); // ExecutorType.BATCH
try {
BlogMapper mapper = Mapper(BlogMapper.class);
Blog blog = mapper.selectBlogById(1);
System.out.println(blog);
} finally {
session.close();
}
}
四个核⼼对象的⽣命周期
SqlSessionFactoryBuiler 创建⼯⼚类(产⽣了⼯⼚类对象就可以丢弃,⽅法内部)SqlSessionFactory 创建会话(需要⼀直存在,不停的创建会话,应该是单例⼀直存在的)SqlSession 会话(⼀个请求的⽅法⾥⾯存在)
Mapper映射(单个⽅法)
⾸先看到我们的xml,发现有个root的标签configuration,既然有这个根标签,马上就能想到MyBatis中是不是会有个Configruation配置类。
发现了,果然有这个配置类,所以⼀直说配置源于代码,⽐如spring的各种配置⼀样也能在源码中到(好多⼩伙伴⼀直感觉各个版本的配置标签不统⼀,可能会有更改,不好查询,其实直接看源码就可以),下⾯我们就来好好分析下这些标签。
⼀级标签:
*properties,把⼀些需要重复引⽤的属性放到这个标签中, ⽐如数据库连接得配置。
*settings,mybatis核⼼⾏为得控制。
*typeAliases别名配置,简化类型全路径得拼写(⼀般会换成包扫描)
*typeHandler,类型处理器,为什么mybatis可以把数据库得varchar类型对应到我们java的string类型
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论