MyBatis简介 MyBatis是一个持久层框架,它对jdbc的操作数据库的过程进行封装,使开发者只需要关注SQL本身,而不需要花费精力去处理例如注册驱动、创建connection、创建statement、手动设置参数、结果集检索等jdbc繁杂的过程代码
文章图片
- mybatis-config.xml时mybatis的核心配置文件,通过他的配置可以生成SqlSessionFactory工厂对象
- 基于SqlSessionFactory工厂可以生成SqlSession对象
- SqlSession对象可以发送SQL去执行并返回结果
- Executor是SqlSession底层对象用于执行SQL语句
- MapperStatement也是SQLSession低等对象,可以用来接收输入映射(用户输入的参数)和作出输出映射(Sql查询结果)
- 使用传统JDBC会有大量重复代码
- JDBC本身没有连接池,会频繁创建关闭连接效率低
- Sql写死在程序中
- 查询SQL返回的结果是ResultSet对象,需要手动处理
使用MyBatis - Mybatis对JDBC进行封装,可以简化代码
- Mybatis自身支持连接池,可以提高效率
- MyBatis是将SQL配置在Mapper文件中,修改SQL修改配置文件就可以,不需要重新编译
- MyBatis会将查询结果转换成java对象
- 创建SqlSessionFactory
- 通过SqlSessionFactory创建SqlSession
- 通过SqlSession执行数据库操作
- 调用session.commit()提交事务
- 调用session.close()关闭事务
- 易于上手掌握
- Sql写在xml里利于管理和优化
- 减少Sql与代码的耦合
- 提供xml标签,支持动态Sql( )
缺点 - Sql工作量大
- Sql依赖于数据库,数据库移植性差
junit
junit
4.9
mysql
mysql-connector-java
5.1.32
org.mybatis
mybatis
3.2.8
org.slf4j
slf4j-log4j12
1.6.4
Mybatis-config.xml配置文件 【mybatis|MyBatis】Mybatis-config.xml是MyBatis的全局配置文件src/main/resources
- environments : 可以配置多个环境(environment)每种环境可以做不同配置或连接不同数据库开发、测试、生产环境可能需要不同的配置,连接的数据库可能也不相同,因此我们可以配置三个environment,分别对应上面三种不同的环境
- environment配置 :内部可以配置多种配置信息,事务管理配置(`transactionManage)和数据源(dataSource)配置
- transactionManage事务管理器 : Mybatis中有两种事务管理方式(type="[JDBC|MANAGED])JDBC:直接使用JDBC的提交和回滚设置,他依赖数据源的到的连接来管理事务范围; MANAGED:这个配置几乎没做什么。它从来不提交或回滚一个连接。需要自己手动添加并管理 不经常使用
- dataSource 数据源 即连接池配置 使用type指定数据源类型
JNDI:已过时,不推荐使用!
POOLED:使用连接池,mybatis会创建连接池,并从连接池中获取连接访问数据库,在操作完成后,将会把连接返回连池。
UNPOOLED:不使用连接池,该方式适用于只有小规模数量并发用户的简单应用程序上 - Mapper: 用于导入Mapper文件位置,可以配置多个
Mybatis详细配置
添加Mapper.xml
- (1)第1行是xml的文档声明,用于声明xml的版本和编码
- (2)第2、3、4行,引入了xml约束文档,当前xml文档将会按照mybatis-3-mapper.dtd文件所要求的规则进行书写。
- (3)Mapper标签:根标签,其中namespace(名称空间,也叫命名空间),要求不能重复。在程序中通过【namespace + id 】定位到要执行哪一条SQL语句
位置src/main/resource - (4)select标签 用于制定执行的各种SQL语句包括id , resultType,resultMap
="findAll" resultType="com.tedu.pojo.Emp">
select * from emp
测试
- 1.读取Mybatis核心配置文件(mybatis-config.xml)
InputStream in = Resources.getResourceAsStream(“mybatis-config.xml”); - 2.通过配置信息获取SQLSessionFactory工厂对象
SqlSessionFactory fac = new SqlSessionFactoryBuilder().build( in ); - 3.通过工厂对象获取SqlSession对象
SqlSession session = fac.openSession(); - 4.通过namespace+id找到要执行的sql语句并执行sql语句
List list = session.selectList(“EmpMapper.findAll”);
@Test
public void findAll() throws IOException {
//1.读取mybatis的核心配置文件(mybatis-config.xml)
InputStream in = Resources.getResourceAsStream("mybatis-config.xml");
//2.通过配置信息获取一个SqlSessionFactory工厂对象
SqlSessionFactory fac = new SqlSessionFactoryBuilder().build( in );
//3.通过工厂获取一个SqlSession对象
SqlSession session = fac.openSession();
//4.通过namespace+id找到要执行的sql语句并执行sql语句
List list = session.selectList("EmpMapper.findAll");
//5.输出结果
for(Emp e : list) {
System.out.println( e );
}
}
推荐阅读
- mybatis|mybatis list为空判断_程序员,Mybatis 你踩过坑吗()
- mybatis|Mybatis 分页Config过时问题记录
- mybatis|mybatis 查询的时间不对_程序员,Mybatis 你踩过坑吗()
- hadoop|Hadoop(三)
- 微信小程序开发|微信小程序--四、基础加强
- 笔记|构造HTTP
- Elasticsearch|Mysql同步数据到Elasticsearch(Logstash)
- 笔记|听书项目开发过程及重难点总结(用户管理)
- 笔记|个人博客系统