MyBatis入门
◉MyBatis
一、MyBatis简介
1.什么是MyBatis
- MyBatis 是一款优秀的持久层框架,用于简化 JDBC 开发。
- MyBatis 本是 Apache 的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google code,并且改名为MyBatis 。2013年11月迁移到Github。
- 官网:https://mybatis.org/mybatis-3/zh/index.html
2.持久层
- 负责将数据到保存到数据库的那一层代码。
- JavaEE三层架构:表现层、业务层、持久层。
3.什么是框架
- 框架就是一个半成品软件,是一套可重用的、通用的、软件基础代码模型。
在框架的基础之上构建软件编写更加高效、规范、通用、可扩展。
二、MyBatis快速入门
1.环境准备
- 创建数据库和数据表,并添加测试数据
-- 创建mybatis数据库
CREATE DATABASE mybatis;
-- 使用mybatis数据库
USE mybatis;
– 创建用户表
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 (null, ‘zhangsan’, ‘123’, ‘男’, ‘北京’);
INSERT INTO tb_user VALUES (null, ‘李四’, ‘234’, ‘女’, ‘天津’);
INSERT INTO tb_user VALUES (null, ‘王五’, ‘11’, ‘男’, ‘西安’);
– 查询用户表
SELECT * FROM tb_user;
- 创建新的maven项目,pom.xml需要添加的依赖
org.mybatis
mybatis
3.5.5
mysql
mysql-connector-java
5.1.46
junit
junit
4.13
test
org.slf4j
slf4j-api
1.7.20
ch.qos.logback
logback-classic
1.2.3
ch.qos.logback
logback-core
1.2.3
- 将资料中的logback.xml复制到main下的resources下
- 在resources下编写 mybatis-config.xml 核心配置文件
<?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://127.0.0.1/mybatis?useSSL=false"/>
<property name="username" value="root"/>
<property name="password" value="1234"/>
</dataSource>
</environment>
</environments>
<mappers>
<!--加载映射配置文件-->
<mapper resource="UserMapper.xml"/>
</mappers>
</configuration>
- 在resources下编写 UserMapper.xml 映射配置文件
<?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">
<!--
namespace:名称空间
配合要执行的sql语句标签中的id使用
-->
<mapper namespace="test">
<select id="selectAll" resultType="com.itheima.pojo.User">
SELECT * FROM tb_user
</select>
</mapper>
- 编写 User 实体类
/
用户实体类
/
public class User {
private Integer id;
private String username;
private String password;
private Character gender;
private String addr;
public User() {
}
public User(Integer id, String username, String password, Character gender, String addr) {
this.id = id;
this.username = username;
this.password = password;
this.gender = gender;
this.addr = addr;
}
public Integer getId() {
return id;
}
public void setId(Integer 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;
}
public Character getGender() {
return gender;
}
public void setGender(Character gender) {
this.gender = gender;
}
public String getAddr() {
return addr;
}
public void setAddr(String addr) {
this.addr = addr;
}
@Override
public String toString() {
return “User{“ +
“id=” + id +
“, username=’” + username + ‘'‘ +
“, password=’” + password + ‘'‘ +
“, gender=” + gender +
“, addr=’” + addr + ‘'‘ +
‘}’;
}
}
2.代码实现
- 测试类
public class MyBatisDemo01 {
public static void main(String[] args) throws Exception {
//1.加载核心配置文件,获取SqlSessionFactory工厂对象
InputStream is = Resources.getResourceAsStream("mybatis-config.xml");
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(is);
//2.获取SqlSession对象
SqlSession sqlSession = sqlSessionFactory.openSession();
//3.执行sql语句,并接收返回结果
List<User> list = sqlSession.selectList("test.selectAll");//名称空间.id属性值
//4.释放资源
sqlSession.close();
//5.遍历集合,处理结果
for (User user : list) {
System.out.println(user);
}
}
}
三、解决SQL语句警告
- 如果在 UserMapper.xml 映射配置文件中,sql语句报红色,则按照以下配置
在Idea中配置MySQL数据库连接
四、Mapper代理开发
1.使用Mapper代理开发的步骤
定义与SQL映射文件同名的Mapper接口,并且将Mapper接口和SQL映射文件放置在同一目录下
设置SQL映射文件的namespace属性为Mapper接口全限定名:
namespace="com.itheima.mapper.UserMapper"
- 细节:如果Mapper接口名称和SQL映射文件名称相同,并在同一目录下,则可以使用包扫描的方式简化SQL映射文件的加载。在核心配置文件中修改
<mappers>
<!-- <mapper resource="com/itheima/mapper/UserMapper.xml"/>-->
<!– 包扫描方式 扫描路径下的所有映射配置文件–>
<package name=“com.itheima.mapper”/>
</mappers>
- 编码
- 通过 SqlSession 的 getMapper() 方法获取 Mapper 接口的代理实现类对象
- 调用实现类对象对应方法完成sql的执行
/*
代理开发
*/
public class MybatisTest2 {
public static void main(String[] args) throws Exception{
InputStream is = Resources.getResourceAsStream("mybatis-config.xml");
SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(is);
SqlSession sqlSession = factory.openSession();
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
//插入 必须commit
mapper.insertUser(null,"gabrielle","1234","男","和平北路");
sqlSession.commit();
//查找
List<User> users = mapper.selectAll();
for (User user : users) {
System.out.println(user);
}
}
}
五、MyBatis核心配置文件
1.核心配置文件组成部分
注意:书写顺序严格限制
2.数据类型别名typeAliases
可以给不同的数据类型起别名
核心配置文件中加入别名的标签
<!-- 起别名--> <!-- 给某个包下所有的类起别名 别名就是类首字母小写 --> <!-- 映射配置文件中 resultType="" 不用写全类名了--> <typeAliases> <package name="com.itheima.pojo"/> </typeAliases>
映射配置文件中,需要用到某个类的,使用别名即可
<mapper namespace="com.itheima.mapper.UserMapper"> <!--<select id="selectAll" resultType="com.itheima.pojo.User">--> <select id="selectAll" resultType="user"> SELECT * FROM tb_user </select> </mapper>
Java提供好的类型,已经默认有别名了