IBatis提供的持久层框架包括SQLMap和Data Access Objects(DAO)
1)MyBatis是支持定制化SQL、存储过程以及高级映射的优秀的持久层框架
2)MyBatis 避免了几乎所有的JDBC代码和手动设置参数以及获取结果集
3) MyBatis可以使用简单的XML或注解用于配置和原始映射,将接口和java的POJO (Plain Old Java Objects,普通的Java对象)映射成数据库中的记录
4)MyBatis是一个半自动的ORM(Object Relation Mapping)框架(将数据库中的数据,映射到实体类对象,用户直接操作实体类对象即可)
1.SQL夹杂在java代码中耦合度高,导致硬编码内伤
2.维护不易且实际开发需求中SQL有变化,频繁修改的情况多见
3.代码冗长,开发效率低
1.操作简单,开发效率高
2.程序中的长难复杂SQL需要绕过框架
3.内部自动生产的SQL,不容易做特殊优化
4.基于全映射的全自动框架,大量字段的POJO进行部分映射比较困难
5.反射操作太多,导致数据库性能下降
1.轻量级,性能出色
2.SQL和java编码分开,功能边界清晰,java代码专注业务、SQL语句专注数据
3.开发效率稍逊于Hibernate,但是完全能够接受
习惯上命名为mybatis-config.xml,这个文件名仅仅是建议,并非强制要求。将来整合Spring之后,这个配置文件可以省略,所以大家操作时可以直接复制、粘贴
核心配詈文件主要用于配置连接数据库的环境以及MyBatis的全同配置信息
核心配置文件存放的位置是srcimain/resources日录下
DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<environments default="default">
<environment id="default">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/mybatis"/>
<property name="username" value="root"/>
<property name="password" value="2022"/>
dataSource>
environment>
environments>
<mappers>
<mapper resource="org/mybatis/example/BlogMapper.xml"/>
mappers>
configuration>
MyBatls中的mapper接口相当于以前的dao。但是区别在于,mapper仅仅是接口,我们不需要提供实现类。
MyBatls中的mapper接口相当于以前的dao。但是区别在于,mapper仅仅是接口,我们不需要提供实现类。
创建MyBatis的映射文件
相关概念:ORM(Object Relationship Mapping)对象关系映射
.对象:java的实体类对象
.关系:关系型数据库
.映射:二者之间的对应关系
映射文件的命名规则->表所对应的实体类的类名+Mapper.xml
SqlSession:代表java程序和数据库之间的会话。(HttpSession是java程序和浏览器之间的会话)
SqlSessionFactory:是”生产SqlSession的”工厂。
工厂模式:如果创建某一个对象,使用的过程基本固定,那么我们就可以把创建这个对象的相关代码封装到一个”工厂类”中,以后都使用这个工厂类来”生产”我们需要的对象
示例代码:
@Test
public void testMyBatis() throws IOException {
//加载核心配置文件
InputStream is = Resources.getResourceAsStream("mybatis-config.xml");
//获取SqlSessionFactoryBuilder
SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();
//获取SqlSessionFactory
SqlSessionFactory sqlSessionFactory = sqlSessionFactoryBuilder.build(is);
//获取SqlSession
SqlSession sqlSession = sqlSessionFactory.openSession();
//获取mapper接口对象
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
//测试功能
int result = mapper.insertUser();
//提交事务
sqlSession.commit();
System.out.println("result:"+result);
}
对于简单的SQL我们没必要每次都手动提交数据,因此可以把默认的手动提交,变为自动提交
第一步 加入依赖
<dependency>
<groupId>log4jgroupId>
<artifactId>log4jartifactId>
<version>1.2.17version>
dependency>
第二步 加入配置文件
DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
<appender name="STDOUT" class="org.apache.log4j.ConsoleAppender">
<param name="Encoding" value="UTF-8"/>
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%-5p %d{MM-dd HH:mm:ss,SSS}
%m (%F:%L) \n"/>
layout>
appender>
<logger name="java.sql">
<level value="debug"/>
logger>
<logger name="org.apache.ibatis">
<level value="info"/>
logger>
<root>
<level value="debug"/>
<appender-ref ref="STDOUT"/>
root>
log4j:configuration>
FATA(致命)>ERROR(错误)>WARN(警告)>INFO(信息)>DEBUG(调试)
从左到右打印的内容越来越详细
将数据库信息写在properties里面,之后在配置文件里面引用
第一步:创建properties文件,并且编写数据库配置信息
第二步:在配置文件中引入properties文件
第三步:编写数据库连接池
MyBatis核心配置文件中,标签的顺序:
propertiers?,setting?,typeAliases?,typeHandlers?
objectFactory?,objectWrapperFactory?,reflectorFactory?,
plugins?,environments?,dataseIdProvider?,mappers?
为了避免重复频繁的写在mapper中的resultType写全类名
所以可以在配置文件中利用typeAliases标签创建一个简短的别名
随后在mapper文件写sql语句时可以
注意
不区分大小写
若不设置属性alis
则会有默认别名就是类名不区分大小写
当表的数量太多的时候,需要大量的mapper标签来引入映射文件,为此我们可以通过引入包的方式来引入映射文件
以包为单位引入映射文件
要求:
1.mapper接口所在的包要和映射文件所在的包一致
2.mapper接口要和映射文件的名字一致