mybatis实现数据库的增删查改

得意时要看淡,失意时要看开。不论得意失意,切莫大意;不论成功失败,切莫止步。志得意满时,需要的是淡然,给自己留一条退路;失意落魄时,需要的是泰然,给自己觅一条出路mybatis实现数据库的增删查改,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com,来源:原文

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对象,由于显示不出来,上面的就都没有。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/156330.html

(0)
飞熊的头像飞熊bm

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!