java 知识点 16(mybatis:配置文件解析、log4j日志、分页、步骤总结、注解开发、lombok)

本文深入解析MyBatis框架的使用方法,包括XML配置、注解开发、日志配置、分页处理等内容,同时提供了丰富的实例代码,帮助读者快速掌握MyBatis的开发技巧。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、Mybatis解析

1.1、UserMapper.xml解析

1、namespace的值是UserMapper的包类名
在这里插入图片描述
2、select->id:对应namespace中的类里的方法名
在这里插入图片描述
3、resultType是sql语句执行的返回值类型
在这里插入图片描述
4、parameterType表示传递到sql语句里参数的类型
在这里插入图片描述

1.2、增删改 实例

增删改需要提交事物

1、增加一个用户 实例
先在UserMapper接口里面定义方法
在这里插入图片描述
再到UserMapper.xml里面写sql
在这里插入图片描述

    <insert id="addUser" parameterType="int">
       insert into mybatis.user (id,name,pwd) values (#{id},#{name},#{pwd})
    </insert>

测试插入一条数据
在这里插入图片描述

    @Test
    public void addUser(){
        SqlSession sqlSession = MybatisUtils.getSqlSession();
        UserMapper mapper = sqlSession.getMapper(UserMapper.class);
        int res = mapper.addUser(new User(4, "王五", "121212"));
        if (res>0){
            System.out.println("返回结果大于0,表示插入成功");
        }
        // 增删改需要提交事物
        sqlSession.commit();
        sqlSession.close();
    }

注意这几个名字一一对应
在这里插入图片描述

2、改 实例
UserMapper.java
在这里插入图片描述
UserMapper.xml
在这里插入图片描述
测试
在这里插入图片描述
3、删 实例
UserMapper.java
在这里插入图片描述
UserMapper.xml
在这里插入图片描述
测试
在这里插入图片描述

1.3、使用map类型插数据

适用于字段比较多的表

UserMapper.java
在这里插入图片描述

UserMapper.xml
在这里插入图片描述

测试
在这里插入图片描述

1.4、需要注意的问题

在这里插入图片描述

1.5、使用sql中的like

like模糊查询

UserMapper.java
在这里插入图片描述
UserMapper.xml
在这里插入图片描述

测试
在这里插入图片描述

这个%,除了可以写在使用的时候,还可以写在sql里

UserMapper.xml
在这里插入图片描述

测试 在这里插入图片描述

1.6、mybatis-config.xml解析

1、mybatis可以配置多套环境(但每次只能使用一套环境)
在这里插入图片描述
2、事物管理器(有JDBC、MANAGED这两种)
在这里插入图片描述

这里基本只用jdbc

3、数据源
有UPOOLED、POOLED、JNDIT,这几个选项,默认使用的是POOLED
在这里插入图片描述
4、xml引入外部配置文件(mysql连接)
在这里插入图片描述
在这里插入图片描述
5、properties属性
外部文件的用户名密码,优先级比属性里的高
在这里插入图片描述
在这里插入图片描述
6、 typeAliases 类型的别名
typeAliases必须写在properties下面,environments上面

下面为user类起一个别名(mybatis-config.xml)
在这里插入图片描述
在UserMapper.xml里面使用别名
在这里插入图片描述

除了以上直接给类起别名以外,
还可以扫描一个包,包下所有的类就有默认别名了,
默认别名为类名(首字母小写)
在这里插入图片描述
除了使用默认别名外,还可以用注解起别名
在实体类上加一个注解
在这里插入图片描述

除了自己写的类有别名,默认支持了一些类的别名
在这里插入图片描述

具体有那些见 (类型别名(typeAliases)):https://mybatis.org/mybatis-3/zh/configuration.html

7、mappers映射器
方式一:
这个映射器绑定mapper配置文件
在这里插入图片描述
方式二:
除了这种绑定方式,还可以通过class文件绑定

<!-- 使用映射器接口实现类的完全限定类名 -->
<mappers>
  <mapper class="com.haha.dao.UserMapper.xml"/>
</mappers>

但是如上配置会涉及几个问题:
1、接口文件必须和他的Mapper文件同名
2、接口文件必须和他的Mapper文件在同一包下

方式三:
直接扫描包

<!-- 包扫描 -->
<mappers>
  <mapper class="com.haha.dao"/>
</mappers>

需要注意的地方也是这两个
1、接口文件必须和他的Mapper文件同名
2、接口文件必须和他的Mapper文件在同一包下

1.7、mybatis插件

mybatis插件有很多,有一些可以自动实现很多功能,比如增删改查

在这里插入图片描述

1.8、属性和字段不一致问题、resultMap结果集映射

示例:
在这里插入图片描述
解决办法:
第一种,在sql里面起别名
在这里插入图片描述

第二种,利用结果集映射resultMap
在这里插入图片描述

1.9、不用一个一个注册mapper的写法

mybatis-config.xml
在这里插入图片描述

2、Mybatis 日志、log4j

Mybatis 内置的日志工厂,委托给下面的实现之一:

SLF4J
Apache Commons Logging
Log4j 2
Log4j
JDK logging
STDOUT_LOGGING (默认标准日志工厂,不需要导包可用)

使用日志工厂的时候需要导包

在mybatis-config.xml里面配置日志功能
(必须写在properties和typeAliases中间)

2.1、Mybatis标准的日志工厂

mybatis-config.xml :
在这里插入图片描述

2.2、log4j日志工厂

先的导入log4j的包
pom.xml
在这里插入图片描述
添加log4j的配置文件
log4j.properties

这个配置文件可以百度找一个,然后自己修改

在这里插入图片描述
log4j的简单使用

导包应导:import org.apache.log4j.Logger;
log4j对象:static Logger logger = logger.getLogger(UserDaoTest.class)这里UserDaoTest是当前类名

打印不同级别的日志
测试类:
在这里插入图片描述

3、mybatis分页

3.1、limit分页(sql实现分页)

sql里limit的用法

# 查前两条数据
select × from user limit 2;

# 查02条数据
select × from user limit 0,2;

注意limit后面不能跟-1,这个bug已经被修复了

mybatis分页实现

UserMapper.java
在这里插入图片描述
UserMapper.xml
在这里插入图片描述
测试
在这里插入图片描述

3.2、RowBounds分页(java代码实现分页)

UserMapper.java
在这里插入图片描述

UserMapper.xml
在这里插入图片描述

测试

在这里插入图片描述
另外,除了这种实现方式还可以使用分页插件mybatis PageHelper

4、mybatis使用注解开发

一般简单的sql语句才用注解开发,复杂的还是要用xml来配置

4.1、新建mybatis项目(步骤整理)

新建主项目
在这里插入图片描述
在这里插入图片描述
新建子模块
在这里插入图片描述
在这里插入图片描述
修改maven地址
在这里插入图片描述

主项目pom.xml

<?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>zhu</artifactId>
    <packaging>pom</packaging>
    <version>1.0-SNAPSHOT</version>
    <modules>
        <module>zhi</module>
    </modules>

    <dependencies>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.46</version>
        </dependency>

        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.5.5</version>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
        </dependency>
    </dependencies>
    <!-- 当maven里配置文件不生效时,添加如下配置-->
    <build>
        <resources>
            <resource>
                <directory>src/main/resources</directory>
                <includes>
                    <include>**/×.properties</include>
                    <include>**/*.xml</include>
                </includes>
                <filtering>true</filtering>
            </resource>
            <resource>
                <directory>src/main/java</directory>
                <includes>
                    <include>**/×.properties</include>
                    <include>**/*.xml</include>
                </includes>
                <filtering>true</filtering>
            </resource>
        </resources>
    </build>
</project>

修改子项目pom.xml

<?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">
    <parent>
        <artifactId>Mybatis-Study</artifactId>
        <groupId>org.example</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>mybatis-o1</artifactId>

    <!-- 当maven里配置文件不生效时,添加如下配置-->
    <build>
        <resources>
            <resource>
                <directory>src/main/resources</directory>
                <includes>
                    <include>**/×.properties</include>
                    <include>**/*.xml</include>
                </includes>
                <filtering>true</filtering>
            </resource>
            <resource>
                <directory>src/main/java</directory>
                <includes>
                    <include>**/×.properties</include>
                    <include>**/*.xml</include>
                </includes>
                <filtering>true</filtering>
            </resource>
        </resources>
    </build>
</project>

在resources文件夹下,新建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/mybatis?useSSL=true&amp;useUnicode=true&amp;characterEncoding=UTF-8"/>
                <property name="username" value="root"/>
                <property name="password" value="root"/>
            </dataSource>
        </environment>
    </environments>

</configuration>

建库、建表

# 建库
CREATE DATABASE mybatis;

# 使用库
USE mybatis;

# 建表
CREATE TABLE `user` (
  `id` int(11) NOT NULL,
  `name` varchar(30) CHARACTER SET latin1 DEFAULT NULL,
  `pwd` varchar(30) CHARACTER SET latin1 DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 


# 插入数据
INSERT INTO 'user'('id','name','pwd') VALUES
(1, '猪小明','111111'),
(2,'妹大爷','123456'),
(3,'张三','000000')

新建实体类User.java ( 包com.haha.pojo下 )

package com.haha.pojo;

public class User {
    private int id;
    private String name;
    private String pwd;
    public User() {
    }

    public User(int id, String name, String pwd) {
    }

    @Override
    public String toString() {
        return "User{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", 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 getPed() {
        return pwd;
    }

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

}

新建接口UserMapper.java ( 在com.haha.dao 包下)

package com.haha.dao;

import com.haha.pojo.User;

public interface UserMapper {

}

新建MybatisUtils.java(在com.haha.utils包下)

package com.haha.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;

public class MybatisUtils {
    private static SqlSessionFactory sqlSessionFactory;
    static {
        try {
            // 第一句:加载配置文件 mybatis-config.xml , 第二句:构建sql会话
            InputStream inputStream = Resources.getResourceAsStream("mybatis-config.xml");
            sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    // 返回 封装有执行sql方法的对象
    public static SqlSession getSqlSession(){
        return sqlSessionFactory.openSession();
    }
}

项目目录结构
在这里插入图片描述
和之前那个mybatis项目相比少了UserMapper.xml
因为这个项目我们要使用注解,所以就不需要这个文件了

4.2、使用注解开发

UserMapper.java

    @Select("select * from user")
    List<User> getUsers();

在这里插入图片描述
到mybatis-config.xml里面绑定接口

    <mappers>
        <mapper class="com.haha.dao.UserMapper" />
    </mappers>

在这里插入图片描述

新建测试类UserMapperTest.java

import com.haha.dao.UserMapper;
import com.haha.pojo.User;
import com.haha.utils.MybatisUtils;
import org.apache.ibatis.session.SqlSession;
import org.junit.Test;

import java.util.List;

public class UserMapperTest {
    @Test
    public void test(){
        SqlSession sqlSession = MybatisUtils.getSqlSession();
        UserMapper mapper = sqlSession.getMapper(UserMapper.class);
        List<User> users = mapper.getUsers();
        for (User user : users) {
            System.out.println(user);
        }
        sqlSession.close();
    }
}

在这里插入图片描述
运行测试类

在这里插入图片描述

解析

在这里插入图片描述

4.3、注解:增删改查

UserMapper.java
在这里插入图片描述

4.4、不手动提交的方式

在工具类里面,这里写个true就不用手动提交了
在这里插入图片描述
使用的时候就不用写commit( )了
在这里插入图片描述

4.5、关于@Param( )

  • 基本类型的参数或者String类型,需要加上
  • 引用类型不需要加
  • 只有一个基本类型可以不用加

4.6、#{}与${}

在sql语句中这两个都可以使用,有一点区别就是#{ }可以防止sql注入,${ }不能

5、maven的settings.xml

<?xml version="1.0" encoding="UTF-8"?>

<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd">

    <!-- 本地仓库位置 -->
    <localRepository>/home/Documents/maven/maven-home</localRepository>

    <pluginGroups></pluginGroups>
    <proxies></proxies>

    <servers>
        <server>
            <id>deploymentRepo</id>
            <username>repouser</username>
            <password>repopwd</password>
        </server>
    </servers>

    <mirrors>
        <!-- 国内maven镜像 -->
        <mirror>
            <id>alimaven</id>
            <name>aliyun maven</name>
            <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
            <mirrorOf>central</mirrorOf>
        </mirror>
    </mirrors>
    
    <profiles></profiles>
</settings>

6、lombok插件

相当于是一个懒人插件,使用它可以自动生成get、set方法等,利用注解实现。

这个插件基本不用,因为idea已经可以为我们自动生成get、set等方法,这里看看就好

6.1、idea配置lombok

在这里插入图片描述
安装完成就可以使用了

6.2、导入依赖

在主项目或者子项目的pom.xml中导入lombok依赖

        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.18.10</version>
        </dependency>

在这里插入图片描述
手动更新依赖
在这里插入图片描述

6.3、使用

新建一个实体类User2.java

package com.haha.pojo;

import lombok.*;

@Data
@AllArgsConstructor
@NoArgsConstructor
public class User2 {
    private int id;
    private String name;
    private String pwd;

}

在这里插入图片描述
如上这个实体类就和我们之前写的User.java功能是一样的

6.4、常用注解

在这里插入图片描述

7、新版idea需要手动更新项目

新版idea在maven项目pom.xml里添加dependency后,需要手动更新
在这里插入图片描述
我的idea版本
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值