Mybatis增删改查(CURD)操作

6 篇文章 0 订阅
4 篇文章 0 订阅
本文介绍了MyBatis作为持久层框架的主要功能,包括支持定制化SQL、存储过程和高级映射。通过简单的XML或注解配置,MyBatis可以将Java POJOs映射到数据库记录,避免手动处理JDBC代码。文章提到了在IDEA中导入MyBatis的依赖,并展示了如何进行TbHotel表的增删改查操作,涉及mybatis.cfg.xml配置文件和hotel.mapper.xml映射文件的设置。
摘要由CSDN通过智能技术生成

Mybatis实现数据的增删改查

什么是 MyBatis ?

MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以使用简单的 XML 或注解来配置和映射原生信息,将接口和 Java 的 POJOs(Plain Old Java Objects,普通的 Java对象)映射成数据库中的记录。
源于Mybatis官方网站点>>这里<<进入官网

如果使用IDEA工具需要导入相关依赖

<dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.12</version>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>org.mybatis</groupId>
      <artifactId>mybatis</artifactId>
      <version>3.4.6</version>
    </dependency>
    <dependency>
      <groupId>mysql</groupId>
      <artifactId>mysql-connector-java</artifactId>
      <version>5.1.46</version>
    </dependency>
  </dependencies>

对一个TbHotel表的CRUD操作

package com.kmyang.mybatis.beans;


public class TbHotel {

  private int hotelId;
  private String hotelName;
  private String hotelImage;
  private TbHotelType hotelType;


  public TbHotelType getHotelType() {
    return hotelType;
  }

  public void setHotelType(TbHotelType hotelType) {
    this.hotelType = hotelType;
  }

  public int getHotelId() {
    return hotelId;
  }

  public void setHotelId(int hotelId) {
    this.hotelId = hotelId;
  }


  public String getHotelName() {
    return hotelName;
  }

  public void setHotelName(String hotelName) {
    this.hotelName = hotelName;
  }


  public String getHotelImage() {
    return hotelImage;
  }

  public void setHotelImage(String hotelImage) {
    this.hotelImage = hotelImage;
  }

}

在Src目录下建一个mybatis的xml核心配置文件mybatis.cfg.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>
    <!--加载属性文件-->
    <properties resource="jdbc.properties"/>
    <!--数据库配置,default表示默认采用哪一个数据库环境-->
    <environments default="development">
        <!--生产环境数据库-->
        <environment id="product">
            <!--使用JDBC事务管理,事务控制由mybatis-->
            <transactionManager type="JDBC"/>
            <!--连接池配置,type为POOLED采用连接池-->
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://localhost:3306/test?useSSL=TRUE"/>
                <property name="username" value="root"/>
                <property name="password" value="admin1806"/>
            </dataSource>
        </environment>
        <!--开发环境数据库-->
        <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="mapper/hotel.mapper.xml"/>
    </mappers>
</configuration>

采用development方式则需要配置jdbc.properties文件

driver=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/test?useSSL=TRUE
username=root
password=admin1806

定义hotel mappers的hotel.mapper.xml配置文件,配置文件实现了接口和SQL语句的映射关系。采用resultMap可以把属性和数据库列名映射关系定义好,property为类的属性,column是表的列名,也可以是表列名的别名

<?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 命名空间,类似包名,起到的作用作用跟其他文件中的配置隔离-->
<!--命名空间需要是唯一的-->
<!--规范:项目的Bean文件的包名+Bean类名+Mapper单词,比如:com.qianfeng.mybatis.beans.TbHotelMapper-->
<mapper namespace="com.kmyang.project.hotel.beans.TbHotelMapper">

    <!--结果集映射-->
    <!--id是唯一标识,type是要映射的Java对象的地址-->
    <resultMap id="hotelResultMap" type="com.kmyang.project.hotel.beans.TbHotel">
        <id column="hotel_id" property="hotelId" javaType="java.lang.Integer"/>
        <result column="hotel_img" property="hotelImg" javaType="java.lang.String"/>
        <result column="hotel_name" property="hotelName" javaType="java.lang.String"/>
        <result column="hotel_tel" property="hotelTel" javaType="java.lang.String"/>
        <result column="hotel_star" property="hotelStar" javaType="java.lang.String"/>
    </resultMap>

    <!--在当前namespace中id唯一-->
    <!--根据ID查询单个属性值-->
    <select id="queryHotelInfoById" resultType="java.lang.String">
        select hotel_name from tb_hotel where hotel_id = 1;
    </select>

    <!--在当前namespace中id唯一-->
    <!--查询所有酒店名称-->
    <select id="queryHotelNameList" resultType="java.lang.String">
        select hotel_name from tb_hotel;
    </select>

    <!--resultMap关联结果映射配置-->
    <!--根据Id查询该酒店的所有信息-->
    <select id="queryHotelById" resultMap="hotelResultMap">
        select hotel_id, hotel_name, hotel_tel, hotel_star, hotel_img from tb_hotel where hotel_id = 2;
    </select>

    <!--查询酒店信息总条数-->
    <select id="queryCount" resultType="java.lang.Integer">
        select count(hotel_id) from tb_hotel;
    </select>

    <!--酒店列表一页显示四条数据-->
    <select id="queryHotelByPage" resultMap="hotelResultMap">
        select hotel_id, hotel_tel, hotel_star, hotel_img, hotel_name from tb_hotel limit #{page}, #{pageSize};
    </select>

    <!--添加酒店相关信息-->
    <insert id="save">
        insert into tb_hotel(hotel_name, hotel_tel, hotel_star, hotel_img) value (#{hotelName}, #{hotelTel}, #{hotelStar}, #{hotelImg});
    </insert>

    <!--根据ID删除酒店信息-->
    <delete id="remove" parameterType="java.lang.String">
        delete from tb_hotel where hotel_id = 11;
    </delete>

    <!--根据酒店ID修改酒店信息-->
    <update id="update" parameterType="java.lang.String">
        update tb_hotel set hotel_name = '乔家大酒店' where hotel_id = 9;
    </update>
    
    <!--#与$的区别,#防止spl注入攻击,安全性更高-->
    <select id="checkHotelName" resultType="java.lang.String">
        select hotel_name from tb_hotel where hotel_id = ${id};
    </select>
    <!--<select id="checkHotelName" resultType="java.lang.String">-->
        <!--select hotel_name from tb_hotel where hotel_id = #{id};-->
    <!--</select>-->
</mapper>

这里直接开始测试

package com.kmyang.project.mybatis;

import com.kmyang.project.hotel.beans.TbHotel;
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 org.junit.Test;

import java.io.IOException;
import java.io.InputStream;
import java.util.HashMap;
import java.util.List;

/**
 * @Auther: DELL
 * @Date: 2018/12/25 17:11
 * @Description: Mybatis相关功能测试
 */
public class MybatisTest {
    
    @Test
    /**
     * 功能描述: 根据ID查询单个属性值
     * @auther: kmyang
     * @date: 2018/12/25
     */
    public void testCaseOne(){
        try {
            InputStream inputStream = Resources.getResourceAsStream("mybatis.cfg.xml");
            //初始化MyBatis
            SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
            SqlSession sqlSession = sqlSessionFactory.openSession();
            String hotelName = sqlSession.selectOne("com.kmyang.project.hotel.beans.TbHotelMapper.queryHotelInfoById");
            System.out.println(hotelName);
            sqlSession.close();
            inputStream.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
   
    /**
     * 功能描述: 查询所有酒店名称
     * @auther: kmyang
     * @date: 2018/12/25 
     */
    @Test
    public void testCaseTwo(){
        try {
            InputStream inputStream = Resources.getResourceAsStream("mybatis.cfg.xml");
            //初始化mybatis
            SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
            SqlSession sqlSession = sqlSessionFactory.openSession();
            List<Object> hotelNameList = sqlSession.selectList("com.kmyang.project.hotel.beans.TbHotelMapper.queryHotelNameList");
            System.out.println(hotelNameList);
            sqlSession.close();
            inputStream.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    /**
     * 功能描述: 根据Id查询该酒店的所有信息
     * @auther: DELL
     * @date: 2018/12/25
     */
    @Test
    public void testCaseThree(){
        try {
            InputStream inputStream = Resources.getResourceAsStream("mybatis.cfg.xml");
            //初始化mybatis
            SqlSessionFactory build = new SqlSessionFactoryBuilder().build(inputStream);
            SqlSession session = build.openSession();
            TbHotel hotel = session.selectOne("com.kmyang.project.hotel.beans.TbHotelMapper.queryHotelById");
            System.out.println(hotel.toString());
            session.close();
            inputStream.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    /**
     * 功能描述: 查询酒店信息总条数
     * @auther: kmyang
     * @date: 2018/12/25
     */
    @Test
    public void testCaseFour(){
        try {
            InputStream inputStream = Resources.getResourceAsStream("mybatis.cfg.xml");
            //初始化mybatis
            SqlSessionFactory build = new SqlSessionFactoryBuilder().build(inputStream);
            SqlSession sqlSession = build.openSession();
            Integer count = sqlSession.selectOne("com.kmyang.project.hotel.beans.TbHotelMapper.queryCount");
            System.out.println(count);
            sqlSession.close();
            inputStream.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    /**
     * 功能描述: 酒店列表一页显示四条数据
     * @auther: kmyang
     * @date: 2018/12/25
     */
    @Test
    public void testCaseFive(){
        try {
            InputStream inputStream = Resources.getResourceAsStream("mybatis.cfg.xml");
            //初始化mybatis
            SqlSessionFactory build = new SqlSessionFactoryBuilder().build(inputStream);
            SqlSession sqlSession = build.openSession();
            //传参
            HashMap<String, Object> hashMap = new HashMap<String, Object>();
            //key需要和mybatis映射文件中的#(index)单词一致
            hashMap.put("page", 0);
            hashMap.put("pageSize", 4);
            List<TbHotel> hotels = sqlSession.selectList("com.kmyang.project.hotel.beans.TbHotelMapper.queryHotelByPage", hashMap);
            System.out.println(hotels);
            sqlSession.close();
            inputStream.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    /**
     * 功能描述: 添加酒店相关信息
     * @auther: kmyang
     * @date: 2018/12/25
     */
    @Test
    public void testCaseSix(){
        try {
            InputStream inputStream = Resources.getResourceAsStream("mybatis.cfg.xml");
            //初始化mybatis
            SqlSessionFactory build = new SqlSessionFactoryBuilder().build(inputStream);
            SqlSession sqlSession = build.openSession();
            TbHotel hotel = new TbHotel();
            hotel.setHotelName("武汉大酒店");
            hotel.setHotelTel("13345621325");
            hotel.setHotelStar("三星级");
//            for (int i = 0; i < 5000000; i++) {
//                hotel.setHotelName("武汉大酒店");
//                hotel.setHotelTel("10" + i);
//                hotel.setHotelStar("三星级");
//                int a = sqlSession.insert("com.kmyang.project.hotel.beans.TbHotelMapper.save", hotel);
//            }
            //开启事务,mybatis已默认开启
            int i = sqlSession.insert("com.kmyang.project.hotel.beans.TbHotelMapper.save", hotel);
            //提交事务,需要手动提交
            sqlSession.commit();
//            System.out.println(i);
            sqlSession.close();
            inputStream.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    /**
     * 功能描述: 根据ID删除酒店信息
     * @auther: kmyang
     * @date: 2018/12/26
     */
    @Test
    public void testCaseServen(){
        try {
            InputStream inputStream = Resources.getResourceAsStream("mybatis.cfg.xml");
            //初始化mybatis
            SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
            SqlSession session = sessionFactory.openSession();
            int i = session.delete("com.kmyang.project.hotel.beans.TbHotelMapper.remove");
            session.commit();
            System.out.println(i);
            session.close();
            inputStream.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    /**
     * 功能描述: 根据酒店ID修改酒店信息
     * @auther: kmyang
     * @date: 2018/12/26
     */
    @Test
    public void testCaseEight(){
        try {
            InputStream inputStream = Resources.getResourceAsStream("mybatis.cfg.xml");
            //初始化mybatis
            SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
            SqlSession session = sessionFactory.openSession();
            int i = session.update("com.kmyang.project.hotel.beans.TbHotelMapper.update");
            System.out.println(i);
            session.commit();
            session.close();
            inputStream.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    /**
     * 功能描述: #与$的区别,#防止spl注入攻击,安全性更高
     * @auther: kmyang
     * @date: 2018/12/25
     */
    @Test
    public void testCaseNine(){
        try {
            InputStream inputStream = Resources.getResourceAsStream("mybatis.cfg.xml");
            //初始化mybatis
            SqlSessionFactory build = new SqlSessionFactoryBuilder().build(inputStream);
            SqlSession sqlSession = build.openSession();
            HashMap<String, Object> hashMap = new HashMap<String, Object>();
            hashMap.put("id", "111 or 1=1");
            List<Object> list = sqlSession.selectList("com.kmyang.project.hotel.beans.TbHotelMapper.checkHotelName", hashMap);
            System.out.println(list);
            sqlSession.close();
            inputStream.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
QueryWrapper是MyBatis-Plus提供的一个通用的查询条件封装类,它可以帮助我们构建查询的条件。使用QueryWrapper可以方便地进行增删改查操作。 增加操作:可以使用QueryWrapper的lambda表达式来构建插入的条件,例如: ```java User user = new User(); user.setName("张三"); user.setAge(20); QueryWrapper<User> queryWrapper = new QueryWrapper<>(); queryWrapper.lambda().eq(User::getName, "张三"); userService.save(user); ``` 这段代码中,我们创建了一个新的User对象,并设置了name和age属性的值。然后使用QueryWrapper的lambda表达式eq方法来设置查询条件,这里我们要求查询name等于"张三"的数据。最后,调用userService的save方法来插入数据。 删除操作:可以使用QueryWrapper的lambda表达式来构建删除的条件,例如: ```java QueryWrapper<User> queryWrapper = new QueryWrapper<>(); queryWrapper.lambda().eq(User::getName, "张三"); userService.remove(queryWrapper); ``` 这段代码中,我们创建了一个QueryWrapper对象,并使用lambda表达式eq方法来设置删除条件,这里要求删除name等于"张三"的数据。最后,调用userService的remove方法来执行删除操作。 修改操作:可以使用QueryWrapper的lambda表达式来构建修改的条件,例如: ```java User user = new User(); user.setAge(25); QueryWrapper<User> queryWrapper = new QueryWrapper<>(); queryWrapper.lambda().eq(User::getName, "张三"); userService.update(user, queryWrapper); ``` 这段代码中,我们创建了一个新的User对象,并设置了age属性的值。然后使用QueryWrapper的lambda表达式eq方法来设置修改条件,这里要求修改name等于"张三"的数据。最后,调用userService的update方法来执行修改操作。 查询操作:可以使用QueryWrapper的lambda表达式来构建查询的条件,例如: ```java QueryWrapper<User> queryWrapper = new QueryWrapper<>(); queryWrapper.lambda().eq(User::getName, "张三"); List<User> userList = userService.list(queryWrapper); ``` 这段代码中,我们创建了一个QueryWrapper对象,并使用lambda表达式eq方法来设置查询条件,这里要求查询name等于"张三"的数据。最后,调用userService的list方法来执行查询操作。 综上所述,QueryWrapper是一个非常方便的工具类,可以帮助我们简化增删改查操作的代码编写。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [解决myBatis中删除条件的拼接问题](https://download.csdn.net/download/weixin_38618784/14831585)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* *3* [LambdaQueryWrapper&QueryWrapper增删改CURD使用教程案例](https://blog.csdn.net/m0_59252007/article/details/121267361)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值