CRUD操作及配置解析

参考视频:【狂神说Java】Mybatis最新完整教程IDEA版通俗易懂 点击观看

文章目录


CRUD操作

1、在UserMapper.java接口中添加对应方法

java 复制代码
package com.findx.dao;

import com.findx.pojo.User;

import java.util.List;
import java.util.Map;

public interface UserMapper {
    //模糊查询
    List<User> getUserLike(String value);
    //查询全部用户
    List<User> getUserList();
    //根据id查询用户
    User getUserById(int id);
    //使用Map用id查询用户
    User getUserById2(Map<String,Object> map);
    //增加用户
    int addUser(User user);
    //使用Map添加用户
    int addUser2(Map<String,Object> map);
    //修改用户
    int updateUser(User user);
    //删除用户
    int deleteUser(int id);
}

2、在UserMapper.xml中添加对应XML语句

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.findx.dao.UserMapper">
    <!--select查询语句-->
    <select id="getUserList" resultType="com.findx.pojo.User">
        select * from mybatis.user
    </select>
    <select id="getUserById" resultType="com.findx.pojo.User" parameterType="int">
        select * from mybatis.user where id = #{id}
    </select>
    <select id="getUserById2" resultType="com.findx.pojo.User" parameterType="map">
        select * from mybatis.user where id = #{useid}
    </select>
    <!--模糊查询-->
    <select id="getUserLike" resultType="com.findx.pojo.User">
        select * from mybatis.user where name like #{value}
    </select>
    <!--对象中的属性可以直接取出来-->
    <insert id="addUser" parameterType="com.findx.pojo.User">
        insert into mybatis.user (id, name, pwd) values (#{id}, #{name}, #{pwd})
    </insert>
    <!--传递map的key-->
    <insert id="addUser2" parameterType="map">
        insert into mybatis.user (id, name, pwd) values (#{useid}, #{usename}, #{usepwd})
    </insert>
    <update id="updateUser" parameterType="com.findx.pojo.User">
        update mybatis.user set name = #{name}, pwd = #{pwd} where id = #{id}
    </update>
    <delete id="deleteUser" parameterType="int">
        delete from mybatis.user where id = #{id}
    </delete>

</mapper>

3、在测试类中编写对应测试方法运行测试

java 复制代码
package com.findx.dao;

import com.findx.pojo.User;
import com.findx.utils.MybatisUtils;
import org.apache.ibatis.session.SqlSession;
import org.junit.Test;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class UserDaoTest {
    @Test
    //模糊查询
    public void getUserLike() {
        SqlSession sqlSession = MybatisUtils.getSqlSession();
        UserMapper mapper = sqlSession.getMapper(UserMapper.class);
        List<User> userList = mapper.getUserLike("%f%");
        for (User user : userList) {
            System.out.println(user);
        }
        sqlSession.close();
    }
    @Test
    public void getUserList() {
        // 获取SqlSession对象
        SqlSession sqlSession = MybatisUtils.getSqlSession();
        // 方式一:getMapper
        UserMapper mapper = sqlSession.getMapper(UserMapper.class);
        List<User> userList = mapper.getUserList();
        for (User user : userList) {
            System.out.println(user);
        }
        // 关闭SqlSession对象
        sqlSession.close();
    }
    @Test
    public void getUserById() {
        // 获取SqlSession对象
        SqlSession sqlSession = MybatisUtils.getSqlSession();
        // 获取UserMapper接口
        UserMapper mapper = sqlSession.getMapper(UserMapper.class);
        User user = mapper.getUserById(1);
        System.out.println(user);
        // 释放资源
        sqlSession.close();
    }
    @Test
    //getUserById2
    public void getUserById2() {
        // 获取SqlSession对象
        SqlSession sqlSession = MybatisUtils.getSqlSession();
        // 获取UserMapper接口
        UserMapper mapper = sqlSession.getMapper(UserMapper.class);
        Map<String, Object> map = new HashMap<String, Object>();
        map.put("useid", 6);
        User user = mapper.getUserById2(map);
        System.out.println(user);
        sqlSession.close();
    }
    //增删改需要提交事务
    @Test
    public void addUser() {
        SqlSession sqlSession = MybatisUtils.getSqlSession();
        UserMapper mapper = sqlSession.getMapper(UserMapper.class);
        int res = mapper.addUser(new User(7, "ffx", "123456"));
        if (res > 0) {
            System.out.println("插入成功");
        }
        sqlSession.commit();//提交事务
        sqlSession.close();
    }
    @Test
    //addUser2
    public void addUser2() {
        SqlSession sqlSession = MybatisUtils.getSqlSession();
        UserMapper mapper = sqlSession.getMapper(UserMapper.class);
        Map<String, Object> map = new HashMap<>();
        map.put("useid", 6);
        map.put("usename", "fx");
        map.put("usepwd", "123456");
        int res = mapper.addUser2(map);
        if (res > 0) {
            System.out.println("插入成功");
        }
        sqlSession.commit();//提交事务
        sqlSession.close();
    }
    @Test
    public void updateUser() {
        SqlSession sqlSession = MybatisUtils.getSqlSession();
        UserMapper mapper = sqlSession.getMapper(UserMapper.class);
        int res = mapper.updateUser(new User(4, "zfx", "123456"));
        if (res > 0) {
            System.out.println("更新成功");
        }
        sqlSession.commit();//提交事务
        sqlSession.close();
    }
    @Test
    public void deleteUser() {
        SqlSession sqlSession = MybatisUtils.getSqlSession();
        UserMapper mapper = sqlSession.getMapper(UserMapper.class);
        int res = mapper.deleteUser(6);
        if (res > 0) {
            System.out.println("删除成功");
        }
        sqlSession.commit();//提交事务
        sqlSession.close();
    }
}

所有的增删改操作都需要提交事务否则不会提交到数据库


配置解析

properties

在资源目录下面新建一个db.properties

复制代码
driver=com.mysql.cj.jdbc.Driver
url=jdbc:mysql://localhost:3306/mybatis?useSSL=true&useUnicode=true&characterEncoding=utf8&serverTimezone=Asia/Shanghai
username=root
password=root

将文件导入properties配置文件

xml 复制代码
<!--configuration核心配置文件-->
<configuration>
    <!--引入外部配置文件-->
    <properties resource="db.properties"/>
    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC"/>
            <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>
    <mappers>
        <mapper resource="com/findx/dao/UserMapper.xml"/>
    </mappers>
</configuration>

typeAliases

xml 复制代码
<!--configuration核心配置文件-->
<configuration>
    <properties resource="db.properties"/>
    <!--给实体类起别名-->
    <typeAliases>
        <typeAlias type="com.findx.pojo.User" alias="User"/>
    </typeAliases>
    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC"/>
            <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>
    <mappers>
        <mapper resource="com/findx/dao/UserMapper.xml"/>
    </mappers>
</configuration>

mapper

xml 复制代码
<!--configuration核心配置文件-->
<configuration>
    <properties resource="db.properties"/>
    <typeAliases>
        <typeAlias type="com.findx.pojo.User" alias="User"/>
    </typeAliases>
    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC"/>
            <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>
    <mappers>
        <mapper resource="com/findx/dao/UserMapper.xml"/>
<!--        <mapper class="com.findx.dao.UserMapper"/>-->
    </mappers>
</configuration>

生命周期和作用域

不同作用域和生命周期类别是至关重要的,因为错误的使用会导致非常严重的并发问题。

Mybatis的执行过程

SqlSessionFactoryBuilder的作用在于创建SqlSessionFactory。

SqlSessionFactory可以被认为是一个数据库连接池,它的作用是创建SqlSession接口对象。

如果说SqlSessionFactory相当于数据库连接池,那么SqlSession就相当于一个数据库连接。

SqlSession

相关推荐
paopaokaka_luck1 小时前
宠物门店经营管理系统(销售与库存联动、进货自动记账、 退换与退款关联、员工个人业绩、ECharts 经营分析、滞销识别与客户分层、宠物档案年龄计算)
前端·javascript·spring boot·mysql·echarts·mybatis·1024程序员节
金銀銅鐵1 小时前
[Java] 用 GUI 展示 EnumSet 增减元素时的内部变化(下)
java·后端·ai编程
AI人工智能+电脑小能手2 小时前
一次请求打几个下游,这个Java并行任务工具类6个方法按序聚合
java·线程池·并发编程·1024程序员节·批量处理·并行任务
paopaokaka_luck3 小时前
心理咨询管理系统(WebSocket实时沟通、基于用户的协同过滤、 ECharts多维分析、 预约业务流程、预约校验与定时处理)
java·vue.js·spring boot·mysql·spring·echarts·1024程序员节
2301_32241428044 小时前
springboot农产品交易平台的设计与实现08055-计算机毕设 原创(免费领源码+部署教程+开发环境)
java·spring boot·redis·mysql·tomcat·maven·mybatis
乐茵lin4 小时前
Redis 持久化机制详解:RDB 与 AOF
redis·bootstrap·mybatis
考虑考虑5 小时前
JDK26的JEP 500属性
java·后端·java ee
LMT流氓兔5 小时前
第五单元——第十二课:把脚本整理成项目
java·数据库·python·langchain·1024程序员节
yuniko-n5 小时前
【JUC】四种内存屏障示例
java·1024程序员节
念何架构之路6 小时前
Go reflect 包:结构体反射 —Field、Tag 与 VisibleFields
java·数据库·golang