*编写顺序:properties->mybatis-config.xml,mapper接口->对应的xml,mybatis-config.xml引入对应mapper映射的映射包文件*
简介
历史
- Apache 的 开源项目 ibatis → 后成为 MyBatis。
特性
- 定制化SQL:即可以自己手写SQL语句。
- 支持存储过程
- 支持高级映射:即POJO和数据库字段的映射方式可以自定义哦。
- 封装了JDBC代码,和结果集的处理过程 → 不用手写JDBC代码和结果集处理的过程啦。
官方下载&文档
https://github.com/mybatis/mybatis-3
VS其他持久层框架
快速开始(简单介绍各个部分)
开发环境
- IDE:IDEA: 2022.2
- 构建工具:maven 3.8.6
- MySQL版本:MySQL8
- MyBatis 版本:MyBatis 3.5.11
Maven
根据你自己项目的类型创建具体Maven项目即可
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.5.11</version> </dependency>
<dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.13.2</version> <scope>test</scope> </dependency>
<dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>8.0.30</version> </dependency>
|
核心配置文件(最少配置)
习惯上命名:mybatis-config.xml,非强制。将来整合Spring的时候可以省略。 这里目的为了能运行即可,详细配置内容看后续。
作用
:1. 配置链接数据库的环境 2. 配置MyBatis
放置位置
:src/main/resources
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
| <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<environments default="development"> <environment id="development">
<transactionManager type="JDBC"></transactionManager>
<dataSource type="POOLED"> <property name="driver" value="com.mysql.cj.jdbc.Driver"/> <property name="url" value="jdbc:mysql://192.168.23.128:3307/ssm?useSSL=false&serverTimezone=Asia/Shanghai&characterEncoding=utf-8amp;autoReconnect=true"/> <property name="username" value="root"/> <property name="password" value="123456"/> </dataSource> </environment> </environments>
<mappers> <mapper resource="mappers/UserMapper.xml"></mapper> </mappers> </configuration>
|
Mapper 接口
相当于DAO,但是不用创建实现类,MyBatis会创建代理类,并执行映射文件当中的SQL。
起名规则
:POJO的名字 + Mapper
1 2 3 4 5
| package com.atguigu.mybatis.mapper;
public interface UserMapper { int insertUser(); }
|
映射文件
Mapper 接口当中的一个抽象方法 对应 映射文件当中的一个SQL语句。
起名规则
:POJO名字 + Mapper.xml
放置位置
:src/main/resources/UserMapper.xml
这里我们写一条固定的插入SQL,参数如何传递请请看后方比较详细的笔记。
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.atguigu.mybatis.mapper.UserMapper">
<select id="insertUser"> INSERT INTO t_user VALUES (NULL, 'admin', '123456', 23, '男', '12345@qq.com'); </select> </mapper>
|
测试功能
下方代码:从开始到创建 SqlSessionFactory 只用创建一次即可,因此可以单独封装即可。 openSession()
获得 SqlSession
默认是不自动提交事务,因此需要自己手动提交。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41
| package com.atguigu.mybatis.test;
import org.apache.ibatis.io.Resources; import org.apache.ibatis.session.SqlSession; import org.apache.ibatis.session.SqlSessionFactory; import org.apache.ibatis.session.SqlSessionFactoryBuilder; import org.junit.Test; import com.atguigu.mybatis.mapper.UserMapper;
import java.io.IOException; import java.io.InputStream;
public class MyBatisTest { @Test public void testInsert() throws IOException { InputStream resourceAsStream = Resources.getResourceAsStream("mybatis-config.xml");
SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();
SqlSessionFactory sqlSessionFactory = sqlSessionFactoryBuilder.build(resourceAsStream);
SqlSession sqlSession = sqlSessionFactory.openSession();
UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
Integer rows = userMapper.insertUser(); System.out.println("rows = " + rows);
sqlSession.commit();
sqlSession.close(); } }
|
log4j
日志级别:FATAL(致命)> ERROR(错误)>WARN(警告)INFO(信息)> DEBUG(调试) 从左到右打印的内容越来越详细.
1 2 3 4 5 6
| <dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> <version>1.2.17</version> </dependency>
|
resources/log4j.xml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
| <?xml version="1.0" encoding="UTF-8"?> <!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="%-5d %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>
|
核心配置文件详解
environments
可以配置多个环境,比如测试环境和开发环境 ; 使用id区分,不能重复。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
| <environments default="development"> <environment id="development">
<transactionManager type="JDBC"></transactionManager>
<dataSource type="POOLED"> <property name="driver" value="com.mysql.cj.jdbc.Driver"/> <property name="url" value="jdbc:mysql://192.168.23.128:3306/ssm?useSSL=false&serverTimezone=Asia/Shanghai&characterEncoding=utf-8amp;autoReconnect=true"/> <property name="username" value="root"/> <property name="password" value="123456"/> </dataSource> </environment> <environment id="test">
<transactionManager type="JDBC"></transactionManager>
<dataSource type="POOLED"> <property name="driver" value="com.mysql.cj.jdbc.Driver"/> <property name="url" value="jdbc:mysql://192.168.23.128:3306/ssm?useSSL=false&serverTimezone=Asia/Shanghai&characterEncoding=utf-8amp;autoReconnect=true"/> <property name="username" value="root"/> <property name="password" value="123456"/> </dataSource> </environment> </environments>
|
transactionManager
事务管理器,使用type来设置事务管理方式。
DataSource
设置数据源,使用type 设置数据源的类型。
引入jdbc.properties
resources 下创建 jdbc.properties 文件
1 2 3 4
| jdbc.url=jdbc:mysql://192.168.23.128:3306/ssm?useSSL=false&serverTimezone=Asia/Shanghai&characterEncoding=utf-8&autoReconnect=true jdbc.driver=com.mysql.cj.jdbc.Driver jdbc.user=root jdbc.password=123456
|
核心配置文件当中引入
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
| <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<properties resource="jdbc.properties"></properties>
<environments default="development"> <environment id="development"> <transactionManager type="JDBC"></transactionManager> <dataSource type="POOLED"> <property name="driver" value="${jdbc.driver}"/> <property name="url" value="${jdbc.url}"/> <property name="username" value="${jdbc.user}"/> <property name="password" value="${jdbc.password}"/> </dataSource> </environment> </environments>
<mappers> <mapper resource="mappers/UserMapper.xml"></mapper> </mappers> </configuration>
|
typeAliases
类型别名,在 Mapper 的 resultType 属性中可以使用简单类型别名
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<properties resource="jdbc.properties"></properties>
<typeAliases> <typeAlias type="com.atguigu.mybatis.pojo.User" alias="user"></typeAlias> <package name="com.atguigu.mybatis.pojo"></package> </typeAliases> </configuration>
|
在 Mapper.xml 文件中使用
1 2 3
| <select id="getAllUser" resultType="user"> SELECT * FROM t_user; </select>
|