zoukankan      html  css  js  c++  java
  • mybatis(面向接口编程、注解开发、@Param注解)

    1、面向接口编程

    (1)面向接口编程的优点

    解耦、可扩展、提高复用、分层开发中,上层不用管具体的实现,大家都遵循共同的标准,提高代码的规范性

    (2)对接口的理解

    定义(规范、约束)与实现的分离

    反映了设计人员对系统的抽象理解

    接口有两类:抽象体(对一个个体的抽象)和抽象面(对一个个体某一方面的抽象),一个个体可以有多个抽象面

    2、使用注解开发

    (1)接口:

      @Select("select * from student")
        List<Student> getStudents();

    (2)配置文件(核心配置文件,不用再对mapper.xml进行配置)

    <mappers>
        <mapper class="pers.zhb.mapper.StudentMapper"></mapper>
    </mappers>

    (3)测试:

        @Test
        public void testZhuJie(){
            SqlSession sqlSession= MybatisUtils.getSqlSession();
            StudentMapper studentMapper=sqlSession.getMapper(StudentMapper.class);
            List<Student> students=studentMapper.getStudents();
            for (Student student : students) {
                System.out.println(student);
            }
            sqlSession.close();
        }
    DEBUG [main] - Logging initialized using 'class org.apache.ibatis.logging.log4j.Log4jImpl' adapter.
    DEBUG [main] - Logging initialized using 'class org.apache.ibatis.logging.log4j.Log4jImpl' adapter.
    DEBUG [main] - PooledDataSource forcefully closed/removed all connections.
    DEBUG [main] - PooledDataSource forcefully closed/removed all connections.
    DEBUG [main] - PooledDataSource forcefully closed/removed all connections.
    DEBUG [main] - PooledDataSource forcefully closed/removed all connections.
    DEBUG [main] - Opening JDBC Connection
    DEBUG [main] - Created connection 249155636.
    DEBUG [main] - Setting autocommit to false on JDBC Connection [com.mysql.jdbc.JDBC4Connection@ed9d034]
    DEBUG [main] - ==>  Preparing: select * from student 
    DEBUG [main] - ==> Parameters: 
    DEBUG [main] - <==      Total: 11
    Student{studentno='201811', sname='zhai', sex='男', birthday='1998-11-11', classno='80501', point='890', phone='1234567890', email='null', clas=null}
    Student{studentno='201812', sname='zhai2', sex='男', birthday='1998-11-11', classno='80601', point='893', phone='19837372533', email='null', clas=null}
    Student{studentno='201813', sname='zhai3', sex='男', birthday='1998-11-11', classno='80501', point='892', phone='19837372534', email='null', clas=null}
    Student{studentno='201814', sname='zhai3', sex='男', birthday='1998-11-11', classno='80501', point='892', phone='19837372534', email='null', clas=null}
    Student{studentno='201815', sname='qwerr', sex='男', birthday='1998-11-11', classno='80501', point='892', phone='19837372534', email='null', clas=null}
    Student{studentno='201816', sname='jiayou', sex='男', birthday='1998-11-11', classno='80501', point='892', phone='19837372534', email='null', clas=null}
    Student{studentno='201817', sname='null', sex='null', birthday='null', classno='2', point='null', phone='null', email='null', clas=null}
    Student{studentno='201818', sname='null', sex='null', birthday='null', classno='2', point='null', phone='null', email='null', clas=null}
    Student{studentno='2', sname='2', sex='2', birthday='null', classno='null', point='null', phone='2', email='null', clas=null}
    Student{studentno='1', sname='1', sex='1', birthday='null', classno='null', point='null', phone='1', email='null', clas=null}
    Student{studentno='21', sname='21', sex='21', birthday='null', classno='null', point='null', phone='21', email='null', clas=null}
    DEBUG [main] - Resetting autocommit to true on JDBC Connection [com.mysql.jdbc.JDBC4Connection@ed9d034]
    DEBUG [main] - Closing JDBC Connection [com.mysql.jdbc.JDBC4Connection@ed9d034]
    DEBUG [main] - Returned connection 249155636 to pool.

    使用注解来映射简单语句会使代码显得更加简洁,但对于稍微复杂一点的语句,Java 注解不仅力不从心,还会让你本就复杂的 SQL 语句更加混乱不堪。 因此,如果你需要做一些很复杂的操作,最好用 XML 来映射语句。摘自:(https://mybatis.org/mybatis-3/zh/getting-started.html

    3、注解实现增删改查

    自动提交事务(mybatis工具类):

        public static SqlSession getSqlSession(){
            return sqlSessionFactory.openSession(true);//不需要手动提交
        }

    在使用注解的方式进行增删改查的操作的时候,不再需要对mapper.xml进行配置,只需要在核心配置文件中添加如下代码:

    <mappers>
        <mapper class="pers.zhb.mapper.StudentMapper"></mapper>
    </mappers>

    (1)查询:

      @Select("select * from student where studentno=#{id}")
        Student findStudentById(@Param("id") Integer studentno);
        @Test
        public void testZhuJie(){
            SqlSession sqlSession= MybatisUtils.getSqlSession();
            StudentMapper studentMapper=sqlSession.getMapper(StudentMapper.class);
            Student student=studentMapper.findStudentById(201816);
            System.out.println(student);
            sqlSession.close();
        }

    (2)添加:

      @Insert(" insert into student(studentno,sname,sex,phone) values (#{studentno},#{sname},#{sex},#{phone})")
        int addStudent(Student student);
     @Test
        public void testZhuJie(){
            SqlSession sqlSession= MybatisUtils.getSqlSession();
            StudentMapper studentMapper=sqlSession.getMapper(StudentMapper.class);
            Student student=new Student();
            student.setStudentno("20200426");
            student.setSname("tom");
            student.setSex("女");
            student.setPhone("12345678901");
            studentMapper.addStudent(student);
            sqlSession.close();
        }

    (3)修改:

        @Update("update student set phone=#{phone} where studentno=#{studentno}")
        int updateStudent(Student student);
        @Test
        public void testZhuJie(){
            SqlSession sqlSession= MybatisUtils.getSqlSession();
            StudentMapper studentMapper=sqlSession.getMapper(StudentMapper.class);
            Student student=new Student();
            student.setStudentno("20200426");
            student.setPhone("20191817161");
            studentMapper.updateStudent(student);
            sqlSession.close();
        }

     (4)删除:

     @Delete("delete from student where studentno=#{id}")
        int deleteStudent(@Param("id") Integer studentno);
        @Test
        public void testZhuJie(){
            SqlSession sqlSession= MybatisUtils.getSqlSession();
            StudentMapper studentMapper=sqlSession.getMapper(StudentMapper.class);
            studentMapper.deleteStudent(20200426);
            sqlSession.close();
        }

    与使用配置文件的方式相比,在增删改查的时候,使用注解的方式去除了对mapper.xml配置文件的配置,只需要对接口进行定义(在接口中书写注解),以及书写测试类。当然,二者都需要被核心配置文件引入。

    4、关于@Param注解

    (1)基本数据类型或者String类型,需要添加@Param

    (2)引用数据类型不需要

    (3)如果只有一个基本的数据类型的话,可以忽略

    (4)在SQL中引用的就是我们这里的@Param中设定的属性名

        @Select("select * from student where studentno=#{id}")
        Student findStudentById(@Param("id") Integer studentno);
  • 相关阅读:
    接口和抽象的区别
    接口
    jquery Ajax提交表单数据
    SQL 检查 是否存在 表 临时表
    ASP.NET MVC 设置Area中 Controller 的方法 默认启动页
    json 序列化为数组
    C# Lamda中类似于SQL 中的 In 功能
    各种webservice调用地址
    ASP.NET获取客户端IP地址
    C#反射机制 Type类型
  • 原文地址:https://www.cnblogs.com/zhai1997/p/12780477.html
Copyright © 2011-2022 走看看