[MyBatis系列①]增删改查

目录

1、基础回顾

2、例子引入

3、映射文件

4、增删改查

4.1、add

4.2、delete

4.3、update

4.4、check

5、核心配置文件

5.1、properties

5.2、typeAliases

5.2.1、自定义

5.2.2、⭐MyBatis自带

5.3、environments

5.3.1、environment

5.3.2、transactionManager

5.3.3、dataSource

5.4、 mapper

6、API

6.1、SqlSessionFactoryBuilder

6.2、SqlSessionFactory

6.3、SqlSession


1、基础回顾

MyBatis基础:Java Web - MyBatis

下面用几张图片简单回顾:

原始的JDBC查询操作:

原始的JDBC插入操作:

2、例子引入

对于MyBatis的具体操作,这里以一个小的例子进行快速上手操作:

下面准备环境:

创建Maven Model,在pom.xml引入坐标

pom.xml

最重要的便是mybatis和mysql坐标:

总的pom文件如下:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>org.example</groupId>
    <artifactId>mybatis</artifactId>
    <version>1.0-SNAPSHOT</version>
    <packaging>war</packaging>

    <properties>
        <maven.compiler.source>11</maven.compiler.source>
        <maven.compiler.target>11</maven.compiler.target>
    </properties>

    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.tomcat.maven</groupId>
                <artifactId>tomcat7-maven-plugin</artifactId>
                <version>2.2</version>
                <configuration>
                    <port>8080</port>
                    <uriEncoding>UTF-8</uriEncoding>
                </configuration>
            </plugin>
        </plugins>
    </build>

    <dependencies>
        <!--mybatis坐标-->
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.5.5</version>
        </dependency>
        <!--mysql驱动坐标-->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.32</version>
            <scope>runtime</scope>
        </dependency>
        <!--单元测试坐标-->
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
            <scope>test</scope>
        </dependency>
        <!--日志坐标-->
        <dependency>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
            <version>1.2.12</version>
        </dependency>
    </dependencies>
</project>

初始化数据库

SQL语句:

CREATE DATABASE mybatis;
USE mybatis;
CREATE TABLE user(
        id INT(11) NOT NULL AUTO_INCREMENT,
        username VARCHAR(50),
        password VARCHAR(50),
        PRIMARY KEY(id)
);
DESCRIBE user;

编写User实体类

package com.xzl.domain;

/**
 * @author 逐梦苍穹
 * @date 2023/8/23 17:44
 */
public class User {
    private int id;
    private String username;
    private String password;

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

    public int getId() {
        return id;
    }

    public void setId(int 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;
    }
}

编写核心配置文件mybatis-config.xml

<!DOCTYPE configuration
        PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
    <!--通过properties标签加载外部properties文件-->
    <properties resource="jdbc.properties"/>

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

    <mappers>
        <mapper resource="com/xzl/domain/mapper/UserMapper.xml"/>
    </mappers>
</configuration>

编写SQL映射文件UserMapper.xml(后面这部分代码还会有变动,这里先保持不变)

测试

这里为了方便测试,还需要一个log4j日志框架(也可以使用Logback):

log4j.properties

### direct log messages to stdout ###
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n

### direct messages to file mylog.log ###
log4j.appender.file=org.apache.log4j.FileAppender
log4j.appender.file.File=c:/mylog.log
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n

### set log levels - for more verbose logging change 'info' to 'debug' ###

log4j.rootLogger=debug, stdout

MyBatisTest

/**
 * @author 逐梦苍穹
 * @date 2023/8/23 23:21
 */
public class MyBatisTest {
    @Test
    public void findAll_test1() throws IOException {
        //加载核心配置文件
        InputStream resourceAsStream = Resources.getResourceAsStream("mybatis-config.xml");
        //获得sqlSession工厂对象
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(resourceAsStream);
        //获得sqlSession对象
        SqlSession sqlSession = sqlSessionFactory.openSession();
        //执行sql语句
        List<User> userList = sqlSession.selectList("userMapper.findAll");
        //打印结果
        System.out.println(userList);
        //释放资源
        sqlSession.close();
    }
}

测试结果:

3、映射文件

4、增删改查

涉及修改数据库内容的操作一定要手动提交事务!!mybatis默认不提交事务

基本流程:

        加载核心配置文件

        获得sqlSession工厂对象

        获得sqlSession对象

        执行sql语句

        (提交事务)

        释放资源

对前三步进行抽取:

4.1、add

Java代码:

映射文件:

这里涉及到一个主键自增的问题,没有办法封装对象,则采用先执行再封装的方式,例子如下:

注意事项:

  1. 插入语句使用insert标签
  2. 在映射文件中使用parameterType属性指定要插入的数据类型
  3. Sql语句中使用#{实体属性名}方式引用实体中的属性值
  4. 插入操作使用的API是sqlSession.insert("命名空间.id",实体对象);
  5. 插入操作涉及数据库数据变化,所以要使用sqlSession对象显示的提交事务,即sqlSession.commit()

4.2、delete

Java代码:

映射文件:

注意事项:

  1. 删除语句使用delete标签
  2. Sql语句中使用#{任意字符串}方式引用传递的单个参数
  3. 删除操作使用的API是sqlSession.delete("命名空间.id",Object);

4.3、update

Java代码:

映射文件:

注意事项:

  1. 修改语句使用update标签
  2. 修改操作使用的API是sqlSession.update(“命名空间.id”,实体对象);

4.4、check

5、核心配置文件

配置项

描述

configuration

根元素,包含整个配置的主要部分

properties

定义属性值,然后在配置中引用

settings

配置 MyBatis 的全局设置

typeAliases

定义 Java 类型的别名

typeHandlers

配置自定义的类型处理器

objectFactory

指定对象工厂的类名

plugins

配置自定义的插件

environments

配置不同的数据库环境

environment

environments内部,定义具体的数据库环境

transactionManager

指定事务管理器的类型

dataSource

配置数据库连接的数据源

databaseIdProvider

配置不同数据库的 SQL 语句和语法

mappers

指定映射器(Mapper)的位置

5.1、properties

实际开发中,习惯将数据源的配置信息单独抽取成一个properties文件,该标签可以加载额外配置的properties文件

5.2、typeAliases

5.2.1、自定义

类型别名是为Java 类型设置一个名字,用于简化代码量。

原来:

在mybatis-config.xml设置别名:

设置别名后:

5.2.2MyBatis自带

上面是自定义的别名,mybatis框架已经为设置好一些常用的类型的别名:

别名

对应的Java类型

string

java.lang.String

byte

java.lang.Byte

long

java.lang.Long

short

java.lang.Short

int

java.lang.Integer

integer

java.lang.Integer

double

java.lang.Double

float

java.lang.Float

boolean

java.lang.Boolean

char

java.lang.Character

character

java.lang.Character

date

java.util.Date

decimal

java.math.BigDecimal

bigdecimal

java.math.BigDecimal

biginteger

java.math.BigInteger

object

java.lang.Object

list

java.util.List

arraylist

java.util.ArrayList

map

java.util.Map

hashmap

java.util.HashMap

5.3、environments

配置不同的数据库环境(如开发、测试、生产)

5.3.1、environment

支持多环境配置:

5.3.2、transactionManager

事务管理器(transactionManager)类型有两种:

①JDBC:这个配置就是直接使用了JDBC 的提交和回滚设置,它依赖于从数据源得到的连接来管理事务作用域。

②MANAGED:这个配置几乎没做什么。它从来不提交或回滚一个连接,而是让容器来管理事务的整个生命周期(比如JEE应用服务器的上下文)。默认情况下它会关闭连接,然而一些容器并不希望这样,因此需要将 closeConnection 属性设置为false 来阻止它默认的关闭行为。

5.3.3、dataSource

数据源(dataSource)类型有三种:

①UNPOOLED:这个数据源的实现只是每次被请求时打开和关闭连接。

②POOLED:这种数据源的实现利用“池”的概念将 JDBC 连接对象组织起来。

③JNDI:这个数据源的实现是为了能在如 EJB 或应用服务器这类容器中使用,容器可以集中或在外部配置数据源,然后放置一个 JNDI 上下文的引用。

5.4、 mapper

该标签的作用是加载映射的,加载方式有如下几种:

①使用相对于类路径的资源引用,例如:

<mapper resource="org/mybatis/builder/AuthorMapper.xml"/>

②使用完全限定资源定位符(URL),例如:

<mapper url="file:///var/mappers/AuthorMapper.xml"/>

③使用映射器接口实现类的完全限定类名,例如:

<mapper class="org.mybatis.builder.AuthorMapper"/>

④将包内的映射器接口实现全部注册为映射器,例如:

<package name="org.mybatis.builder"/>

6、API

6.1、SqlSessionFactoryBuilder

SqlSessionFactory build(InputStream inputStream) 通过加载mybatis的核心文件的输入流的形式构建一个SqlSessionFactory对象

其中, Resources 工具类,这个类在 org.apache.ibatis.io 包中。

Resources 类帮助开发者从类路径下、文件系统或 一个 web URL 中加载资源文件。

6.2SqlSessionFactory

SqlSessionFactory 有多个个方法创建 SqlSession 实例。常用的有如下两个:

方法

解释

openSession()

会默认开启一个事务,但事务不会自动提交,

也就意味着需要手动提交该事务,更新操作数据才会持久化到数据库中

openSession(boolean autoCommit)

参数为是否自动提交,如果设置为true,

那么不需要手动提交事务

6.3、SqlSession

SqlSession 实例在 MyBatis 中是非常强大的一个类。

在这里你会看到所有执行语句、提交或回滚事务和获取映射器实例的方法。

执行语句的方法主要有:

操作事务的方法主要有:

猜你喜欢

转载自blog.csdn.net/qq_60735796/article/details/132463853
今日推荐