mybatis(面向接口编程注解开发@Param注解)

Posted Dream

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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);

 

以上是关于mybatis(面向接口编程注解开发@Param注解)的主要内容,如果未能解决你的问题,请参考以下文章

MyBatis注解开发及 Lombok

MyBatis——使用注解开发

MyBatis入门学习

MyBatis动态传参

ORM框架-MyBatis使用经验总结

2021-08-13-Mybatis学习笔记