mybatis实现数据库的增删查改

mybatis框架封装了jdbc的各种操作,极大的简化了对数据库的操纵。接下来用具体案例实现数据库的增删查改。项目及配置可以看我之前的文章mybatis基础mapper代理开发

项目结构及配置文件

建立如下的目录结构,并将xml配置好,可以看我之前的文章参考。新建数据库并创建表。
在这里插入图片描述
建立如下的配置文件
在这里插入图片描述
如上图两个映射类对应数据库表的两个表
在这里插入图片描述
xml的文件:(两个都要配置namespace,id,resultType,sql语句做修改)

<?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="mapper.UserMapper">    <!--不用mapper代理为路径不能随便命名-->

    <select id="selectAll" resultType="pojo.User">
        select * from tb_user;
    </select>

</mapper>

要注意的三点使namespace,用mapper代理不能随便命名,要用映射类所在路径命名,如UserMapper类在mapper下,所以命名为mapper.UserMapper,resultType是返回的数据类型,为javabean的类。其他的映射类道理相同。

映射接口的内容:(两个映射接口)

package mapper;

import pojo.User;

import java.util.List;

public interface UserMapper {
    List<User> selectAll();

}

要注意的有三点,默认的修饰词使public、注意返回值的数据类型、查询的一行的数据类型使一个list元素、selectAll()是配置文件的id,同时也是一个方法调用xml中配置的sql语句。其他的映射类也是如此。

还要创建pojo的软件包用于编写,两个数据库表的javabean对象。
在这里插入图片描述

最后就是配置mybatis-config.xml可以看我之前的文章。要注意的最后的mappers标签要加载所有的映射对象的xml配置文件(注意路径在mapper下)。放在resources中和mapper同级。也可以直接把包加载进来
在这里插入图片描述

还有就是pom.xml看之前的文章。

mybatis增加数据

在对应的映射对象的配置文件xml中写入,标签和sql的语法一致。

 <!--添加语句,主键返回添加时一般无法获取当前添加的id需要设置 useGeneratedKeys="true" keyProperty="id"这两个属性就可以获取当前id了-->
    <insert id="addOneColumn" useGeneratedKeys="true" keyProperty="id" parameterType="pojo.Brand">
        insert into tb_brand(brand_name,company_name,ordered,description,status)
        values (#{brand_name},#{company_name},#{ordered},#{description},#{status})
    </insert>

#{}是占位符用于替换参数,参数来源于addOneColumn方法。其在映射类中和 List selectAll()在同一接口中;,如下


void addOneColumn(Brand brand);  //数据库添加一行数据

这里插入传递的参数是一个javabean对象,需要在xml的insert标签中加入parameterType属性,其值是javabean所在的路径。也可以是其他类型,如list,map等,详情可以去官网查看。

mybatis删除数据

xml的配置

  <!--删除-->
    <delete id="deleteById">
        delete from tb_brand where id=#{id}
    </delete>

映射类的方法

    //删除操作
    void deleteById(int id);

mybatis查找数据

   <select id="selectById" resultType="pojo.Brand">
        select * from tb_brand where id=#{id};
    </select>
 //根据id查询
    List<Brand> selectById(int id);

mybatis修改数据

    <!--修改-->

    <update id="updateOne">
        update tb_brand
        set
            brand_name=#{brand_name},
            company_name=#{company_name},
            ordered=#{ordered},
            description=#{description},
            status=#{status}
        where id=#{id}
    </update>
   //修改操作
    void updateOne(Brand brand);

动态sql

对于上面的操作要实现针对某个字段而不是全部需要适应mybatis提供的内置标签代替关键字,如修改是只对某个字段修改其他不变:

    <!--某一字段的修改动态更新不用set关键字,1是容易出现多一个逗号,2是没有数据set多余,用mybatis提供的<set>标签-->
    <update id="updateTwo">
        update tb_brand
        <set>
        <if test="brand_name!=null and brand_name!='' ">brand_name=#{brand_name},</if>

        <if test="company_name!=null and company_name!=''">company_name=#{company_name},</if>

        <if test="ordered!=null and ordered !='' ">ordered=#{ordered},</if>

        <if test="ordered !=null and ordered !='' ">description=#{description},</if>

        <if test="status !=null ">status=#{status}</if>
        </set>

        where id=#{id}
    </update>

用标签替换了原本的set关键字,用标签进行判断选择要修改的字段。详情可见mybatis官网:mybatis动态sql

调用增删查改函数

上面已经编辑和配置好了函数和文件,接下来编写测试类MybatisDemo

package mybatis;

import mapper.UserMapper;
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 pojo.User;

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

public class MybatisDemo {
    public static void main(String[] args) throws IOException{
        //从 XML 文件中构建 SqlSessionFactory 的实例
        String resource = "mybatis-config.xml";
        InputStream inputStream = null;

        inputStream = Resources.getResourceAsStream(resource);

        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);

        //从 SqlSessionFactory 中获取 SqlSession
        SqlSession session = sqlSessionFactory.openSession();


        //执行sql
        //List<User> users=session.selectList("test.selectAll");
        //System.out.println(users);

        //后者不用直接执行sql而使用mapper代理开发
            //获取UserMapper接口的代理对象

        UserMapper userMapper=session.getMapper(UserMapper.class);   //获取映射对象的类
        
 
        
		//调用方法实现增删改查(处了查,其他都没有返回值,可以自定义boolean类型判断,这里没有返回值)
		
		//增(增加的一整行,所以传递的一个javabean对象,先封装对象){ordered},#{description},#{status})
		Brand brand =new Brand();
		brand.setBrand_name("淘宝");
		brand.setCompany_name("阿里巴巴");
		brand.setOrdered("30");
		brand.setDescription("阿里巴巴已由一家电子商务公司彻底蜕变为以技术驱动,包含数字商业、金融科技、智慧物流、云计算、人地关系文化娱乐等场景的平台,服务数以亿计的消费者和数千万的中小企业。");
		brand.setStatus(0);
		void userMapper.addOneColumn(brand);

		//删(删除的sql是传递id删除一整行)
		void userMapper.deleteById(3);

		//查(sql语句写的是根据id查所有,有返回值用List存储)
		  List<Brand>  users =userMapper.selectById(1);
		  System.out.println(users);

		//改(上面sql语句是根据id将一行所有数据修改,也封装在对象中)
		Brand brand1 =new Brand()
		brand.setBrand_name("淘宝");
		brand.setCompany_name("阿里巴巴");
		brand.setOrdered("30");
		brand.setDescription("阿里巴巴已由一家电子商务公司彻底蜕变为以技术驱动,包含数字商业、金融科技、智慧物流、云计算、人地关系文化娱乐等场景的平台,服务数以亿计的消费者和数千万的中小企业。");
		brand.setStatus(1);
		brand.setId(1);
		void userMapper.updateOne(brand1);
		
        //释放资源
        session.close();


    }
}

要注意的增删改的操作要提交:session.commit();

mybatis的参数传递:
多个不同类型的参数:将参数封装为map集合,并通过param注解更改key的名称,其值就是参数的值。当只有一个参数时就不用了。

POJO的参数类型:可以直接使用,对象的属性名和参数占位符保持一致即可

Map集合 :map的键和参数占位符一致也直接使用。

array,list当数据类型都要加。

上面的都是在xml中配置sql语句通过mapper调用或通过id调用,下面时通过注解定义sql语句,注解比配置文件更简单,不用配置任何xml文件,但是注解只能完成一些简单的sql语句,复杂的任要用xml配置文件
增删改查
@Insert
@Delete
@Update
@Select

//在mapper下的类中定义注解的sql
@Select(“select * from tb_brand where id = #{id}”)
List selet_by_id(int id);

//测试类中调用:
//获取参数
int id=3;
List user1=brandMapper.selet_by_id(id);
System.out.println(user1);
list要加上泛型,<> 中间是javabean对象,由于显示不出来,上面的就都没有。

  • 1
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

xvwen

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值