基于Java的持久层框架
Mybatis原来叫iBatis
DAO Data Access Object 数据持久层对象
transactionManager 事务管理
xml中&需要转义,写成&
SQL映射规范的名称:XxxMapper.xml,Xxx表示要操作的表名,如UserMapper.xml、OrderMapper.xml
接口都放在一个包里
maven项目里java代码和配置文件resource要分开,便于管理
红色头绳的鸟代表SQL的映射文件
蓝色头绳的鸟代表Mapper的接口
遇到的问题:
MybatisX插件安装好后,别名爆红
解决方法:在包扫描别名过后对实体类进行别名注解。
遇到的问题:xml文件中SQL代码没有自动补全
解决办法:鼠标晃一晃会出现小灯泡,点击小灯泡,选择Inject language or reference,SQL语句出现浅绿色背景就能自动补全了
快捷键添加行注释Ctrl+/、块注释Ctrl+Shift+/
在配置文件中完成增删改查:
BrandMapper.xml:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"https://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!--
namespace:名称空间
-->
<mapper namespace="com.itheima.mapper.BrandMapper">
<!--
数据库表的字段名称和实体类的属性名称不一样,则不能自动封装数据
*起别名:对不一样的列名起别名,让别名和实体类的属性名一样
*缺点:每次查询都要定义一次别名
*sql片段
*缺点:不灵活
*rsultMap:
1. 定义<resultMap>标签
2. 在<selsect>标签中,使用resultMap属性替换resultType属性
-->
<!--
id:唯一标识
type:映射的类型,支持别名
-->
<resultMap id="brandResultMap" type="brand">
<!--
id:完成主键字段的映射
column:表的列名
property:实体类的属性名
result:完成一般字段的映射
column:表的列名
property:实体类的属性名
-->
<result column="brand_name" property="brandName"/>
<result column="company_name" property="companyName"/>
</resultMap>
<select id="selectAll" resultMap="brandResultMap">
select *
from tb_brand;
</select>
<!--
sql片段
-->
<!--<sql id="brand_column">
id, brand_name as brandName, company_name as companyName, ordered , description, status
</sql>
<select id="selectAll" resultType="brand">
select
<include refid="brand_column"/>
from tb_brand;
</select>-->
<!--<select id="selectAll" resultType="brand">
select *
from tb_brand;
</select>-->
</mapper>
MybatisText.java:
package com.itheima;
import com.itheima.mapper.BrandMapper;
import com.itheima.pojo.Brand;
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 java.io.IOException;
import java.io.InputStream;
import java.util.List;
public class MyBatisTest {
@Test
public void testselectAll() 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接口的代理对象
BrandMapper brandMapper = sqlSession.getMapper(BrandMapper.class);
//4. 执行方法
List<Brand> brands = brandMapper.selectAll();
System.out.println(brands);
//5. 释放资源
sqlSession.close();
}
}
接口里默认方法都是public
模糊查询like
遇到的问题:
idea mybatis xml 提示 <statement> or DELIMITER expected
解决办法:
language injection setting -->GenericSQL
%代表零个或多个字符
遇到的问题:
写sql语句的时候要么表不提示,要么表中的字段不提示
解决办法:
自动提交事务(autoCommit:true),就是没有开事务
关闭自动提交事务(autoCommit:false),就是手动提交,要写sqlSession.commit();
为什么用@Param而不用arg和param:
@Param注解增加了可读性
学习视频:黑马mybatis教程全套视频教程,2天Mybatis框架从入门到精通