• MyBatis高级 构建对象介绍


    SQL构建对象介绍

    我们之前通过注解开发时,相关的SQL语句都是自己拼写的。一些关键字写起来比较麻烦,而且容易出错

     MyBatis给我们提供了org.apache.ibatis.jdbc.SQL功能类,专门用于构建SQL语句

     sql包下 SqlTest

    package itheima.sql;
    
    
    import org.apache.ibatis.jdbc.SQL;
    
    public class SqlTest {
        public static void main(String[] args) {
            String sql=getSql();
            System.out.println(sql);
        }
        //定义一个方法
    //    public static String getSql(){
    //        String sql="select * from student";
    //        return sql;
    //    }
        public static String getSql(){
            String sql=new SQL(){
                {
                    SELECT("*");
                    FROM("student");
                }
    
            }.toString();
            return sql;
        }
    }
    

      查询操作

    定义功能类并提供获取查询SQL的方法。

    @SelectProvider:生成查询用的SQL语句注解

      type属性:生成SQL语句功能类对象

      method属性:指定调用方法

    ReturnSql方法

    package itheima.sql;
    
    import org.apache.ibatis.jdbc.SQL;
    
    public class ReturnSql {
        //定义方法,返回查询的sql语句
        public String getSelectAll(){
           return new SQL(){
                {
                    SELECT("*");
                    FROM("student");
                }
            }.toString();
        }
    }
    

      StudentMapper查询全部注解

    //查询全部
        @SelectProvider(type = ReturnSql.class,method = "getSelectAll")
        public abstract List<Student> selectAll();
    

     test包下Test01

    package itheima.test;
    
    import itheima.bean.Student;
    import itheima.mapper.StudentMapper;
    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.InputStream;
    import java.util.List;
    
    public class Test01 {
        @Test
        public void selectAll() throws Exception{
            //1.加载核心配置文件
            InputStream is = Resources.getResourceAsStream("MyBatisConfig.xml");
    
            //2.获取SqlSession工厂对象
            SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(is);
    
            //3.通过工厂对象获取SqlSession对象
            SqlSession sqlSession = sqlSessionFactory.openSession(true);
    
            //4.获取StudentMapper接口的实现类对象
            StudentMapper mapper = sqlSession.getMapper(StudentMapper.class);
    
            //5.调用实现类对象中的方法,接收结果
            List<Student> list = mapper.selectAll();
    
            //6.处理结果
            for (Student student : list) {
                System.out.println(student);
            }
    
            //7.释放资源
            sqlSession.close();
            is.close();
        }
    }
    

      结果如图

       新增操作

    定义功能类并提供获取新增的SQL语句的方法

    @InsertProvider:生成新增用的SQL语句注解

      type:生成SQL语句功能类对象

      method属性:指定调用方法

    ReturnSql中定义方法

       //定义方法,返回新增的sql语句
        public String getInsert(Student stu){
            return new SQL(){
                {
                    INSERT_INTO("Student");
                    INTO_VALUES("#{id},#{name},#{age}");
    
                }
            }.toString();
        }
    

      StudentMapper新增注解

     //新增操作
        //@Insert("insert into Student v alues(#{id},#{name},#{age})")
        @InsertProvider(type = ReturnSql.class,method = "getInsert")
        public abstract Integer insert(Student stu);
    

      Test01新增方法

      @Test
        public void insert() throws Exception{
            //1.加载核心配置文件
            InputStream is = Resources.getResourceAsStream("MyBatisConfig.xml");
    
            //2.获取SqlSession工厂对象
            SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(is);
    
            //3.通过工厂对象获取SqlSession对象
            SqlSession sqlSession = sqlSessionFactory.openSession(true);
    
            //4.获取StudentMapper接口的实现类对象
            StudentMapper mapper = sqlSession.getMapper(StudentMapper.class);
    
            //5.调用实现类对象中的方法,接收结果
            Student stu = new Student(9,"赵气",26);
            Integer result = mapper.insert(stu);
    
            //6.处理结果
            System.out.println(result);
    
            //7.释放资源
            sqlSession.close();
            is.close();
        }
    

      修改操作

    定义功能类并提供获取修改的SQL语句的方法

    @UpdateProvider:生成修改用的SQL语句注解

      type属性:生成SQL语句功能类对象

      method属性:指定调用方法

    ReturnSql

     //定义方法,返回修改的sql语句
        public String getUpdate(Student stu){
            return new SQL(){
                {
                    UPDATE("Student");
                    SET("name=#{name}","age=#{age}");
                    WHERE("id=#{id}");
                }
            }.toString();
        }
    

      StudentMapper

     //修改操作
        //@Update("update Student set name=#{name},age=#{age} where id=#{id}")
        @UpdateProvider(type = ReturnSql.class,method = "getUpdate")
        public abstract Integer update(Student stu);
    

      Test01

     @Test
        public void update() throws Exception{
            //1.加载核心配置文件
            InputStream is = Resources.getResourceAsStream("MyBatisConfig.xml");
    
            //2.获取SqlSession工厂对象
            SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(is);
    
            //3.通过工厂对象获取SqlSession对象
            SqlSession sqlSession = sqlSessionFactory.openSession(true);
    
            //4.获取StudentMapper接口的实现类对象
            StudentMapper mapper = sqlSession.getMapper(StudentMapper.class);
    
            //5.调用实现类对象中的方法,接收结果
            Student stu = new Student(9,"赵爸",26);
            Integer result = mapper.update(stu);
    
            //6.处理结果
            System.out.println(result);
    
            //7.释放资源
            sqlSession.close();
            is.close();
        }
    

      删除操作

    定义功能类并提供获取删除的SQL语句的方法

    @DeleteProvider:生成删除用的SQL语句注解

      type:生成SQL语句功能类对象

      method属性:指定调用方法

    ReturnSQL

     //定义方法,返回删除的sql语句
        public String getDelete(Integer id){
            return new SQL(){
                {
                   DELETE_FROM("Student");
                   WHERE("id=#{id}");
                }
            }.toString();
        }
    

      StudentMapper

     //删除操作
        //@Delete("delete from Student where id=#{id}")
        @DeleteProvider(type = ReturnSql.class,method = "getDelete")
        public abstract Integer delete(Integer id);
    

      Test01

     @Test
        public void delete() throws Exception{
            //1.加载核心配置文件
            InputStream is = Resources.getResourceAsStream("MyBatisConfig.xml");
    
            //2.获取SqlSession工厂对象
            SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(is);
    
            //3.通过工厂对象获取SqlSession对象
            SqlSession sqlSession = sqlSessionFactory.openSession(true);
    
            //4.获取StudentMapper接口的实现类对象
            StudentMapper mapper = sqlSession.getMapper(StudentMapper.class);
    
            //5.调用实现类对象中的方法,接收结果
    
            Integer result = mapper.delete(9);
    
            //6.处理结果
            System.out.println(result);
    
            //7.释放资源
            sqlSession.close();
            is.close();
        }
    

      构建SQL语句小结

    org.apache.ibatis.jdbc.SQLL:构建SQL语句的功能类。通过一些方法来代替SQL关键字。

      SELECT()

      FROM()

      WHERE()

      INSERT_INTO()

      VALUES()

      UPDATE()

      DELETE_FROM()

     @SelectProvider:生成查询用的SQL语句注解

     @InsertProvider:生成新增用的SQL注解

     @UpdateProvider:生成修改用的SQL注解

     @DeleteProvider:生成删除用的SQL注解

      type属性:生成SQL语句功能类对象

      method属性:指定调用方法

  • 相关阅读:
    项目总结60:Springboot集成swagger2
    ELK学习01:ELK安装
    Java深入学习16:NIO详解2-Selector
    Java深入学习15:NIO详解1-基本概念、Buffer、Channel
    Java深入学习14:Java线程池
    Java深入学习13:synchronized在静态方法和非静态方法下的同步
    Java深入学习12:线程按目标顺序执行以及Lock锁和Condiiton接口
    项目总结59:Redis分布式锁解决电商订单库存并发问题
    Java深入学习11:Lock锁详解
    Java深入学习09:URL类使用和判断图片资源是否有效
  • 原文地址:https://www.cnblogs.com/faded8679/p/14828874.html
Copyright © 2020-2023  润新知