zoukankan      html  css  js  c++  java
  • Java学习之Mybatis框架基础篇

    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语句后,其他的只要会复制粘贴就行。

  • 相关阅读:
    【hibernate】常用注解
    【Maven】常用命令
    【Eclipse】安装配置
    【Eclipse】Spring Tool Suite插件
    【Git】远程分支
    【Git】本地分支
    日地拉格朗日L2点轨道的卫星运行
    SDK Manager的使用
    Appium Python API
    输入的中文,屏蔽软键盘
  • 原文地址:https://www.cnblogs.com/nice0e3/p/13575140.html
Copyright © 2011-2022 走看看