目录
1、基础回顾
2、例子引入
3、映射文件
4、增删改查
4.1、add
4.2、delete
4.3、update
4.4、check
5、核心配置文件
5.1、properties
5.2、typeAliases
5.2.1、自定义
5.2.2、⭐MyBatis自带
5.3、environments
5.3.1、environment
5.3.2、transactionManager
5.3.3、dataSource
5.4、 mapper
6、API
6.1、SqlSessionFactoryBuilder
6.2、SqlSessionFactory
6.3、SqlSession
MyBatis基础:Java Web - MyBatis
下面用几张图片简单回顾:
原始的JDBC查询操作:
原始的JDBC插入操作:
对于MyBatis的具体操作,这里以一个小的例子进行快速上手操作:
下面准备环境:
①创建Maven Model,在pom.xml引入坐标
pom.xml:
最重要的便是mybatis和mysql坐标:
总的pom文件如下:
4.0.0
org.example
mybatis
1.0-SNAPSHOT
war
11
11
org.apache.tomcat.maven
tomcat7-maven-plugin
2.2
8080
UTF-8
org.mybatis
mybatis
3.5.5
mysql
mysql-connector-java
5.1.32
runtime
junit
junit
4.12
test
log4j
log4j
1.2.12
②初始化数据库
SQL语句:
CREATE DATABASE mybatis;
USE mybatis;
CREATE TABLE user(
id INT(11) NOT NULL AUTO_INCREMENT,
username VARCHAR(50),
password VARCHAR(50),
PRIMARY KEY(id)
);
DESCRIBE user;
③编写User实体类
package com.xzl.domain;
/**
* @author 逐梦苍穹
* @date 2023/8/23 17:44
*/
public class User {
private int id;
private String username;
private String password;
@Override
public String toString() {
return "User{" +
"id=" + id +
", username='" + username + '\'' +
", password='" + password + '\'' +
'}';
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}
④编写核心配置文件mybatis-config.xml
⑤编写SQL映射文件UserMapper.xml(后面这部分代码还会有变动,这里先保持不变)
⑥测试
这里为了方便测试,还需要一个log4j日志框架(也可以使用Logback):
log4j.properties:
### direct log messages to stdout ###
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n
### direct messages to file mylog.log ###
log4j.appender.file=org.apache.log4j.FileAppender
log4j.appender.file.File=c:/mylog.log
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n
### set log levels - for more verbose logging change 'info' to 'debug' ###
log4j.rootLogger=debug, stdout
MyBatisTest:
/**
* @author 逐梦苍穹
* @date 2023/8/23 23:21
*/
public class MyBatisTest {
@Test
public void findAll_test1() throws IOException {
//加载核心配置文件
InputStream resourceAsStream = Resources.getResourceAsStream("mybatis-config.xml");
//获得sqlSession工厂对象
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(resourceAsStream);
//获得sqlSession对象
SqlSession sqlSession = sqlSessionFactory.openSession();
//执行sql语句
List userList = sqlSession.selectList("userMapper.findAll");
//打印结果
System.out.println(userList);
//释放资源
sqlSession.close();
}
}
测试结果:
涉及修改数据库内容的操作一定要手动提交事务!!mybatis默认不提交事务
基本流程:
加载核心配置文件
获得sqlSession工厂对象
获得sqlSession对象
执行sql语句
(提交事务)
释放资源
对前三步进行抽取:
Java代码:
映射文件:
这里涉及到一个主键自增的问题,没有办法封装对象,则采用先执行再封装的方式,例子如下:
注意事项:
Java代码:
映射文件:
注意事项:
Java代码:
映射文件:
注意事项:
配置项 |
描述 |
configuration |
根元素,包含整个配置的主要部分 |
properties |
定义属性值,然后在配置中引用 |
settings |
配置 MyBatis 的全局设置 |
typeAliases |
定义 Java 类型的别名 |
typeHandlers |
配置自定义的类型处理器 |
objectFactory |
指定对象工厂的类名 |
plugins |
配置自定义的插件 |
environments |
配置不同的数据库环境 |
environment |
在 environments内部,定义具体的数据库环境 |
transactionManager |
指定事务管理器的类型 |
dataSource |
配置数据库连接的数据源 |
databaseIdProvider |
配置不同数据库的 SQL 语句和语法 |
mappers |
指定映射器(Mapper)的位置 |
实际开发中,习惯将数据源的配置信息单独抽取成一个properties文件,该标签可以加载额外配置的properties文件
类型别名是为Java 类型设置一个名字,用于简化代码量。
原来:
在mybatis-config.xml设置别名:
设置别名后:
上面是自定义的别名,mybatis框架已经为设置好一些常用的类型的别名:
别名 |
对应的Java类型 |
string |
java.lang.String |
byte |
java.lang.Byte |
long |
java.lang.Long |
short |
java.lang.Short |
int |
java.lang.Integer |
integer |
java.lang.Integer |
double |
java.lang.Double |
float |
java.lang.Float |
boolean |
java.lang.Boolean |
char |
java.lang.Character |
character |
java.lang.Character |
date |
java.util.Date |
decimal |
java.math.BigDecimal |
bigdecimal |
java.math.BigDecimal |
biginteger |
java.math.BigInteger |
object |
java.lang.Object |
list |
java.util.List |
arraylist |
java.util.ArrayList |
map |
java.util.Map |
hashmap |
java.util.HashMap |
配置不同的数据库环境(如开发、测试、生产)
支持多环境配置:
事务管理器(transactionManager)类型有两种:
①JDBC:这个配置就是直接使用了JDBC 的提交和回滚设置,它依赖于从数据源得到的连接来管理事务作用域。
②MANAGED:这个配置几乎没做什么。它从来不提交或回滚一个连接,而是让容器来管理事务的整个生命周期(比如JEE应用服务器的上下文)。默认情况下它会关闭连接,然而一些容器并不希望这样,因此需要将 closeConnection 属性设置为false 来阻止它默认的关闭行为。
数据源(dataSource)类型有三种:
①UNPOOLED:这个数据源的实现只是每次被请求时打开和关闭连接。
②POOLED:这种数据源的实现利用“池”的概念将 JDBC 连接对象组织起来。
③JNDI:这个数据源的实现是为了能在如 EJB 或应用服务器这类容器中使用,容器可以集中或在外部配置数据源,然后放置一个 JNDI 上下文的引用。
该标签的作用是加载映射的,加载方式有如下几种:
①使用相对于类路径的资源引用,例如:
②使用完全限定资源定位符(URL),例如:
③使用映射器接口实现类的完全限定类名,例如:
④将包内的映射器接口实现全部注册为映射器,例如:
SqlSessionFactory build(InputStream inputStream) 通过加载mybatis的核心文件的输入流的形式构建一个SqlSessionFactory对象
其中, Resources 工具类,这个类在 org.apache.ibatis.io 包中。
Resources 类帮助开发者从类路径下、文件系统或 一个 web URL 中加载资源文件。
SqlSessionFactory 有多个个方法创建 SqlSession 实例。常用的有如下两个:
方法 |
解释 |
openSession() |
会默认开启一个事务,但事务不会自动提交, 也就意味着需要手动提交该事务,更新操作数据才会持久化到数据库中 |
openSession(boolean autoCommit) |
参数为是否自动提交,如果设置为true, 那么不需要手动提交事务 |
SqlSession 实例在 MyBatis 中是非常强大的一个类。
在这里你会看到所有执行语句、提交或回滚事务和获取映射器实例的方法。
执行语句的方法主要有:
操作事务的方法主要有: