mybatis - [05] Mybatis的CURD

数据库:mysql 8.0.28

技术框架:mybatis 3.5.13maven 3.8.7

 

一、准备工作

(1)数据库建库建表

-- 创建数据库
create database if not exists mybatis;
-- 切换数据库
use mybatis;
-- 创建用户表
create table if not exists user
(
    id   int not null primary key,
    name varchar(30) null,
    pwd  varchar(30) null
) charset = utf8;

 

(2)插入测试数据

insert into mybatis.user (id, name, pwd)
values  (1, '漩涡鸣人', '123456'),
        (2, '宇智波佐助', '123456'),
        (3, '春野樱', '123456'),
        (4, '旗木卡卡西', '123456'),
        (5, '奈良鹿丸', '123456'),
        (6, '秋道丁次', '123456'),
        (7, '山中井野', '123456'),
        (8, '猿飞阿斯玛', '123456'),
        (9, '日向雏田', '123456'),
        (10, '犬冢牙', '123456'),
        (11, '油女志乃', '123456'),
        (12, '夕日红', '123456'),
        (520, '1314', 'yanglin'),
        (9527, '007', '123456');

 

(3)配置maven依赖(pom.xml

    <properties>
        <maven.compiler.source>8</maven.compiler.source>
        <maven.compiler.target>8</maven.compiler.target>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>

    <dependencies>
        <!--mysql驱动-->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.31</version>
        </dependency>
        <!--mybatis-->
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.5.13</version>
        </dependency>
        <!--junit-->
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.13.2</version>
        </dependency>
        <!--lombok-->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.18.30</version>
        </dependency>
    </dependencies>

    <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>

(4)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.cj.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://localhost:3306/mybatis?useSSL=true&amp;useUnicode=true&amp;characterEncoding=UTF-8&amp;serverTimezone=Asia/Shanghai"/>
                <property name="username" value="root"/>
                <property name="password" value="!QAZ2wsx"/>
            </dataSource>
        </environment>
    </environments>
    <!-- 每一个Mapper.xml都需要在Mybatis核心配置文件中注册 -->
    <mappers>
        <mapper resource="com/harley/dao/UserMapper.xml"/>
    </mappers>
</configuration>

 

二、POJO类

package com.harley.pojo;

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

/**
 * 实体类
 * @author harley
 * @date 2024/05/31 14:00
 */
@AllArgsConstructor
@NoArgsConstructor
@Data
@ToString
public class User {
    private int id;
    private String name;
    private String pwd;

}

 

 

三、JDBC工具类

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

/**
 * @author harley
 * @date 2024/05/31 13:55
 */
public class MybatisUtils {

    /* 静态属性,MybatisUtils实例化时生成 */
    private static SqlSessionFactory sqlSessionFactory;

    /* 静态代码块,MybatisUtils实例化时运行 */
    static {
        try{
            String resource="mybatis-config.xml";
            InputStream inputStream = Resources.getResourceAsStream(resource);
             sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
        }catch (IOException e){
            e.printStackTrace();
        }
    }

    public static SqlSession getSqlSession() {
        return sqlSessionFactory.openSession();
    }
}

 

四、Mapper类

package com.harley.dao;


import com.harley.pojo.User;

import java.util.List;

public interface UserMapper {
    // 查询全部用户
    List<User> getUserList();

    // 根据id查询用户
    User getUserById(int id);

    // 新增一个用户
    int addUser(User user);

    // 更新用户
    int updateUser(User user);

    // 删除用户
    int deleteUser(int id);

}

 

五、Mapper.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接口 -->
<mapper namespace="com.harley.dao.UserMapper">
    <!--select查询接口-->
    <select id="getUserList" resultType="com.harley.pojo.User">
        select * from user
    </select>
    <select id="getUserById" resultType="com.harley.pojo.User" parameterType="integer">
        select * from user where id = #{id}
    </select>
    <!--对象中的属性,可以直接取出来 -->
    <insert id="addUser" parameterType="com.harley.pojo.User">
        insert into user (id,name,pwd) values (#{id},#{name},#{pwd})
    </insert>
    <update id="updateUser" parameterType="com.harley.pojo.User">
        update user set name=#{name},pwd=#{pwd} where id = #{id}
    </update>
    <delete id="deleteUser" parameterType="integer">
        delete from user where id = #{id}
    </delete>
</mapper>

 

六、测试类

package com.harley.dao;

import com.harley.pojo.User;
import com.harley.utils.MybatisUtils;
import org.apache.ibatis.session.SqlSession;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;

import java.util.List;

/**
 * @author harley
 * @date 2024/05/31 14:22
 */
public class UserDaoTest {

    SqlSession sqlSession;
    UserMapper userMapper;

    @Before
    public void openSession(){
        System.out.println("开启sqlSession");
        sqlSession= MybatisUtils.getSqlSession();
        userMapper=sqlSession.getMapper(UserMapper.class);
    }

    @Test
    public void test(){

        // 第二步: getMapper
//        UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
//        List<User> userList = userMapper.getUserList();

        List<User> userList = sqlSession.selectList("com.harley.dao.UserMapper.getUserList");

        // 第三步: 遍历结果集
        for (User user : userList) {
            System.out.println(user);
        }
        // 第四步: 关闭sqlSession
        sqlSession.close();
    }

    @Test
    public void getUserById(){
        User user = userMapper.getUserById(1);
        System.out.println(user);

    }

    // 增删改需要提交事务
    @Test
    public void addUser(){
        User user = new User(520,"1313","yanglin");
        int res = userMapper.addUser(user);
        if (res>0){
            System.out.println("用户: ["+user.getName()+"] 插入成功");
        }
        // 提交事务
        sqlSession.commit();
    }

    @Test
    public void updateUser(){
        User user = new User(520,"1314","yanglin");
        int res = userMapper.updateUser(user);
        if(res>0){
            System.out.println("id:["+user.getId()+"] 的信息已更改");
        }
        // 提交事务
        sqlSession.commit();

    }

    @Test
    public void deleteUser(){
        int id = 9527;
        int res = userMapper.deleteUser(id);
        if(res>0){
            System.out.println("id:["+id+"] 用户已删除");
        }
        // 提交事务
        sqlSession.commit();
    }

    @After
    public void closeSession(){
        if(sqlSession!=null){
            System.out.println("关闭sqlSession");
            sqlSession.close();
        }
    }

}

 

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

 

 

七、常见问题

(1)Mapper.xml中的<mapper namespace="com.harley.dao.UserMapper">写成了<mapper namespace="com/harley/dao/UserMapper">

(2)mybatis-config.xml中的<mapper resource="com/harley/dao/UserMapper.xml"/>写成了<mapper resource="com.harley.dao.UserMapper.xml"/>

(3)NullPointerException,没有注册到资源

(4)资源导出失败问题处理

<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>

 

 

 

— 业精于勤荒于嬉,行成于思毁于随 —

posted @   HOUHUILIN  阅读(18)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
历史上的今天:
2023-05-31 调整博客园格式专用随笔
2023-05-31 Hive - SQL
2023-05-31 DW - 数据仓库原理
点击右上角即可分享
微信分享提示