Mybatis详细学习笔记

本文详细介绍了MyBatis持久层框架的使用,包括其起源、功能、为什么需要MyBatis,以及如何搭建环境、创建第一个Mybatis程序。内容涵盖数据库操作、配置文件解析、日志实现、分页处理、注解开发、动态SQL、缓存机制等方面,旨在帮助开发者快速掌握MyBatis的核心功能和实践技巧。
摘要由CSDN通过智能技术生成

-------------------------------MyBatis-------------------------------
教程git仓库源码:git@gitee.com:can8888/Mybatis-study.git
1.简介:
1.1什么是Mybatis?
·Mybatis是一款优秀的持久层框架

·它支持定制化SQL、存储过程以及高级映射。

·Mybatis避免了几乎所有的JDBC代码和手动设置参数以及获得结果集。

·MyBatis可以使用简单的XML或注解来配置和映射原生类型、接口和Java的POJO(Plain Old Java Objects,普通老式Java对象) 为数据库中的记录

·apache的一个开源项目IBatis,2010年这个项目由apache software foundation

迁移到了google code,并且改为MyBatis。
·2013年11月迁移到github

如何获得Mybatis?
·maven仓库
·github仓库

1.2、持久化
数据持久化
·持久化就是将程序的数据在持久状态(放到数据库里面,只要不删除一直都在)和瞬时状态转化的过程
·内存:断电即失
·数据库(JDBC),io文件持久化。
·生活:冷藏。罐头

为什么需要持久化?
·有一些对象,不能让它丢掉。
·内存太贵了。

1.3、持久层
Dao层、Service层、Controller层…
·完成持久化工作的代码块
·层界限十分明显。

1.4为什么需要Mybatis?
·帮助程序员将数据存入到数据中。
·方便
·传统的JDBC代码太复杂。简化。框架。自动化。
·不用Mybatis也可以。不过学了更容易上手
·优点:
·简单易学
·灵活
·sql和代码的分离,提高了可维护性
·提供映射标签,支持对象与数据库的orm字段关系映射
·提供对象关系映射标签,支持对象关系组建维护
·提供了xml标签,支持编写动态sql。

最重要的一点:使用的人多!

2、第一个Mybatis程序
思路:搭建环境–>导入Mybatis–>编写代码–>测试!

2.1、搭建环境
搭建数据库

create database mybatis_can; //创建数据库

use ‘mybatis_can’; //使用数据库

create table user(
id int(10) not null primary key,
name varchar(30) default null,
‘pwd’ varchar(30) default null
)engine=INNODB default charset=utf8; //创建表

insert into user (id,name,pwd)
values
(1,‘CAN’,‘123456’),
(2,‘张三’,‘123456’),
(3,‘李四’,‘123456’); //插入数据

新建项目
1.新建一个普通的maven项目
2.删除src
3.导入maven依赖

<dependencies>
    <!--mysql驱动-->
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>5.1.47</version>
    </dependency>
    <!--mybatis-->
    <dependency>
        <groupId>org.mybatis</groupId>
        <artifactId>mybatis</artifactId>
        <version>3.5.2</version>
    </dependency>
    <!--Junit-->
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.12</version>
    </dependency>
</dependencies>

2.2、创建一个模块
1.编写mybatis的核心配置文件
<?xml version="1.0" encoding="UTF-8" ?>

    <!--test环境-->
    <environment id="test">
        <transactionManager type="JDBC"></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>

2.3、编写代码
1.实体类
```
package com.can.pojo;

//实体类
public class User {

private int id;
private String name;
private String pwd;

public User() {
}

public User(int id, String name, String pwd) {
    this.id = id;
    this.name = name;
    this.pwd = pwd;
}

public int getId() {
    return id;
}

public void setId(int id) {
    this.id = id;
}

public String getName() {
    return name;
}

public void setName(String name) {
    this.name = name;
}

public String getPwd() {
    return pwd;
}

public void setPwd(String pwd) {
    this.pwd = pwd;
}

@Override
public String toString() {
    return "User{" +
            "id=" + id +
            ", name='" + name + '\'' +
            ", pwd='" + pwd + '\'' +
            '}';
}

}

```

2.Dao接口

```
package com.can.dao;

import com.can.pojo.User;

import java.util.List;

public interface UserDao {

List<User> getUserList();

}

```
3.接口实现类由原来的JDBC方式UserDaoImpl实现类转为Mapper配置文件

```
<?xml version="1.0" encoding="UTF-8" ?>
select id,name,pwd from mybatis_can.user;
```

2.4、测试junit
注意点:
org.apache.ibatis.binding.BindingException: Type interface
com.can.dao.UserDao is not known to the MapperRegistry.
这个错误
类型接口,dao是未知的在mapper注册里

MapperRegistry是什么?
核心配置文件中注册mappers

<mappers>
    <mapper resource="com/can/dao/UserMapper.xml"></mapper>
</mappers>

可能遇到的问题:
1.配置文件没有注册
2.绑定接口错误。
3.方法名不对。
4.返回类型不对。
5.maven导出资源问题

3.CRUD
1、namespace
namespace中的包名要和Dao/mapper接口的包名一致!
2、select
选择,查询语句
·id:就是对应的namespace中的方法名;
·resultType: Sql语句执行的返回值!
·parameterType:参数类型!
3、insert
4、update
5、Delete

注意点增删改需要提交事务!
sqlSession.commit();

7.万能的Map
Map传递参数,直接在SQL中取出key即可! 【parameterType=“map”】
对象传递参数,直接在sql中取对象的属性即可! 【parameterType=“Object”】
只有一个基本类型参数的情况下,可以直接在sql中取到 【可以不写】

多个参数用Map!,或者注解

8、模糊查询怎么写?
1.Java代码执行的时候,传递通配符 %%
List userlist = userDao.getUserLike("%李%");
2.在sql拼接中使用通配符!
select * from mybatis_can.user where name like “%”#{value}"%"

4.配置解析!

1、核心配置文件
·mybatis-config.xml
·MyBatis的配置文件包含了会深深影响Mybatis行为的设置和属性信息。

configuration(配置)
properties(属性)
settings(设置)
typeAliases(类型别名)
typeHandlers(类型处理器)
objectFactory(对象工厂)
plugins(插件)
environments(环境配置)
environment(环境变量)
transactionManager(事务管理器)
dataSource(数据源)
databaseIdProvider(数据库厂商标识)
mappers(映射器)

2、环境变量(environments)
Mybatis可以配置成适应多种环境
不过要记住:尽管可以配置多个环境,但每个SqlSessionFactory实例只能选择一种环境

transactionManager事务管理器 (JDBC|MANAGED(MAN基闷的))
如果是spring+Mybatis就完全没必要配置这个

UNPOOLED|POOLED UNPOOLED(昂噗) 没有池子| POOLED 有池子 池子:数据库连接池 一个连完后不要关闭 等另外一个来连

学会使用配置多套运行环境!
Mybatis默认的事务管理器就是JDBC!,连接池:POOLED

3、属性(properties)
我们可以通过properties属性来实现引用配置文件
这些属性都是可外部配置且可动态替换的,既可以在典型的Java属性文件中配置,亦可通过properties元
素的子元素来传递。【db.properties】
编写一个配置文件 db.properties
driver=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/mybatis_can?useSSL=true&;useUnicode=true&characterEncoding=UTF-8
username=root
password=root

在核心配置文件中映入

<properties resource="db.properties">
    <!-- 优先使用外部文件(db.properties )-->
    <property name="username" value="root"/>
    <property name="password" value="root"/>
</properties>

·可以直接引入外部文件
·可以在其中添加一些属性配置
·如果两个文件有同一个字段,优先使用外部配置文件的!

4、typeAliases(类型别名)
类型别名是为Java类型设置一个短的名字。
它只和XML配置有关,存在的意义仅在于用来减少类完全限定名的冗余。

<typeAliases>
    <typeAlias type="com.can.pojo.User" alias="User"/>
</typeAliases>
也可以指定一个包名,Mybatis会在包名下面搜索需要JavaBean,比如:
	扫描实体类的包,它的默认的别名就为这个类的类名首字母小写(大写也可以 建议用小写)

在实体类比较少的时候,使用第一种方式。
如果实体类十分多,建议使用第二种。
第一种可以DIY别名,第二种则不行,如果非要改,需要在实体类上增加注解 @Alias("_user")

5、设置(settings)
这是MyBatis中极为重要的调整设置,它们会改变Mybatis的运行时行为。
·cacheEnabled:全局地开启或关闭配置文件中的所有映射器已经配置的任何缓存。true|false Default:true。

·lazyLoadingEnabled:延迟加载的全局开关。当开启时,所有关联对象都会延迟加载。特定关联关系中
可通过fetchType属性来覆盖该项的开关状态 true|false Default:false。

·logImpl 指定Mybatis所用日志的具体实现,未指定将自动查找。 SLF4J|LOG4J|LOG4J2|JDK_LOGGING
|COMMONS_LOGGING|STDOUT|LOGGING|NO_LOGGING Default:未设置

6、其他配置
·typeHandlers(类型处理器)
·objectFactory(对象工厂)
·plugins插件(基友搭配,效率翻倍)
·mybatis-generator-core
·mybatis-plus
·通用mapper

7、映射器(mappers)
MapperRegistry:注册绑定我们的Mapper文件;
方式一:

<mappers>
    <mapper resource="com/can/dao/UserMapper.xml"></mapper>
</mappers>

使用相对于类路径的资源引用

方式二:

<mappers>
    <mapper class="com.can.dao.UserDao" />
</mappers>

方式二注意点:
·接口和它得Mapper配置文件必须同名
·接口和它得Mapper配置文件必须在同一包下! 或者在resource下创建跟java一样的路径

方式三:

<mappers>
    <package name="com.can.dao" />
</mappers>

方式三使用扫描包进行注入绑定
方式三注意点:
·接口和它得Mapper配置文件必须同名
·接口和它得Mapper配置文件必须在同一包下! 或者在resource下创建跟java一样的路径

8.生命周期和作用域
生命周期,和作用域,是至关重要的,因为错误的使用会导致非

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值