一、Mybatis概念
MyBatis 是一款优秀的持久层框架,用于简化JDBC开发,解决了原生JDBC硬编码和手动封装结果集的问题。
JavaEE的三层架构分为Controller(表现层)、Service(业务层)、Mapper(持久层)。
持久层负责将数据保存到数据库的那一层代码。使用了Mybatis框架我们会将操作数据库的Java代码作为持久层。
二、Mybatis快速入门
2.1、搭建环境
2.1.1、创建user表,添加数据
create database mybatis;
use mybatis;
drop table if exists tb_user;
create table tb_user(
id int primary key auto_increment,
username varchar(20),
password varchar(20),
gender char(1),
addr varchar(30)
);
INSERT INTO tb_user VALUES (1, 'zhangsan', '123', '男', '北京');
INSERT INTO tb_user VALUES (2, '李四', '234', '女', '天津');
INSERT INTO tb_user VALUES (3, '王五', '11', '男', '西安');
2.1.2、创建模块
创建day04-mybatis模块,在创建好的模块中的 pom.xml 配置文件中添加依赖的坐标
<dependencies>
<!--mybatis 依赖-->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.6</version>
</dependency>
<!--mysql 驱动-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.46</version>
</dependency>
<!--junit 单元测试-->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.13</version>
<scope>test</scope>
</dependency>
</dependencies>
2.1.3、 创建包结构
在 com.practice.pojo
包下创建和表对应的 User类
public class User {
private Integer id;
private String username;
private String password;
private String gender;
private String addr;
//省略了 setter 和 getter
}
2.1.4、编写核心配置文件
在resources中编写mybatis-config.xml配置文件,配置数据库的连接信息,在mybatis官网复制即可。
<?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"/>
<!--配置连接数据库的连接参数-->
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/mybatis"/>
<property name="username" value="root"/>
<property name="password" value="root"/>
</dataSource>
</environment>
</environments>
<!--2 加载Mapper接口和SQL语句,将给的例子注释掉。后面第三大步中配置-->
<!--<mappers>
<mapper resource="org/mybatis/example/BlogMapper.xml"/>
</mappers>-->
</configuration>
2.1.5、编写mapper接口和SQL语句
1、在mapper包中编写UserMapper接口,在接口中编写查询所有的方法,并配置SQL语句
public interface UserMapper {
/**
* 查询所有用户信息
* @Select:定义查询语句的注解,参数为SQL语句
*/
@Select("select * from tb_user")
List<User> selectAll();
}
2、在mybatis-config.xml核心配置文件中加载映射配置文件
<!--加载映射配置文件-->
<mappers>
<!--通过扫包加载该包下和所有mapper接口和接口中的SQL语句-->
<package name="com.itheima.mapper"/>
</mappers>
核心配置文件中的内容,在使用spring框架后可以全部写到spring中的配置文件
2.1.6、单元测试使用mybatis执行查询
public class MybatisTest {
@Test
public void testSelectAll() throws IOException {
//1 加载核心配置文件,获取 SqlSessionFactory对象,mybatis官网复制即可
String resource = "mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
//2 获取 SqlSession 对象
SqlSession sqlSession = sqlSessionFactory.openSession();
//3 获取Mapper接口代理对象。
UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
//4 执行方法,获取结果
List<User> list = userMapper.selectAll();
//5 处理结果,释放资源
list.forEach(user -> System.out.println(user));
sqlSession.close();
}
}
2.1.7、快速入门总结
步骤:
环境搭建--->核心配置文件--->Mapper接口和SQL--->单元测试方法
核心配置文件作用:
1、配置连接数据库环境信息。
2、通过扫包加载和mapper接口和SQL
三、核心配置文件细节
3.1、核心配置文件标签顺序
3.1.2、environments环境配置介绍
<!--environments:用于配置多种开发环境
default="development" :表示使用下面id="development"的环境配置 -->
<environments default="development">
<!--environment id="development" :定义连接数据库的环境,id表示该配置的唯一标识。这个标签可以出现多次-->
<environment id="development">
<!--事务管理器,取值如下:
JDBC :开启事务管理,推荐使用
MANAGED :不使用事务管理 -->
<transactionManager type="JDBC"/>
<!--内置的连接池:取值如下
POOLED:使用连接池。UNPOOLED:不使用连接池 -->
<dataSource type="POOLED">
<!--连接参数-->
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/mybatis"/>
<property name="username" value="root"/>
<property name="password" value="root"/>
</dataSource>
</environment>
<!--第二个environment表示连接第二个数据库的环境-->
<!--
<environment id="test">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql:///mybatis?useSSL=false"/>
<property name="username" value="root"/>
<property name="password" value="1234"/>
</dataSource>
</environment>
-->
</environments>
3.1.3、mappers映射器配置
<!--加载映Mapper接口和SQL语句-->
<mappers>
<!--加载一个,有多少个mapper接口就需要些多少个【不推荐】-->
<!--<mapper class="com.itheima.mapper.UserMapper"/>-->
<!--加载该包下所有Mapper接口中的SQL语句并存储,后期调用Mapper中方法时会执行对应SQL【推荐】-->
<package name="com.itheima.mapper"/>
</mappers>
- 单元测试使用mybatis执行查询
里面的代码在使用spring框架后,也可以大部分简化。
- 核心配置文件
1、核心配置文件顺序图片
2、md文档中对应的解释
四、添加用户信息
4.1、在UserMapper接口中定义方法和配置SQL语句
/**
* 添加用户信息
* @param user
*/
@Insert("insert into tb_user values(null,#{username},#{password},#{gender},#{addr})")
void add(User user);
4.2、 单元测试类
@Test
public void testAdd() throws IOException {
//1 加载核心配置文件,获取 SqlSessionFactory对象
String resource = "mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
//2 获取 SqlSession 对象
SqlSession sqlSession = sqlSessionFactory.openSession();
//3 获取Mapper接口代理对象,
UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
//4 调用方法,得到结果
User user=new User();
user.setUsername("张益达");
user.setPassword("123");
user.setAddr("湖北武汉");
user.setGender("男");
userMapper.add(user);
//5 处理结果,释放资源
sqlSession.commit(); //提交事务*****
sqlSession.close();
}
4.3、新增总结
1、对于新增我们需要进行事务管理,怎么做?
openSession():默认开启事务,进行增删改操作后需要使用 sqlSession.commit(); 手动提交事务
openSession(true):可以设置为自动提交事务(关闭事务)
2、修改和删除也要进行事务管理。
五、注意事项
5.1、参数占位符:#{}:执行SQL时,会将#{}占位符替换为?,将来自动设置参数值
5.2、增删改需要提交事务,可以设置自动提交事务。