Java学习之Mybatis框架基础篇

0x00前言续上篇文章的入门篇,继续markMybatis内容,上一章节只是写了Mybatis的一个简单查询功能,这篇来写他的删改查等其他操作。0x01Mybatis增加大法添加的操作和查

大家好,又见面了,我是全栈君,祝每个程序员都可以多学几门语言。

0x00 前言

续上篇文章的入门篇,继续mark Mybatis内容,上一章节只是写了Mybatis的一个简单查询功能,这篇来写他的删改查等其他操作。

0x01 Mybatis增加大法

添加的操作和查询的其实都差别不大,修改一下映射文件,然后从查询的基础上修改一下,就成了增加的功能了,具体看代码:

<?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.test.dao.Userdao">

    <select id="findAll" resultType="com.test.domain.User">
        select * from user
    </select>
    <insert id="SaveUser" parameterType="com.test.domain.User">
    insert into user(name,address,gender,age,qq,email,username,password) values(#{name},#{address},#{gender},#{age},#{qq},#{email},#{username},#{password})
    </insert >

</mapper>

从select标签下面,增加一个insert 标签。

test类:

package com.test;
import com.test.dao.Userdao;
import com.test.domain.User;
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.List;

public class mybatistest {
        @Test
        public void selecttest()throws Exception{
//    public static void main(String[] args) {
        //1.读取配置文件
        InputStream in = Resources.getResourceAsStream("mapconfig.xml");
        //2.创建SqlSessionFactory工厂
        SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
        SqlSessionFactory factory = builder.build(in);
        //3.使用工厂生产SqlSession对象
        SqlSession session = factory.openSession();
        //4.使用SqlSession创建Dao接口的代理对象
        Userdao userDao = session.getMapper(Userdao.class);
        //5.使用代理对象执行方法
        List<User> users = userDao.findAll();
        for(User user : users){
            System.out.println(user.toString());
        }
        //6.释放资源
        session.close();
        in.close();
    }
    @Test
    public void Savetest() throws IOException {
        User user = new User();
        user.setName("nice");
        user.setAge(20);
        user.setGender("男");
        user.setAddress("gd");
        user.setQq("2548266145");
        user.setEmail("2548266145@qq.com");
        user.setUsername("nice0e3");
        user.setPassword("nize");


        InputStream in = Resources.getResourceAsStream("mapconfig.xml");
        //2.创建SqlSessionFactory工厂
        SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
        SqlSessionFactory factory = builder.build(in);
        //3.使用工厂生产SqlSession对象
        SqlSession session = factory.openSession();
        //4.使用SqlSession创建Dao接口的代理对象
        Userdao userDao = session.getMapper(Userdao.class);
        userDao.SaveUser(user); //调用SaveUser方法参数user对象
        session.commit();//提交事务
    }
}

在这里面分别有2个方法,一个是查询,一个是添加。虽然说功能完成了,但是这里可以看到前面的一些代码都是重复的,我们可以直接把他重复的代码封装起来,想要执行某一个功能的时候直接调用就可以了。

package com.test;


import com.test.dao.Userdao;
import com.test.domain.User;
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.After;
import org.junit.Before;
import org.junit.Test;


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

public class mybatistest {
    private InputStream in;
    private SqlSessionFactoryBuilder builder;
    private Userdao userDao;
    private SqlSession session;
    private SqlSessionFactory factory;
    private User user = new User();

    @Before  //被注解后在测试方法执行前会执行
    public void init() throws IOException {


        in = Resources.getResourceAsStream("mapconfig.xml");

        builder = new SqlSessionFactoryBuilder();
        factory = builder.build(in);

         session = factory.openSession();
         session.commit();//提交事务

        userDao = session.getMapper(Userdao.class);
    }

        @Test
        public void selecttest()throws Exception{
//    public static void main(String[] args) {
        //1.读取配置文件

        //5.使用代理对象执行方法
        List<User> users = userDao.findAll();
        for(User user : users){
            System.out.println(user.toString());
        }
        //6.释放资源

    }


    @Test
    public void Savetest() throws IOException {

        user.setName("nice");
        user.setAge(20);
        user.setGender("男");
        user.setAddress("gd");
        user.setQq("2548266145");
        user.setEmail("2548266145@qq.com");
        user.setUsername("nice0e3");
        user.setPassword("nize");

        userDao.SaveUser(user);



    }

    public void Update(){
        

    }
    @After  //测试方法执行后执行
    public void destroy() throws IOException {
        session.close();
        in.close();
    }

}


把配置的信息放正在init方法里面,运行时候自动运行,进行赋值。

关闭资源的放到destroy方法里面,关闭的时候自动执行关闭资源。

封装完成后,我们的Savetest的方法除了设置值外,其实也就一行代码就完成了改功能。

调试好了前面的后面的就好写了,基本上就是复制粘贴。

0x02 Mybatis修改大法

前面的框架大体定义好后,在来写个修改的操作。

userdao接口添加updata方法:

void UpdataUser(User user);

映射文件添加updata标签:

    <update id="UpdataUser" parameterType="com.test.domain.User">
        update user set username = #{username},address=#{address},age=#{age} where id=#{id}

    </update>

基于上面的代码添加一个方法:

@Test
    public void Update(){
        user.setUsername("nnicee0e3");
        user.setAddress("dgd");
        user.setAge(18);
        user.setId(8);
        userDao.UpdataUser(user);
    }

运行后内容成功被修改。

0x03 Mybatis delete大法

至于删除的操作就更简单了。

userdao接口中添加一个方法:

 void deleteUser(Integer id);

映射文件添加delete标签:

    <delete id="deleteUser" parameterType="Integer">
        delete from user where id = #{id}
    </delete>

test类里面依旧复制粘贴一下代码:

@Test
    public void delete() {

        userDao.deleteUser(6);
    }

0x04 Mybatis 查询单条信息

一如既往的接口添加方法:

List<User> findone(Integer id);

一如既往的添加映射文件内容:

<select id="findone" resultType="com.test.domain.User" parameterType="int">

        select * from user where id =#{id}
    </select>

一如既往的test类里面调用方法:

    @Test
    public void findone(){
        List<User> findone = userDao.findone(1);
        System.out.println(findone.toString());
    }

0x05 Mybatis 模糊查询大法

接口添加方法:

  List<User> findlike(String name);

添加映射文件内容:

<select id="findlike" resultType="com.test.domain.User" parameterType="string">
        select * from user where name like  #{name}

    </select>

test类里面调用方法:

    @Test
    public void findlike(){
        List<User> ming = userDao.findlike("%xiao%");
        for (User user1 : ming) {
            System.out.println(user1);
        }

    }

0x06 结尾

只要会用了基本的增删改查和定义sql语句后,其他的只要会复制粘贴就行。

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

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/119931.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Protel99se基本教程 Protel 99SE从零开始学习教程视频教程「建议收藏」

    Protel99se基本教程 Protel 99SE从零开始学习教程视频教程「建议收藏」Protel如何从零开始学习?找个有实例的书,或有原理图,有PCB的书,把他画好,先从单面板画起,(找个简单的)自己再热转印法制作PCB,钻孔、焊接元件、调试等等,看似后面与学PROTEL无关,但这些可以让你对PCB布线有更深认识,比如、元件封装尺寸一定要精确、焊盘大小、走线粗细、元件布局放置等等,更能总结好的画图经验!更接近实际应用,这样才能掌握画图的乐趣,当我自己布的PCB的发射机,可以用收音…

    2022年5月7日
    89
  • 使用AWS迁移工具MGN迁移腾讯云到AWS「建议收藏」

    使用AWS迁移工具MGN迁移腾讯云到AWS「建议收藏」使用AWS迁移工具MGN迁移腾讯云服务器到AWS环境准备:OS:Centos7.9×64源端和目标端安全组都需要开通TCP443、1500端口1、创建设置模板2、安装Agent(源服务器)下载地址:https://aws-application-migration-service-<region>.s3.<region>.amazonaws.com/latest/linux/aws-replication-installer-init.py替换<r

    2022年10月5日
    3
  • ipset iptables_怎么把黑名单变白名单

    ipset iptables_怎么把黑名单变白名单使用ipset设置iptables(黑/白)名单一、ipset原理ipset是iptables的扩展,它允许你创建匹配整个地址集合的规则。而不像iptables只能匹配单个ip,避免维护的ip条目过多导致速度变慢,而ip集合存储在带索引的数据结构中,这种结构即时集合比较大也可以进行高效的查找,除了一些常用的情况,比如阻止一些危险主机访问本机,从而减少系统资源占用或网络拥塞,IPsets也具备一些新防火墙设计方法,并简化了配置。二、ipset安装1、ipset工具安装yum…

    2022年9月1日
    6
  • java fel api_Java表达式计算-Fel

    java fel api_Java表达式计算-FelFel 是支持表达式计算的一个库 java Fel 支持解释执行和编译执行 可以根据性能要求选择执行方式 下面给出示例和性能测试数据 packagedatag importjava util Random importcom greenpineyu fel Expression importcom greenpineyu fel FelEngine importcom greenpi

    2025年9月15日
    4
  • 约分最简分式(python)

    约分最简分式(python)约分最简分式分数可以表示为分子 分母的形式 编写一个程序 要求用户输入一个分数 然后将其约分为最简分式 最简分式是指分子和分母不具有可以约分的成分了 如 6 12 可以被约分为 1 2 当分子大于分母时 不需要表达为整数又分数的形式 即 11 8 还是 11 8 而当分子分母相等时 仍然表达为 1 1 的分数形式 输入格式 输入在一行中给出一个分数 分子和分母中间以斜杠 分隔 如 12 34 表示 34 分之 12 分子和分母都是自然数 不包含 0 如果不清楚自然数的普世定义的话 提示 在 split

    2025年10月12日
    5
  • Typora教程(附安装包)「建议收藏」

    Typora教程(附安装包)「建议收藏」Typora安装包:链接:https://pan.baidu.com/s/14fTQQmPQmf08pi833RT6Cg提取码:j712复制这段内容后打开百度网盘手机App,操作更方便哦

    2022年5月19日
    48

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号