Mybatis学习笔记

这篇博客介绍了Mybatis的学习笔记,包括数据库前期工作,Mybatis的使用步骤,mybatis-config.xml配置详解,以及POJO注解、多对一、一对多关系处理、动态SQL语句和缓存机制等内容。在数据库前期,主要讨论了MySQL 8的InnoDB存储引擎与MyISAM的区别。Mybatis使用中,重点讲解了如何配置mybatis-config.xml文件,以及创建实体类、Mapper映射接口类和测试类。此外,还深入解释了mybatis-config.xml中的各个配置项,如数据源、事务管理器和映射器等。
摘要由CSDN通过智能技术生成


Mybatis学习
Mybatis介绍:
1 MyBatis 本是apache的一个开源项目ibatis, 2010年这个项目由apache 迁移到了google code,并且改名为MyBatis
2 MyBatis 是一款优秀的持久层框架
3 MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集的过程
4 Mybatis官方文档 : http://www.mybatis.org/mybatis-3/zh/index.html
5 GitHub : https://github.com/mybatis/mybatis-3

1数据库前期工作

本次练习使用MySQL 8作为数据库:

CREATE DATABASE `mybatisdemo`;
USE `mybatisdemo`;
DROP TABLE IF EXISTS `user`;

CREATE TABLE `user` (
`id` int(20) 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,'狂神',123456),(2,'老邓','asdfgh'),(3,'Jack','qwerty');

ps:MySQL Administrator建数据库的时候,表缺省是InnoDB类型。(InnoDB是一种数据库存储引擎)
InnoDB,MyISAM 两种类型的区别:MyISAM类型不支持事务处理等高级处理,而InnoDB类型支持。 MyISAM类型的表强调的是性能,其执行数度比InnoDB类型更快,但是不提供事务支持,而InnoDB提供事务支持,外键等高级数据库功能。

2Mybatis使用示例1

1、导入依赖,设置导出所有描述文件

先在父pom.xml中导入依赖(主要是:mybatis 和 mysql-connector-java )
然后导出所有描述文件(主要是com.kuang.dao下的XxMapper.xml )

<dependencies>
    <dependency>
        <groupId>org.projectlombok</groupId>
        <artifactId>lombok</artifactId>
        <version>1.18.12</version>
        <scope>provided</scope>
    </dependency>
    <dependency>
        <groupId>org.mybatis</groupId>
        <artifactId>mybatis</artifactId>
        <version>3.5.2</version>
    </dependency>
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>5.1.47</version>
    </dependency>
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.12</version>
    </dependency>
<build>
    <resources>
        <resource>
            <directory>src/main/java</directory>
            <includes>
                <include>**/*.properties</include>
                <include>**/*.xml</include>
            </includes>
            <filtering>false</filtering>
        </resource>
        <resource>
            <directory>src/main/resources</directory>
            <includes>
                <include>**/*.properties</include>
                <include>**/*.xml</include>
            </includes>
            <filtering>false</filtering>
        </resource>
    </resources>
</build>
</dependencies>

ps: 在标签内若不导入此内容,则一般默认只导出scr/main/resources下的描述文件,其他的xml文件无法被输出,从而报错

2、mybatis-config.xml 配置

配置在src/main/resources 下(一般都叫这个名字,不要乱改最好):
作用是
1)连接数据库 以及
2) 在<mappers> </mappers>标签内声明所有用到的XxxMapper.xml 文件

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://localhost:3306/mybatisdemo?serverTimezone=Asia/Shanghai&amp;useSSL=false&amp;allowMultiQueries=true&amp;useUnicode=true&amp;characterEncoding=utf-8"/>
                <property name="username" value="root"/>
                <property name="password" value="123456"/>
            </dataSource>
        </environment>
    </environments>


<!--    映射器,使用了哪个XxxMapper.xml都要在这里配置-->
    <mappers>
        <mapper resource="com/kuang/dao/UserMapper.xml"/>
    </mappers>
</configuration>

注意:
1)关于<mappers> </mappers>
映射器的resource ,不是com.kuang.dao.UserMapper.xml
而是路径:com/kuang/dao/UserMapper.xml

2)关于

<property name="url" value="jdbc:mysql://localhost:3306/mybatisdemo?serverTimezone=Asia/Shanghai&amp;useSSL=false&amp;allowMultiQueries=true&amp;useUnicode=true&amp;characterEncoding=utf-8"/>

1、MySQL 8之后都要设置serverTimezone 否则报错
2、MySQL 8之后默认useSSL=false,这是连接数据库验证的
3、&amp; 其实就是&的转义, 在idea高版本中需要这样转义
4、useUnicode=true&characterEncoding=utf-8 设置数据库默认编码为utf-8中文字符
5、allowMultiQueries=true 允许批量操作(可以不设置)

所以以后连接MySQL配置基本可以直接复制,但注意修改url中的mybatisdemo,这是database名

3、建好基本类

1)创建实体类,

package com.kuang.pojo;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

@Data
@AllArgsConstructor
@NoArgsConstructor
public class User {
   

//属性名需要与数据库表中字段名相同 ! 返回result是根据类的属性名去接收数据库表中同名字段的数据记录的
private int id;  //id
private String name;   //姓名
private String pwd;   //密码
}

注意:类的属性名需要与数据库表中字段名相同! 返回的result是根据类的属性名去接收数据库表中同名字段的数据记录的。
若不同名的话需要在mybatis-config.xml 中利用<resultMap/>来修改,可参考后面

mybatis的返回值的封装方式是先构造一个无参的对象,然后通过set方法一个一个的往里面set值,当实体类中未定义无参构造函数时虚拟机会提供一个无参构造函数。但实体类中无toString()方法时,该实体类无法被正常输出。

2)mybatis工具类 (调用mybatis-config.xml)

package com.kuang.utils;

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 java.io.IOException;
import java.io.InputStream;
//MyBatis工具类
public class MybatisUtils {
   
    private static SqlSessionFactory sqlSessionFactory;static {
   
    try {
   
        String resource = "mybatis-config.xml";
        InputStream inputStream = Resources.getResourceAsStream(resource);
        sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
    } catch (IOException e) {
   
        e.printStackTrace();
    }
}

//获取SqlSession连接
public static SqlSession getSession(){
   
    return sqlSessionFactory.openSession(true); //autoCommit:true表示自动提交事务,若无设置默认为false,增删改需要在测试类中session.commit(); 手动提交事务

}
}

创建SqlSession时可以设置是否autoCommit

每个基于 MyBatis 的应用都是以一个 SqlSessionFactory 的实例为核心的。SqlSessionFactory 的实例可以通过 SqlSessionFactoryBuilder 获得。而 SqlSessionFactoryBuilder 则可以从 XML 配置文件或一个预先配置的 Configuration 实例来构建出 SqlSessionFactory 实例。

之后需要SqlSession可以通过sqlSessionFactory.openSession()来获得,
SqlSessionFactory类似于一个POOL池,取出来的SqlSession用完后要close(),避免资源被占用

3)Mapper映射接口类

    package com.kuang.dao;

import com.kuang.pojo.User;

import java.util.List;

public interface UserMapper {
     // 其实就是Dao
        //查询所有用户
        List<User> selectUser();
    //根据id搜索用户
    User getUserByID(int num);

    //增加用户  增删改类型都是int 这样可以返回结果集
    int insertUser(User user);

    //更新用户
    int updateUser(Map map);

    //删除
    int deleteUser(int id);
    
    //模糊查询
List<User> getUserLike(String name);

}

4)Mapper实现(xml文件形式) 以前一般用实现类方式实现接口,在mybatis中用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绑定一个对应的Dao/Mapper接口-->
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值