Mybatis快速学习笔记(建议收藏)


Mybatis概念

  • MyBatis是一款优秀的持久层框架,用于简化JDBC 开发

持久层

  • 负责将数据到保存到数据库的那一层代码
  • JavaEE三层架构:表现层、业务层、持久层

框架

  • 框架就是一个半成品软件,是一套可重用的、通用的、软件基础代码模型
  • 在框架的基础之上构建软件编写更加高效、规范、通用、可扩展

JDBC缺点

在这里插入图片描述

我们接下来会用Mybatis简化JDBC

MyBatis免除了几乎所有的JDBC代码以及设置参数和获取结果集的工作
在这里插入图片描述


MyBatis 快速入门

用一个案例进行入门学习

查询user表中所有数据
在这里插入图片描述

  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','为','西安');

在这里插入图片描述

  1. 创建模块
  2. pom.xml中导入Maven坐标(新手可以去官网复制)
    mybatis依赖,mysql驱动,logback依赖

MyBatis中文网:https://mybatis.net.cn/getting-started.html

<dependency>
  <groupId>org.mybatis</groupId>
  <artifactId>mybatis</artifactId>
  <version>x.x.x</version>
</dependency>
  1. 编写MyBatis核心配置文件(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="${driver}"/>
        <property name="url" value="${url}"/>
        <property name="username" value="${username}"/>
        <property name="password" value="${password}"/>
      </dataSource>
    </environment>
  </environments>
  <mappers>
  <!--加载sql映射文件,自己改-->
    <mapper resource="加载sql映射文件,写路径"/>
  </mappers>
</configuration>
  1. 编写sql映射文件(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">
<mapper namespace="名称空间">
  <select id="id是指向sql的唯一标识,不能重复" resultType="对应的返回结果的类型,将来包装成什么类型就写什么类型">
    select * from tb_ user;
  </select>
</mapper>
  1. 编码 (MybatisDemo.java)
  • 定义pojo类 (User.java)
  • 加载核心配置文件,获取SqlSessionFactory对象
  • 获取 SqlSession对象,执行SQL语句
  • 释放资源
public static void main(String[ ] args) throws IOException {
    
    
//1.加载mybatis的核心配置文件,获取SqlsessionFactory
string resource = "mybatis-config.xml";
Inputstream inputStream = Resources.getResourceAsStream(resource);
sqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);

//2.获取SqlSession对象,用它来执行sql
sqlsession sqlSession = sqlsessionFactory.openSession(;

//3.执行sql
List<User> users = sqlSession.selectList(statement: "名称空间.id");

system.out.println(users);

//4.释放资源
sqlSession.close();


Mapper代理开发

目的:解决原生方式中的硬编码简化后期执行SQL

  1. 定义与SQL映射文件同名的Mapper接口,并且将Mapper接口和SQL映射文件放置在同一目录下
  2. 设置SQL映射文件的namespace属性为Mapper接口全限定名
  3. 在Mapper接口中定义方法,方法名就是SQL映射文件中sql语句的id,并保持参数类型和返回值类型一致
  4. 编码
    • 通过SqlSession的getMapper方法获取Mapper接口的代理对象
    • 调用对应方法完成sgl的执行

与上面的(MyBatis 快速入门)区别部分如下

定义一个接口(UserMapper.java)

public interface UserMapper {
    
    
List<User> selectAll(); //这里selectAll对应映射文件里的id
}

上面执行sql的地方改为获取UserMapper接口的代理对象(MybatisDemo.java)

//3. 获取UserMapper接口的代理对象
UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
List<User> users = userMapper.selectAll();

MyBatis核心配置文件

MyBatis 的配置文件包含了会深深影响 MyBatis 行为的设置和属性信息。

MyBatis核心配置文件的顶层结构如下:
在这里插入图片描述

简单介绍一个,其余用到时自行查看文档(https://mybatis.net.cn/configuration.html)

环境配置(environments)
MyBatis 可以配置成适应多种环境,但每个 SqlSessionFactory 实例只能选择一种环境。

<environments default="development">
  <environment id="development">
    <transactionManager type="JDBC">
      <property name="..." value="..."/>
    </transactionManager>
    <dataSource type="POOLED">
      <property name="driver" value="${driver}"/>
      <property name="url" value="${url}"/>
      <property name="username" value="${username}"/>
      <property name="password" value="${password}"/>
    </dataSource>
  </environment>
</environments>

注:

  • 默认使用的环境 ID(比如:default=“development”)。
  • 每个 environment 元素定义的环境 ID(比如:id=“development”)。
  • 事务管理器的配置(比如:type=“JDBC”)。
  • 数据源的配置(比如:type=“POOLED”)。
  • 默认环境和环境 ID 顾名思义。 环境可以随意命名,但务必保证默认的环境 ID 要匹配其中一个环境 ID。

配置文件的各种细节

Mybatis三部曲

  1. 编写接口方法:Mapper接口
  2. 编写SQL语句: SQL映射文件
  3. 执行方法,测试

如何解决字段名和属性名不一致问题

数据库表的字段名称和实体类的属性名称不一样,不能自动封装数据

解决办法:resultMap:
在映射文件中写:

<resultMap id="userResultMap" type="user">
	<result column="user_name" property="userName"/>
</resultMap>

id:唯一标识
type:映射的类型,支持别名
column:数据库表的列名
property:实体类的属性名

使用方法resultMap替换resultType属性

<select id="selectAll" resultMap="userResultMap">
select
*
from tb_user;
</select>

Mybatis如何接收来自数据库参数

参数占位符

  1. #{ }:会将其替换为?,为了防止SQL注入
  2. ${ }:拼sql。会存在SQL注入问题
  3. 使用时机:
    • 参数传递的时候:#{ }
    • 表名或者列名不固定的情况下:${ }会存在SQL注入问题

参数类型:parameterType:可以省略

  • 特殊字符处理:
    • 转义字符
    • CDATA区:<![CDATA[内容]]>

多条件查询

参数传递的三种方式:1.@Param 2.传对象 3.封装为Map集合
在这里插入图片描述

在这里插入图片描述


注解完成增删改查

使用注解开发会比配置文件开发更加方便

查询:@Select
添加:@lnsert
修改:@Update
删除:@Delete

比如查询,我们无需书写配置文件,直接使用注解

@Select("select * from tb_user where id = #{id}")
public User selectByld(int id);

注解完成简单功能
配置文件完成复杂功能

tips:

  • 使用注解来映射简单语句会使代码显得更加简洁,但对于稍微复杂一点的语句,Java注解不仅力不从心,还会让你本就复杂的SQL语句更加混乱不堪。因此,如果你需要做一些很复杂的操作,最好用XML来映射语句。
  • 选择何种方式来配置映射,以及认为是否应该要统一映射语句定义的式,完全取决于你和你的团队,永远不要拘泥于一种方式。

动态SQL


动态SQL与javase的逻辑基本相同,只是书写有所不同

后面会专门出一篇笔记讲解动态SQL

详细可以看https://mybatis.net.cn/dynamic-sql.html


猜你喜欢

转载自blog.csdn.net/weixin_48063660/article/details/127475280