1.为什么需要Mybatis;
(1)sql写在JAVA代码中,修改sql必须修改代码,耦合度太高;
(2)代码量多,重复性代码过多;
(3)手动设置参数,并且如果是查询操作,还需要手动转换结果,麻烦;
(4)连接资源手动关闭,麻烦【以后和Spring整合就不需要手动关闭连接了】;
2.初识Mybatis;
2.1什么是mybatis
Mybatis是一种不完善的orm框架, 因为它需要写sql,但是它常用的原因也是要写sql
ORM:O,对象 R,关系 M,映射
2.2mybatis的优势
1.sql语句与代码分离,存放于xml配置文件中,方便维护;
2.Mybatis消除了几乎所有的JDBC代码和手工设置参数以及结果集的检索;
3.提供XML标签,支持编写动态SQL,代替编写逻辑代码;
面试题:Mybatis相较于jdbc的优点?
1.把sql语句从java代码中抽取出来,方便维护,并且修改sql时不用修改java代码;
2.不用手动设置参数和对结果集的处理,让我们操作数据库更加简单;
3.与JDBC相比,大大减少了代码量,提高了开发效率;
3.Mybatis入门;
3.1. 导包(以后用所有框架都是先导jar包)
1.核心包 : 当前这个框架的主要功能 mybatis-3.2.1.jar
2.依赖包 : 当前框架所依赖的其它jar包 mybatis-3.2.1\lib*.jar
3.驱动包 : 以后不管你学习什么框架,只要是操作数据库的,都需要加上数据库驱动包mysql-connector-java-5.1.26-bin.jar
3.2. 准备工作: 数据库中准备表,创建对应的实体类,dao层,测试先行
表: resources/product.sql 实体类:略(自己写)
3.3. 写配置(使用框架一定会写配置) => XML
1.mybatis的核心配置
可以到官方文档中拷备过来
要求:一定要明白每一个配置的意思
2.写SQL的xml配置
可以到官方文档中拷备过来
3.4. 测试效果
读取核心配置文件 ->SqlSessionFactoryBuilder->SqlSessionFactory->SqlSession
4.Mybatis工具类;
因为dao层中都要获取SQLSession并且使用完都要关闭,对于像获取和关闭等操作所以抽取工具类交给工具类完成
//相当于java自动为你创建了一个对象
INSTANCE;
//声明工厂(这个对象的特点:一个项目只需要一个工厂)
private static SqlSessionFactory factory = null;
/**
* 在这里创建咱们的SqlSessionFactory对象
* 静态代码块:只要用到了这个类(枚举),这个代码块的代码就要执行
* 只会执行一次
*/
static{
try {
factory = new SqlSessionFactoryBuilder()
.build(Resources.getResourceAsReader("mybatis-config.xml"));
} catch (Exception e) {
e.printStackTrace();
}
}
//获到SqlSession对象
public SqlSession openSession(){
return factory.openSession();
}
5.Mapper映射器;
1.根据需求,创建模型相关的Mapper接口,例如:UserMapper;
2.在同包下编写映射文件,例如:UserMapper.xml;
(1)Mapper映射文件的命名空间,必须和接口的"完全限定名"一致;
(2)定义sql标签的id,需要和"接口的方法名"一致;
3.在Mybatis核心配置文件中配置(或注册)Mapper映射文件;
4.测试;
@Test
public void testSave() {
Product product = new Product();
product.setProductName(“ggg”);
//使用工具类获取sqlsession对象
SqlSession session = MyBatisUtil.INSTANCE.openSession();
//使用getMapper方法等到映射文件的对象
ProductMapper mapper = session.getMapper(ProductMapper.class);
//映射对象使用接口的方法
mapper.save(product);
//将内存中的数据加载到数据库中
session.commit();
}
- Mybatis使用细节;
6.1Log4j日志实现: - 步骤:
(1)导入log4j的jar包(3个);
(2)在classpath下添加log4j.properties【名字不能改】;
(3)日志级别:debug(调试时用)、info、warn、error(运行时用)在日志中我们可以看到执行的SQL语句,可以看到我们传递的参数
2.要在项目中打开日志,大家在资源文件根目录下创建一个log4j.properties【名称不要修改】的文件,并把下面的代码拷备到里面:
#日志器logger #輸出器appender #布局器layout
#1.控制台输出
#指定日志器的输出级别和日志器的名称
#log4j.rootLogger=info,myconsole
#指定输出器
#log4j.appender.myconsole=org.apache.log4j.ConsoleAppender
#指定布局器
#log4j.appender.myconsole.layout=org.apache.log4j.SimpleLayout
#2.文件输出.txt
#指定日志器的输出级别和日志器的名称
#log4j.rootLogger=error,myfile
#指定输出器
#log4j.appender.myfile=org.apache.log4j.FileAppender
#log4j.appender.myfile.File=E:\log4j.txt
#指定布局器(普通布局表示文本输出)
#log4j.appender.myfile.layout=org.apache.log4j.SimpleLayout
#3.文件输出.html
#指定日志器的输出级别和日志器的名称
#log4j.rootLogger=error,myhtml
#指定输出器
#log4j.appender.myhtml=org.apache.log4j.FileAppender
#log4j.appender.myhtml.File=D:\log4j.html
#指定布局器(网页布局)
#log4j.appender.myhtml.layout=org.apache.log4j.HTMLLayout
#4.控制台输出+文件输出.txt
#指定日志器的输出级别和日志器的名称
#log4j.rootLogger=error,con,file
#指定输出器
#log4j.appender.con=org.apache.log4j.ConsoleAppender
#log4j.appender.file=org.apache.log4j.FileAppender
#log4j.appender.file.File=D:\log4j.txt
#指定布局器(网页布局)
#log4j.appender.con.layout=org.apache.log4j.SimpleLayout
#log4j.appender.file.layout=org.apache.log4j.SimpleLayout
#5.控制台输出+自定义布局
log4j.rootLogger=DEBUG,my
#指定输出器
log4j.appender.my=org.apache.log4j.ConsoleAppender
#指定布局器(自定义布局)
#指定布局为自定义布局
log4j.appender.my.layout=org.apache.log4j.PatternLayout
#指定在自定义布局的格式,%d – 表示当前系统时间,%t – 执行该业务的线程名称,%p – 日记器的级别,-5 – 5表示输出字符的个数,符号表示右对齐
#%c – 表示指定业务所在的类的完全限定名(包名.类名),%m – 输出额外信息,%n – 表示换行
log4j.appender.my.layout.ConversionPattern=%d [%t] %-5p [%c] - %m%n
#设置package(可以是自定义的包也可以是api的包)输出级别
log4j.logger.org.springframework=info
log4j.logger.cn.itsource=debug
注意:在上面的标红部分是我们需要修改的,它大概表示为当前会打印哪些位置下面文件的日志;如果配置成功,那么在MyBatis运行操作数据时就可以看到相应的日志了;
6.2mybatis别名
6.2.1内置别名