首页 > 其他分享 >mybatis

mybatis

时间:2023-09-12 19:33:47浏览次数:35  
标签:Mapper mapper sqlSession User mybatis id user

mybatis

mybatis 是一款优秀的持久层框架

MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作

MyBatis 可以通过简单的 XML 或注解来配置和映射原始类型、接口和 Java POJO(Plain Old Java Objects,普通老式 Java 对象)为数据库中的记录。

持久层

Dao层,Service层,Controller层

  • 完成持久化工作的代码块
  • 层界限十分明显

作用

  • 帮助程序员将数据存入数据库中
  • 方便
  • 传统jdbc太复杂。该技术简化,框架,自动化。

第一个mybatis程序

  1. 新建数据库
  2. 创建项目
  3. 创建模块
    • 编写核心配置文件
    • 编写配置类

编写代码

  • 实体类 User
package com.dang.pojo;

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

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

  • Dao接口 userDao
package com.dang.dao;

import com.dang.pojo.User;

import java.util.List;

public interface UserDao {
    List<User> userlist();

}

  • 接口实现类

UserMapper.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">
<mapper namespace="com.dang.dao.UserDao">
    <select id="userlist"  resultType="com.dang.pojo.User">
        select * from db01.user
    </select>

</mapper>
  • 测试类 testUserDao
package com.dang;

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

import java.util.List;

public class testUserDao {
    @Test
    public void test(){
        SqlSession sqlSession = MybatisUtils.getSqlSession();
        UserDao userDao = sqlSession.getMapper(UserDao.class);
        List<User> list = userDao.userlist();
        for (User user : list) {
            System.out.println(user);

        }
        sqlSession.close();
    }
}


  • 运行结果

image-20230909200350128


CRUD

namespace

namespace中的包名要和mapper一致

select

选择,查询语句;

  • id:对应namespace方法名

  • resultType:sql语句返回值

  • parameterType:参数类型

  1. 编写接口

    /**
     * @return 查询所有用户
     */
    List<User> getuserlist();
     /**
         * 根据id查询用户
         * @param id
         * @return
         */
        User getUserById(int id);
    
  2. 编写SQL语句

    <select id="getuserlist"  resultType="com.dang.pojo.User">
        select * from db01.user
    </select>
    
    
    <select id="getUserById" resultType="com.dang.pojo.User" parameterType="int">
        select * from db01.user where id= #{id}
    </select>
    
  3. 测试

    /**
     * 查询所有用户
     */
    @Test
    public void test() {
        SqlSession sqlSession = MybatisUtils.getSqlSession();
        try {
            Mapper userDao = sqlSession.getMapper(Mapper.class);
            List<User> list = userDao.getuserlist();
            for (User user : list) {
                System.out.println(user);
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            sqlSession.close();
        }
    }
    
    /**
     * 根据id查询用户
     */
    @Test
    public void testgetUserById() {
        SqlSession sqlSession = MybatisUtils.getSqlSession();
        Mapper mapper = sqlSession.getMapper(Mapper.class);
        User userById = mapper.getUserById(1);
        System.out.println(userById);
    
        sqlSession.close();
    }
    

insert

  1. 编写接口

    /**
     * 新增用户
     */
    int addUser(User user);
    
  2. 编写SQL语句

    <insert id="addUser" parameterType="com.dang.pojo.User">
        insert into db01.user(id,name,pwd)values (#{id},#{name},#{pwd});
    </insert>
    
  3. 测试

    /**
     * 增加员工
     */
    @Test
    public void testaddUser() {
        SqlSession sqlSession = MybatisUtils.getSqlSession();
        Mapper mapper = sqlSession.getMapper(Mapper.class);
        int rea = mapper.addUser(new User(6, "ccc", "15558"));
        if (rea > 0) {
            System.out.println("添加成功");
        }
    
        /**
         * 提交事务
         */
        sqlSession.commit();
    
        sqlSession.close();
    }
    

update

  1. 编写接口

    /**
     * 修改用户
     */
    int updateUser(User user);
    
  2. 编写SQL语句

    <update id="updateUser" parameterType="com.dang.pojo.User">
        update db01.user
        set name =#{name},pwd=#{pwd}
        where id=#{id};
    </update>
    
  3. 测试

    /**
     * 修改员工
     */
    @Test
    public void textUpdateUser() {
        SqlSession sqlSession = MybatisUtils.getSqlSession();
        Mapper mapper = sqlSession.getMapper(Mapper.class);
        mapper.updateUser(new User(6, "dang", "15586"));
        /**
         * 提交事务
         */
        sqlSession.commit();
    
        sqlSession.close();
    }
    

delete

  1. 编写接口

    /**
     * 删除一个用户
     */
    int deleteUser(int id);
    
  2. 编写SQL语句

    <delete id="deleteUser">
        delete from db01.user where id=#{id};
    </delete>
    
  3. 测试

     /**
      * 删除一个员工
      */
    @Test
     public void textDeleteUser(){
        SqlSession sqlSession = MybatisUtils.getSqlSession();
        Mapper mapper = sqlSession.getMapper(Mapper.class);
         mapper.deleteUser(6);
        /**
         * 提交事务
         */
        sqlSession.commit();
        sqlSession.close();
    }
    

Map

实体类或者数据库中的表,字段或者参数过多的情况下可以考虑使用Map!

/**
 * 使用map新增用户
 * @param map
 * @return
 */
int addUser2(Map<String, Object> map);
<insert id="addUser2" parameterType="map">
    insert into db01.user(id,name,pwd)values (#{userid},#{username},#{password});
</insert>
@Test
public void testaddUse2() {
    SqlSession sqlSession = MybatisUtils.getSqlSession();
    Mapper mapper = sqlSession.getMapper(Mapper.class);
    Map<String,Object > map=new HashMap<>();
    map.put("userid",7);
    map.put("username","daners");
    map.put("password","16544");
    mapper.addUser2(map);

    /**
     * 提交事务
     */
    sqlSession.commit();

    sqlSession.close();
}

Map传递参数,直接在sql中取出可以即可!

对象传递参数,直接在sql中取对象的属性即可!

只有一个基本类型参数的情况下,可以直接在sql中取到!

多个参数用Map或注解

模糊查询怎么写?
  1. java代码执行的时候,传递通配符%%
  2. 在sql拼接中使用通配符!

标签:Mapper,mapper,sqlSession,User,mybatis,id,user
From: https://www.cnblogs.com/dcners/p/17697613.html

相关文章