JAVA mybatis操作mysql——批量增加,批量删除,多条件模糊搜索,新增时返回id和常用的增删查改

目录

1 Moven配置文件

2 mybatis.xml

3 实体类

4 SqlSessionUtils工具类 

5 UserMapper.xml文件 

6 UserMapper接口

7 UserMapperTest测试类 

8 表SQL文件 

9 项目结构 

10 将数据库配置从mybatis中抽离出来 

11 关系(一对一,一对多,多对多)

12 注解开发 

13 一级二级缓存


自己写个清单,比较基础但是也可能有不对的地方

1 Moven配置文件



    

        
            org.mybatis
            mybatis
            3.5.11
        
        
        
        
            mysql
            mysql-connector-java
            8.0.28
        
        
            junit
            junit
            RELEASE
            test
        
    

    
        
            
                src/main/java
                
                    **/*.properties
                    **/*.xml
                
                true
            
            
                src/main/resources
                
                    **/*.properties
                    **/*.xml
                
                true
            
        
    

2 mybatis.xml








    
        



            

            

                
                
                
                
            
        
    

    


        
    

3 实体类

User实体类

package com.learn.entity;

import java.util.Date;
import java.util.List;

public class User {
    private Integer id;
    private String username;// 用户姓名
    private String sex;// 性别
    private Date birthday;// 生日
    private String address;// 地址

    public User() {
    }

    public User(Integer id, String username, String sex, Date birthday, String address) {
        this.id = id;
        this.username = username;
        this.sex = sex;
        this.birthday = birthday;
        this.address = address;
    }

    /**
     * 获取
     * @return id
     */
    public Integer getId() {
        return id;
    }

    /**
     * 设置
     * @param id
     */
    public void setId(Integer id) {
        this.id = id;
    }

    /**
     * 获取
     * @return username
     */
    public String getUsername() {
        return username;
    }

    /**
     * 设置
     * @param username
     */
    public void setUsername(String username) {
        this.username = username;
    }

    /**
     * 获取
     * @return sex
     */
    public String getSex() {
        return sex;
    }

    /**
     * 设置
     * @param sex
     */
    public void setSex(String sex) {
        this.sex = sex;
    }

    /**
     * 获取
     * @return birthday
     */
    public Date getBirthday() {
        return birthday;
    }

    /**
     * 设置
     * @param birthday
     */
    public void setBirthday(Date birthday) {
        this.birthday = birthday;
    }

    /**
     * 获取
     * @return address
     */
    public String getAddress() {
        return address;
    }

    /**
     * 设置
     * @param address
     */
    public void setAddress(String address) {
        this.address = address;
    }

    public String toString() {
        return "User{id = " + id + ", username = " + username + ", sex = " + sex + ", birthday = " + birthday + ", address = " + address + "}";
    }

}

UserExt实体类

package com.learn.entity;

//如果传入的参数够多,可以将参数再包装一次
public class UserExt {
    private User user;
    private String characteristic;


    public UserExt() {
    }

    public UserExt(User user, String characteristic) {
        this.user = user;
        this.characteristic = characteristic;
    }

    /**
     * 获取
     * @return user
     */
    public User getUser() {
        return user;
    }

    /**
     * 设置
     * @param user
     */
    public void setUser(User user) {
        this.user = user;
    }

    /**
     * 获取
     * @return characteristic
     */
    public String getCharacteristic() {
        return characteristic;
    }

    /**
     * 设置
     * @param characteristic
     */
    public void setCharacteristic(String characteristic) {
        this.characteristic = characteristic;
    }

    public String toString() {
        return "UserExt{user = " + user + ", characteristic = " + characteristic + "}";
    }
}

4 SqlSessionUtils工具类 

package com.learn.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 SqlSessionUtils {
    static SqlSessionFactory sqlSessionFactory;

    static {

        String path = "mybatis.xml";
        InputStream ins = null;
        try {
            ins = Resources.getResourceAsStream(path);
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
        sqlSessionFactory = new SqlSessionFactoryBuilder().build(ins);
    }

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

    public static void closeSqlSes(SqlSession sqlSession) {
        if (sqlSession != null) {
            sqlSession.close();
        }
    }
}

5 UserMapper.xml文件 




    
    

    
    

    
    

    
    

    
    











    
    
    
        update user
        
            
                username=#{username},
            
            
                birthday=#{birthday},
            
            
                sex=#{sex},
            
            
                address=#{address}
            
        
        where id=#{id}
    

    
    
        insert into user(id, username, birthday, sex, address)
        values (#{id}, #{username}, #{birthday}, #{sex}, #{address})
        
        
            SELECT LAST_INSERT_ID()
        
    

    
    
        insert into user(id, username, birthday, sex, address)
        values
        
        
            (null, #{item.username}, #{item.birthday}, #{item.sex}, #{item.address})
        
    

    
    
        delete
        from user
        
            id = #{id}
        
    


    

6 UserMapper接口

package com.learn.mapper;

import com.learn.entity.User;
import com.learn.entity.UserExt;
import org.apache.ibatis.annotations.Param;

import java.util.List;

public interface UserMapper {
   //通过id查询
   User selectUserById(int userId);
   //通过性别和地址查询
   List selectUserBySexAndAddress(@Param("sex") String sex, @Param("address") String address);
   //通过用户名和性别模糊查询
   List selectUserByUserNameAndSexDim(@Param("username") String userName,@Param("sex") String sex);
   //通过传递包装类模糊查询
   List  selectUserBySexAndNameDim2(UserExt userExt);
   //查询所有
   List selectAll();
   //修改
   int updateUser(User user);
   //插入数据,返回插入id
   int insertUser(User user);
   //删除
   int removeUserById(int userId);
   //批量插入
   int insertMultitudeUser(List user);
   //批量删除
   int removeMultitudeUser(int[] userIdArr);

}

7 UserMapperTest测试类 

package com.learn.test;
import com.learn.entity.User;
import com.learn.entity.UserExt;
import com.learn.mapper.UserMapper;
import com.learn.utils.SqlSessionUtils;
import org.apache.ibatis.session.SqlSession;
import org.junit.AfterClass;
import org.junit.BeforeClass;
import org.junit.Test;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

public class UserMapperTest {
    static SqlSession session ;
    //在所有测试方法执行之前执行(只执行一次)
    @BeforeClass
    public static void init() {
        System.out.println("初始化完成!");
        session=SqlSessionUtils.getSqlSes();
    }
    //在所有测试方法执行完成之后执行(只执行一次)
    @AfterClass
    public static void end()
    {
        SqlSessionUtils.closeSqlSes(session);
    }
    @Test
    public void testSelectUserById() {
        UserMapper userMapper = session.getMapper(UserMapper.class);
        User user = userMapper.selectUserById(10);
        System.out.println("根据ID查询");
        System.out.println(user.toString());
    }

    @Test
    public void testSelectUserBySexAndAddress() {
        UserMapper userMapper = session.getMapper(UserMapper.class);
        userMapper.selectAll();
        List users = userMapper.selectUserBySexAndAddress("女","河南郑州");
        System.out.println("根据性别和地址查询");
        for (User user : users) {
            System.out.println(user.toString());
        }
    }

    @Test
    public void testselectUserByUserNameAndSexDim() {
        UserMapper userMapper = session.getMapper(UserMapper.class);
        List users = userMapper.selectUserByUserNameAndSexDim("孙","男");
        System.out.println("根据查询用户名和性别模糊查询");
        for (User user : users) {
            System.out.println(user.toString());
        }
    }
    @Test
    public void testselectUserBySexAndNameDim2() {
        UserMapper userMapper = session.getMapper(UserMapper.class);
        UserExt userExt=new UserExt(new User(null,"孙悟空","男",new Date(),"手机鞥"),"火");
        List users = userMapper.selectUserBySexAndNameDim2(userExt);
        System.out.println("通过传递包装类的方式根据查询用户名和性别模糊查询");
        users.forEach(System.out::println);
    }

    @Test
    public void testSelectAll()
    {
        UserMapper userMapper = session.getMapper(UserMapper.class);
        List users = userMapper.selectAll();
        System.out.println("查询所有数据");
        for (User user : users) {
            System.out.println(user.toString());
        }
    }

    @Test
    public void testUpdateUser()
    {
        UserMapper userMapper = session.getMapper(UserMapper.class);
        User user=new User();
        user.setId(30);
        user.setSex("男");
        user.setUsername("微微");
        user.setBirthday(new Date());
        int row = userMapper.updateUser(user);
        //注意事务提交
        session.commit();
        System.out.println("更新数据");
    }

    @Test
    public void testInsertUser()
    {
        UserMapper userMapper = session.getMapper(UserMapper.class);
        User user = new User();
        user.setSex("女");
        user.setUsername("梦鸽");
        user.setBirthday(new Date());
        System.out.println("插入数据:"+userMapper.insertUser(user)+"条");
        session.commit();
        //注意这里,只有插入完成后必须通过对象.属性才能获取到新增id值
        System.out.println("插入数据的id为:"+user.getId());
    }
    @Test
    public void testInsertMultitudeUser()
    {
        UserMapper userMapper = session.getMapper(UserMapper.class);
        List userList=new ArrayList<>();
        userList.add(new User(null,"分割","男",new Date(),"七彩祥云1号楼"));
        userList.add(new User(null,"茶几上的","男",new Date(),"七彩祥云2号楼"));
        userList.add(new User(null,"所开发的","男",new Date(),"七彩祥云3号楼"));
        userList.add(new User(null,"哦怕","男",new Date(),"七彩祥云4号楼"));
        userList.add(new User(null,"说的","男",new Date(),"七彩祥云5号楼"));
        int row=userMapper.insertMultitudeUser(userList);
        session.commit();
        System.out.println("批量插入数据:"+row+"条");
    }
    @Test
    public void testRemoveUserById()
    {
        UserMapper userMapper = session.getMapper(UserMapper.class);
        int row = userMapper.removeUserById(36);
        session.commit();
        System.out.println("删除数据:"+row+"条");
    }

    @Test
    public void testRemoveMultitudeUser()
    {
        List idArray = new ArrayList();
        idArray.add(30);
        idArray.add(31);
        idArray.add(32);
        UserMapper userMapper = session.getMapper(UserMapper.class);
        for (Integer integer : idArray) {
            userMapper.removeUserById(integer);
        }
        session.commit();
        System.out.println("删除数据"+idArray.size()+"条");
    }
}

JAVA mybatis操作mysql——批量增加,批量删除,多条件模糊搜索,新增时返回id和常用的增删查改_第1张图片

8 表SQL文件 



SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;

-- ----------------------------
-- Table structure for user
-- ----------------------------
DROP TABLE IF EXISTS `user`;
CREATE TABLE `user`  (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `username` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '用户名称',
  `birthday` date NULL DEFAULT NULL COMMENT '生日',
  `sex` char(1) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '性别',
  `address` varchar(256) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '地址',
  PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 48 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;

-- ----------------------------
-- Records of user
-- ----------------------------
INSERT INTO `user` VALUES (1, '盛世名', NULL, '2', NULL);
INSERT INTO `user` VALUES (10, '张三大牙', '2014-07-10', '女', '北京市');
INSERT INTO `user` VALUES (16, '张吉东', NULL, '女', '河南郑州');
INSERT INTO `user` VALUES (22, '孙训', NULL, '女', '河南郑州');
INSERT INTO `user` VALUES (24, '周芷若', NULL, '女', '河南郑州');
INSERT INTO `user` VALUES (28, '孙悟空', '2022-11-07', '男', '花果山1号');
INSERT INTO `user` VALUES (29, '孙悟空', '2022-11-07', '男', '花果山1号');
INSERT INTO `user` VALUES (33, '茶几上的', '2022-11-08', '男', '七彩祥云2号楼');
INSERT INTO `user` VALUES (34, '所开发的', '2022-11-08', '男', '七彩祥云3号楼');
INSERT INTO `user` VALUES (35, '哦怕', '2022-11-08', '男', '七彩祥云4号楼');
INSERT INTO `user` VALUES (37, '梦鸽', '2022-11-08', '女', NULL);
INSERT INTO `user` VALUES (38, '梦鸽', '2022-11-08', '女', NULL);
INSERT INTO `user` VALUES (39, '梦鸽', '2022-11-08', '女', NULL);
INSERT INTO `user` VALUES (41, '分割', '2022-11-08', '男', '七彩祥云1号楼');
INSERT INTO `user` VALUES (42, '茶几上的', '2022-11-08', '男', '七彩祥云2号楼');
INSERT INTO `user` VALUES (43, '所开发的', '2022-11-08', '男', '七彩祥云3号楼');
INSERT INTO `user` VALUES (44, '哦怕', '2022-11-08', '男', '七彩祥云4号楼');
INSERT INTO `user` VALUES (45, '说的', '2022-11-08', '男', '七彩祥云5号楼');
INSERT INTO `user` VALUES (47, '梦鸽', '2022-11-08', '女', NULL);

SET FOREIGN_KEY_CHECKS = 1;

9 项目结构 

JAVA mybatis操作mysql——批量增加,批量删除,多条件模糊搜索,新增时返回id和常用的增删查改_第2张图片

10 将数据库配置从mybatis中抽离出来 

在resources中新建一个db.properties配置文件

JAVA mybatis操作mysql——批量增加,批量删除,多条件模糊搜索,新增时返回id和常用的增删查改_第3张图片

 里面粘贴上如下代码

jdbc.driveClassName=com.mysql.cj.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/mybatis
jdbc.username=root
jdbc.password=abc123123123

然后替换原来的mybatis文件

注意两个地方

第1个是propeties标签的位置应该在environment标签之上

第2个地方是替换数据库驱动中的那些value的内容,使用美元加大括号的方式








    

    


    
        



            

            

                
                
                
                
            
        
    

    


        
    

11 关系(一对一,一对多,多对多)

UserMapperTwo.xml




    
    
        
        
        
        
        
        
            
            
            
            
            
        

    

    


    
        
        
        
        
        

        
            
            
            
            
        
    

    

UserMapperTwo.java

package com.learn.mapper;
import com.learn.entity.User;
import java.util.List;

public interface UserMapperTwo {
    List selectCartAndUser();

    List selectCartAndUser2();
}

UserMapperTwoTest.java

package com.learn.mapper;

import com.learn.entity.User;
import com.learn.utils.SqlSessionUtils;
import org.apache.ibatis.session.SqlSession;
import org.junit.AfterClass;
import org.junit.BeforeClass;
import org.junit.Test;

import java.util.List;

import static org.junit.Assert.*;

public class UserMapperTwoTest {
    static SqlSession session ;
    //在所有测试方法执行之前执行(只执行一次)
    @BeforeClass
    public static void init() {
        System.out.println("初始化完成!");
        session= SqlSessionUtils.getSqlSes();
    }
    //在所有测试方法执行完成之后执行(只执行一次)
    @AfterClass
    public static void end()
    {
        SqlSessionUtils.closeSqlSes(session);
    }
    @Test
    public void selectCartAndUser()
    {
        UserMapperTwo userMapper = session.getMapper(UserMapperTwo.class);
        List users = userMapper.selectCartAndUser();
        System.out.println("1对多");
        for (int i = 0; i < users.size(); i++) {
            System.out.println(users.get(i));
        }

    }

    @Test
    public void selectSelectCartAndUser2() {
        UserMapperTwo userMapper = session.getMapper(UserMapperTwo.class);
        List users = userMapper.selectCartAndUser2();
        System.out.println("1对1");
        for (int i = 0; i < users.size(); i++) {
            System.out.println(users.get(i));
        }

    }
}

 

12 注解开发 

UserMapperNotXml .java

package com.learn.mapper;
import com.learn.entity.User;
import org.apache.ibatis.annotations.Select;

public interface UserMapperNotXml {
    @Select("select * from user where id=#{id}")
    User selectUserById(int userId);
    
}

测试

package com.learn.mapper;

import com.learn.entity.User;
import com.learn.utils.SqlSessionUtils;
import org.apache.ibatis.session.SqlSession;
import org.junit.AfterClass;
import org.junit.BeforeClass;
import org.junit.Test;

import java.util.List;

import static org.junit.Assert.*;

public class UserMapperNotXmlTest {
    static SqlSession session ;
    //在所有测试方法执行之前执行(只执行一次)
    @BeforeClass
    public static void init() {
        System.out.println("初始化完成!");
        session= SqlSessionUtils.getSqlSes();
    }
    //在所有测试方法执行完成之后执行(只执行一次)
    @AfterClass
    public static void end()
    {
        SqlSessionUtils.closeSqlSes(session);
    }

    @Test
    public void TestselectUserById()
    {
        UserMapperNotXml userMapper = session.getMapper(UserMapperNotXml.class);
        User users = userMapper.selectUserById(10);
        System.out.println(users);
    }
}

 

13 一级二级缓存

一级

默认情况下,MyBatis 只开启一级缓存。

是sqlSession级别的缓存 缓存的结构是个Map集合

注意  由于 SqlSession 是相互隔离的,所以如果你使用不同的 SqlSession 对象,即使调用相同的 Mapper、参数和方法,MyBatis 还是会再次发送 SQL 到数据库执行,返回结果。

JAVA mybatis操作mysql——批量增加,批量删除,多条件模糊搜索,新增时返回id和常用的增删查改_第4张图片

二级

二级缓存是全局缓存,作用域超出 session 范围之外,可以被所有同一个namespace内的 SqlSession 共享。

打开二级缓存

在mybatis.xml中配置




    

    

    
        
    

    

使用

1 在对应的maper里增加

JAVA mybatis操作mysql——批量增加,批量删除,多条件模糊搜索,新增时返回id和常用的增删查改_第5张图片

 2 修改实体类

JAVA mybatis操作mysql——批量增加,批量删除,多条件模糊搜索,新增时返回id和常用的增删查改_第6张图片

3 测试

4 补充

局部不2级缓存 

JAVA mybatis操作mysql——批量增加,批量删除,多条件模糊搜索,新增时返回id和常用的增删查改_第7张图片

刷新2级缓存

JAVA mybatis操作mysql——批量增加,批量删除,多条件模糊搜索,新增时返回id和常用的增删查改_第8张图片

 

 

你可能感兴趣的:(java,mybatis,mysql,java)