- Mybatis
- 使用JDBC编程(先建立数据库)
(1)准备数据库连接参数
(2)连接数据库
(3)编译SQL
(4)设置SQL参数
(5)执行SQL获取结果
(6)遍历结果集,封装数据到JavaBean
(7)关闭资源
[但是有很多缺陷例如代码太多,影响开发效率,不适合现在的社会节奏,重复的代码一大堆,造成代码冗余,所有功能的代码在一个板块,容易混淆]
Mybatis框架就是为了解决JDBC的一系列问题而创建的。
2.目标:减少重复代码,减少资源的浪费,把业务代码和数据库分开,形成自动化的工作。
(1)操作如下:·将配置丢入XML文件,与业务代码分离。
·通过配置文件编写SQL,我们仅需要关注SQL语句,其余重复繁琐 操作由框架代劳。
·通过数据库连接池的使用减少资源开销。
{官网:http://www.mybatis.org/mybatis-3/
中文官方文档:http://www.mybatis.org/mybatis-3/zh/index.html}
Mybatis官网有利于初学者学习Mybatis框架。
- Mybatis 优点:
·轻量级,性能出色。
·SQL 和 Java 编码分开,功能边界清晰。Java代码专注业务、SQL语句专注数 据。
·开发效率稍逊于HIbernate,但是完全能够接受。
2.搭建Mybatis环境:Eclipse
MySQL版本:MySQL 8
MyBatis版本:MyBatis 3.5.8
【用于单元测试的jar包,其中junit依赖hamcrest-core包,而hamcrest-library包为hamcrest-library包做补充。】
(1)具体操作:
第一步:创建JavaWeb工程。
第二步:导入jar包。【选中所有jar包右键-build path...-add to Build Path
】
(创建Mybatis核心配置文件)
第三步:新建与src平级的文件夹resource,用来存放配置文件。
第四步:新建mybatis-config.xml文件。(文件名可自定义,大部分命名为:mybatis-config)【XML 配置文件包含对 MyBatis 系统的核心设置,包含获取数据库连接实例的数据源和决定事务范围和控制的事务管理器。】
(创建log4j配置文件)
第五步:新建与src平级的文件夹resource,用来存放配置文件。
第六步:在 log4j.properties文件配置日志输出的方式。
【# 声明日志的输出级别及输出方式
log4j.rootLogger=DEBUG,stdout
# MyBatis logging configuration...
log4j.logger.org.mybatis.example.BlogMapper=TRACE
# Console output...
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
# 定义日志的打印格式 %t 表示线程名称 %5p 日志级别 %msg日志信息
log4j.appender.stdout.layout.ConversionPattern=[%t] %5p - %msg \:%m%n
】(3.5.8之后的版本会被废弃,且会出现乱码,必须调到UTF-8的格式)
- 写一个Mybaitis项目
目的:将学生信息在数据库下进行管理,要求使用mybatis框架。
- 创建数据库:[创建数据库mybatis_demo,并在该数据库下创建学生表 :student(sid ,s_num,s_name,s_gender,s_age)]
新建一个数据库(Mybatis_Demo)
打开数据库连接执行下列语句
CREATE TABLE `student` (
sid int primary key auto_increment,
s_num varchar(12) not null unique comment '学号',
s_name varchar(20) not null comment '姓名',
s_gender varchar(2) not null,
s_age int not null)
ENGINE=InnoDB DEFAULT CHARSET=utf8;
insert into student(s_num,s_name,s_gender,s_age) values('1001','张三','男',22);
insert into student(s_num,s_name,s_gender,s_age) values('1002','李四','女',21);
insert into student(s_num,s_name,s_gender,s_age) values('1003','王五','女',22);
insert into student(s_num,s_name,s_gender,s_age) values('2001','赵六','男',24);
select * from student;
[先执行上半部分,成功后再执行下半部分,执行成功后返回表点击刷新]
- 创建一个实体类
public class Student {
private int stuId;
private String stuNum;
private String stuName;
private String stuGender;
private int stuAge;
{运用Getter and Setter和to string 方法} 【右键空白处选Source】
}
- 创建Mapper接口,定义操作方法
·新建StudentMapper接口【创建一个interface】
·定义操作方法:插入一条学生记录
- 创建Mapper接口映射文件
在resources目录下新建名为StudentMapper.xml的映射文件
[映射文件一般命名为xxxMapper.xml]
(5)在映射文件中对Mapper接口中定义的方法进行实现:
<mapper namespace=”com.nlg.mapper.StudentMapper”>
<insert id=”insertStudent”>
insert into student(s_num,s_name,s_gender,s_age)
values (#{stuNum},#{stuName},#{stuGender},#{stuA ge})
</insert>
</mapper>
(6)将映射文件添加到主配置文件(Mybatis-config.xml)
<mappers>
<mapper resource=”StudentMapper.xml”>
</mapper>
</mappers>
(7)创建单元测试类
·新建与src平级的文件夹test。
·右键接口StudentMapper.java-选择New,新建JUnit Test Case,并进行如图所示操作。
(8)编写测试代码
【Mybatis官网中能找到】
@Test
public void testInsertStudent () throws Exception {
·从 XML 中构建 SqlSessionFactory
String resource = "mybatis-config.xml";
InputStream inputStream=Resources.getResourceAsStream(resource);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream );
·从 SqlSessionFactory 中获取 SqlSession
SqlSession session =sqlSessionFactory.openSession();
·通过SqlSession 获取匹配接口的实例
StudentMapper studentMapper= session.getMapper(StudentMapper.class);
·调用实例的方法(注意是否需要手动提交事务)
session.commit();
session.close();
- Mybatis核心配置文件
·在resources目录下创建jdbc.properties文件,配置键值对如下:
mysql_driver=com.mysql.cj.jdbc.Driver
mysql_url=jdbc:mysql://localhost:3306/mybatis_demo?characterEncoding=utf-8
·在mybatis-config.xml中通过properties标签引用jdbc.properties文件;引入之后,在配置environment时可以直接使用jdbc.properties的key获取对应的value
<property name=”driver” value=”${mysql_driver}”>
<property name=”url” value=”${mysql_url}”>
·在properties中设置子元素,为username和password添加键值对
<properties resource="jdbc.properties">
<property name="mysql_username" value="root"/>
<property name="mysql_password" value="root" />
</properties>
[configuration配置顺序:properties,setting,typeAliases,typeHandlers,objectFactory,plugins,environments,environment,transactionManager,dataSource,databaseidProvider,mappers]
·利用测试用例StudentMapperTest.testInsertStudent(),插入一条数据,若成功,则改动没问题。
·Setting:这是 MyBatis 中极为重要的调整设置,它们会改变 MyBatis 的运行时行为。
·typeAliases:类型别名可为 Java 类型设置一个缩写名字。 它仅用于 XML 配置,意在降低冗余的全限定类名书写。
·typeHandlers:MyBatis 在设置预处理语句(PreparedStatement)中的参数或从结果集中取出一个值时, 都会用类型处理器将获取到的值以合适的方式转换成 Java 类型。
·plugins:通过 MyBatis 提供的强大机制,使用插件是非常简单的,只需实现 Interceptor 接口,并指定想要拦截的方法签名即可,如后期将会学习的分页插件PageHelper。
·environments:MyBatis 可以配置成适应多种环境,这种机制有助于将 SQL 映射应用于多种数据库之中, 现实情况下有多种理由需要这么做。例如,开发、测试和生产环境需要有不同的配置;或者想在具有相同 Schema 的多个生产数据库中使用相同的 SQL 映射。
[默认使用的环境 ID(比如:default="development")。]
·environments-dataSource:dataSource 元素使用标准的 JDBC 数据源接口来配置 JDBC 连接对象的资源。有三种内建的数据源类型(也就是 type="[UNPOOLED|POOLED|JNDI]")。
·mappers:加载映射文件。
- Mybatis执行流程
(1)读取 Mybatis的全局配置文件 mybatis-config.xml
(2)创建 SqlSessionFactory会话工厂
(3)创建 SqlSession会话
(4)通过SqlSession对话得到代理对象
(5)调用对象的增删改查方法
(6)提交事务
(7)关闭会话