MyBatis是一个ORM框架,广泛运用于Java后台开发,是SSM框架中的一个,用于建立数据库和JavaBean的映射关系,简化了JDBC的一系列操作,如数据库连接、statement的创建等等,使得后台人员只需要关注SQL语句的编写
一、MyBatis的依赖导入
1. Ideal中新建Maven工程
我这边是建了一个Maven主工程,以及Maven的Module,后续依赖导入直接放入主工程pom中,方便其他Module使用
2. Maven导入MyBatis依赖
Maven中心地址:https://mvnrepository.com/
Maven中心搜索mybatis,这边根据个人习惯,使用热度高的版本
将上面标签复制到工程pom文件中
org.mybatis
mybatis
3.5.7
3. 导入其他依赖
为了测试和方便,再分别导入junit和lombok插件,使用lombok插件记得开启注解解析器
junit
junit
4.13.1
test
org.projectlombok
lombok
1.18.12
provided
jdbc依赖导入,这边使用的MySQL数据库
mysql
mysql-connector-java
8.0.28
4. 配置MyBatis核心配置文件
在resources目录下新建sqlMapConfig.xml,约定俗成使用该文件名
内容为jdbc的配置信息:
二、 运行测试
接下来来简单的使用下,后续会对如何使用MyBatis进行详细说明
1. 数据库中准备数据
使用下面sql创建表和插入一些数据,就是oracle中默认的几张表
create table DEPT(
DEPTNO int(2) not null,
DNAME VARCHAR(14),
LOC VARCHAR(13)
);
alter table DEPT
add constraint PK_DEPT primary key (DEPTNO);
create table EMP
(
EMPNO int(4) primary key,
ENAME VARCHAR(10),
JOB VARCHAR(9),
MGR int(4),
HIREDATE DATE,
SAL double(7,2),
COMM double(7,2),
DEPTNO int(2)
);
alter table EMP
add constraint FK_DEPTNO foreign key (DEPTNO)
references DEPT (DEPTNO);
create table SALGRADE
(
GRADE int primary key,
LOSAL double(7,2),
HISAL double(7,2)
);
create table BONUS
(
ENAME VARCHAR(10),
JOB VARCHAR(9),
SAL double(7,2),
COMM double(7,2)
);
insert into DEPT (DEPTNO, DNAME, LOC)
values (10, 'ACCOUNTING', 'NEW YORK');
insert into DEPT (DEPTNO, DNAME, LOC)
values (20, 'RESEARCH', 'DALLAS');
insert into DEPT (DEPTNO, DNAME, LOC)
values (30, 'SALES', 'CHICAGO');
insert into DEPT (DEPTNO, DNAME, LOC)
values (40, 'OPERATIONS', 'BOSTON');
insert into EMP (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)
values (7369, 'SMITH', 'CLERK', 7902, '1980-12-17', 800, null, 20);
insert into EMP (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)
values (7499, 'ALLEN', 'SALESMAN', 7698, '1981-02-20', 1600, 300, 30);
insert into EMP (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)
values (7521, 'WARD', 'SALESMAN', 7698, '1981-02-22', 1250, 500, 30);
insert into EMP (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)
values (7566, 'JONES', 'MANAGER', 7839, '1981-04-02', 2975, null, 20);
insert into EMP (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)
values (7654, 'MARTIN', 'SALESMAN', 7698, '1981-09-28', 1250, 1400, 30);
insert into EMP (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)
values (7698, 'BLAKE', 'MANAGER', 7839, '1981-05-01', 2850, null, 30);
insert into EMP (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)
values (7782, 'CLARK', 'MANAGER', 7839, '1981-06-09', 2450, null, 10);
insert into EMP (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)
values (7788, 'SCOTT', 'ANALYST', 7566, '1987-04-19', 3000, null, 20);
insert into EMP (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)
values (7839, 'KING', 'PRESIDENT', null, '1981-11-17', 5000, null, 10);
insert into EMP (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)
values (7844, 'TURNER', 'SALESMAN', 7698, '1981-09-08', 1500, 0, 30);
insert into EMP (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)
values (7876, 'ADAMS', 'CLERK', 7788, '1987-05-23', 1100, null, 20);
insert into EMP (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)
values (7900, 'JAMES', 'CLERK', 7698, '1981-12-03', 950, null, 30);
insert into EMP (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)
values (7902, 'FORD', 'ANALYST', 7566, '1981-12-03', 3000, null, 20);
insert into EMP (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)
values (7934, 'MILLER', 'CLERK', 7782, '1982-01-23', 1300, null, 10);
insert into SALGRADE (GRADE, LOSAL, HISAL)
values (1, 700, 1200);
insert into SALGRADE (GRADE, LOSAL, HISAL)
values (2, 1201, 1400);
insert into SALGRADE (GRADE, LOSAL, HISAL)
values (3, 1401, 2000);
insert into SALGRADE (GRADE, LOSAL, HISAL)
values (4, 2001, 3000);
insert into SALGRADE (GRADE, LOSAL, HISAL)
values (5, 3001, 9999);
完成后如下:
2. 新建Dept类
对应数据库中的dept表
包结构:
Dept类 :
@Data
@AllArgsConstructor
@NoArgsConstructor
public class Dept implements Serializable {
/**
* 部门编号
*/
private Integer deptno;
/**
* 部门名称
*/
private String dname;
/**
* 地址
*/
private String loc;
}
3. 在resources目录下新建xml映射文件
DeptMapper.xml :
4. 在sqlMapConfig.xml中配置映射文件路径
光创建了映射文件,MyBatis并不会自动导入,得告诉它加载哪些映射文件
5. 测试代码
创建测试类:
内容如下:
public class Test1 {
private SqlSession sqlSession;
@Before
public void init() throws IOException {
SqlSessionFactoryBuilder sb = new SqlSessionFactoryBuilder();
// 将配置文件作为参数传入
sqlSession = sb.build(Resources.getResourceAsStream("sqlMapConfig.xml")).openSession();
}
@Test
public void test1(){
List result = sqlSession.selectList("findAll");
result.forEach(System.out::println);
}
}
运行结果:
可以看到我们成功得获得数据库中的数据,并且MyBatis将数据自动转换为Java中的实体类
三、日志配置
MyBatis默认支持的日志框架如下:
可以通过配置文件进行指定使用哪个日志框架,我们这边使用的log4j1日志框架
1. 导入log4j依赖
log4j
log4j
1.2.17
2. 创建log4j配置文件
在resources目录下新建log4j.properties文件,文件名必须一致
#定义全局日志级别调试阶段推荐debug
#制定使用哪种方式输出日志,这边只输出到控制台,要保存到文件,在后面加上logfile
log4j.rootLogger=debug,stdout
#输出控制台
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.err
log4j.appender.stdout.layout=org.apache.log4j.SimpleLayout
#日志保存到文件中
log4j.appender.logfile=org.apache.log4j.FileAppender
log4j.appender.logfile.File=d:/msb.log
log4j.appender.logfile.layout=org.apache.log4j.PatternLayout
log4j.appender.logfile.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %l %F %p %m%n
3. MyBatis配置指定日志框架
不指定会自动查找,所以这步可以省略,如果要配置的话settings必须在environments之上
sqlMapConfig.xml:
4. 测试运行
结果:
现在可以看到sql语句输出了
四、其他配置
1. 事务配置(了解即可)
事务我们在之前就已经配置好了,在配置文件sqlMapConfig.xml的environment标签下:
transactionManager可选项如下:
- JDBC :就是使用数据库连接自带的事务
- MANAGED :相当于不使用事务。交由容器来管理,如Spring
2.映射文件的加载方式
目前我们使用的是:
加载方式一共有4种:
- resource:资源文件路径
- url:网络路径
- class:指定类的全路径
- package:包扫描,就是不需要一个一个添加了
后续基于接口代理会用到类加载的方式
3. 实体类别名处理
在映射文件DeptMapper.xml中,目前resultType需要使用全包名:
我们可以在MyBatis配置文件sqlMapConfig.xml中,对类进行别名处理
方便复制:
这时我们可以在映射文件中使用别名代替全包名
别名处理也支持包扫描,将包下所有实体类进行别名处理,默认每个实体类的别名是首字母小写的类名
五、外部属性配置文件
我们想把数据库链接信息存储在properties文件中,然后在MyBatis配置文件中读取
1. 创建jdbc.properties
在resources中创建文件
内容如下:
jdbc_driver=com.mysql.cj.jdbc.Driver
jdbc_url=jdbc:mysql://127.0.0.1:3306/mydb?useSSL=false&useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai
jdbc_username=root
jdbc_password=root
2.配置文件中读取
好了,MyBatis的配置和初步使用就到此结束了
项目地址:
https://gitee.com/aruba/mybatis_study.git