Mybatis使用注解开发

lyz的自学笔记


一、使用注解开发

1、面向接口开发

在真正的开发中,很多时候会选择面向接口编程
根本原因:解耦可扩展,提高复用,分层开发中,上层不用管具体的实现,大家都遵守共同的标准,使得开发变得容易,规范性更好

1、关于接口的理解

  • 接口从更深层次的理解,应是定义(规范,约束)与实现(名实分离的原则)的分离

2、 接口应有两类:

  • 第一类是对一个个体的抽象,他可对应为一个抽象体
  • 第二类是对一个个体某一方面的抽象,即形成一个抽象面
  • 一个体有可能有多个抽象面,抽象体育抽象面是区别的

3、三个面向的区别

  • 面向对象:以对象为单位,考虑他的属性和方法
  • 面向过程:以一个具体的流程(事务过程)为单位,考虑它的实现
  • 接口设计与非接口设计是针对复用技术而言的,与面对象向(过程)不是一个问题,更多的体现就是对系统整体的架构

2、使用注解开发

(1)、配置接口UserMapper,在抽象方法上面使用注解

    @Select("select * from user")
    List<User> getUsers();

(2)、因为使用的是注解开发,也就不需要映射文件了,但还是需要去mybatis配置文件中注册

    <mappers>
        <mapper class="com.lyz.dao.UserMapper" />
    </mappers>

(3)、测试

    @Test
    public void Test(){
        SqlSession sqlSession = MybatisUtils.getSqlSession();
        UserMapper mapper = sqlSession.getMapper(UserMapper.class);
        List<User> users = mapper.getUsers();
        for (User user : users) {
            System.out.println(user);
        }
        sqlSession.close();
    }

(4)、结果,因为数据库字段名和实体类属性名不一致,导致免疫查询到password
在这里插入图片描述
使用注解来映射简单语句会使代码更加简洁,然而对于稍微复杂一点的语句,注解就力不从心了,并且显得更加混乱,所以如果要完成复杂的事情,最好使用XML类映射语句

3、Mybatis的执行流程

(1)创建SqlSessionFactoryBuilder实例
(2)解析配置文件流XMLConfigBuilder
(3)Configuration所有的配置信息
(4)SqlSessionFactory实例化
(5)transaction事务管理器
(6)创建executor执行器
(7)创建SqlSession
(8)实现CRUD,成功则继续下一步,不成功就会回滚
(9)查看是否成功,成功则继续,不成功就会回滚
(10)提交事务,并且关闭连接

4、使用注解实现CRUD

我们可以在工具类创建的时候设置自动提交,也就是在使用openSession()方法的时候给一个参数,值为true,但是真正开发的时候不要使用自动提交,不然可能会出现问题

例:查询
(1)修改Mybatis工具类

 public static SqlSession getSqlSession(){
        return sqlsessionfactory.openSession(true);
    }

(2)在接口中创建一个抽象方法(当方法中有多个基本数据类型的参数时,就必须使用@Param注解为参数起别名,那么在使用sql语句的时候参数使用的必须也是自己起的别名)

    @Select("select * from user where id=#{id} and name=#{name}")
    User getUserById(@Param("id") int id, @Param("name") String name);

(3)测试

    @Test
    public void Test1(){
        SqlSession sqlSession = MybatisUtils.getSqlSession();
        UserMapper mapper = sqlSession.getMapper(UserMapper.class);

        User par = mapper.getUserById(1, "张三");
        System.out.println(par);

        sqlSession.close();
    }

(4)结果
在这里插入图片描述

例:插入
(1)在接口中定义一个抽象方法,使用@Insert注解实现数据的插入

    @Insert("insert into user(id,name,pwd) values (#{id},#{name},#{password})")
    int addUser(User user);

(2)测试

    @Test
    public void addUser(){
        SqlSession sqlSession = MybatisUtils.getSqlSession();
        UserMapper mapper = sqlSession.getMapper(UserMapper.class);

        int i = mapper.addUser(new User(7,"hello","123456"));
        System.out.println(i);
        
        sqlSession.close();
    }

例:修改
(1)在接口中定义一个抽象方法

    @Update("update user set name=#{name},pwd=#{password} where id = #{id}")
    int updateUser(User user);

(2)测试

    @Test
    public void updateUser(){
        SqlSession sqlSession = MybatisUtils.getSqlSession();
        UserMapper mapper = sqlSession.getMapper(UserMapper.class);

        int i = mapper.updateUser(new User(7,"赵九","123456"));
        System.out.println(i);

        sqlSession.close();
    }

例:删除
(1)在接口中定义一个删除的抽象方法

    @Delete("delete from user where id = #{id}")
    int deleteUser(int id);

(2)测试

    @Test
    public void deleteUser(){
        SqlSession sqlSession = MybatisUtils.getSqlSession();
        UserMapper mapper = sqlSession.getMapper(UserMapper.class);

        int i = mapper.deleteUser(7);
        System.out.println(i);

        sqlSession.close();
    }

关于@Param()注解

  • 基本数据类型的参数或者String类型,需要加上(只有一个基本数据类型不用加)
  • 引用数据类型不需要加
  • 我们在SQL中引用的就是我们在@Param中设定的属性名
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值