随笔 - 33,  文章 - 0,  评论 - 0,  阅读 - 8262

使用注解开发

面向接口编程:

之前学过面向对象编程,也学习过接口,真正开发中,很多时候会选择面向接口的编程。

根本原因:解耦

可拓展,提高复用,

分层开发中,上层不用管具体的实现

大家都遵守共同的标准,使得开发变得容易,规范性更好

在一个面向对象的系统中,系统的各种功能是由许许多多的不同对象协作完成的。在这种情况下,各个对象内部是如何实现自己的,对系统设计人员来说就不那么重要了;

而各个对象之间的协作关系则成为系统设计的关键。小到不同类之间的通信,大到各个模块之间的交互,在系统设计之初都是要着重考虑额,这也是系统设计的主要工作内容,面向接口编程就是指按照这种思想来编程。

 

关于接口的理解

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

接口本身反映了系统设计人员对系统的抽象理解。

接口应有两类:

第一类是对一个个体的抽象,它可对应为一个抽象体(abstract class)。

第二类是对一个个体某一方面的抽象,既形成一个抽象面(interface)

一个体有可能有很多个抽象面,抽象体与抽象面是有区别的。

三个面向的区别:

面向对象 我们考虑问题时,以对象为单位,考虑他的属性及方法

面向过程 我们考虑问题时,以一个具体的流程(事务过程)为单位,考虑它的实现。

接口设计与非接口设计是针对复用技术而言的,与面向对象(过程)不是一个问题,更多的体现是对系统整体的架构

使用注解开发

简单增删改查不用走mapper文件了

mapper接口

public interface UserMapper {
   @Select("select * from user")
   List<User> geiUsers();
}

mybatis-config.xml 必须使用类注册

//使用类注册    
<mappers>
       <mapper class="com.zy.dao.UserMapper"/>
   </mappers>

测试类

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

结果

User{id=1, name='zy', password='null'}
User{id=3, name='张六', password='null'}
User{id=4, name='王五', password='null'}
User{id=6, name='阿里', password='null'}
User{id=7, name='王三', password='null'}
User{id=9, name='李一', password='null'}

问题:无法进行映射 password

 

mybaitis执行流程剖析?

 

注解增删改查

我们可以在工具类创建的时候通过设置实现自动提交事务

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

openSession中参数设置为true;

 

增删改查

mapper接口

public interface UserMapper {
   @Select("select * from user")
   List<User> geiUsers();

   //若存在多个基本类型参数,则需要每个参数前面加@param
  /* User getUser(@Param("id") int id,@Param("name") String name );*/
   @Select("select * from user where id = #{id}")
   User getUserById(@Param("id") int id);
   @Insert("insert into user(id,name,psw) values(#{id},#{name},#{psw})")
   void addUser(@Param("id") int id,@Param("name") String name,@Param("psw") String password);
   @Update("update user set name=#{name},psw=#{password} where id = #{id}") //psw 在这里怎么映射password
   void update(User user);
   @Delete("delete from user where id=#{id}")
   void delUserById(@Param("id") int id);
}

测试类

public class ZhuJieTest {
   @Test
   public void getUsers(){
       SqlSession sqlSession = MybatisUntils.getSqlSession();
       UserMapper mapper = sqlSession.getMapper(UserMapper.class);
       List<User> userList = mapper.geiUsers();
       for (User user : userList) {
           System.out.println(user);
      }
       sqlSession.close();
  }
   @Test
   public void getUserById(){
       SqlSession sqlSession = MybatisUntils.getSqlSession();
       UserMapper mapper = sqlSession.getMapper(UserMapper.class);
       System.out.println(mapper.getUserById(1));
/*       sqlSession.commit();*/
       sqlSession.close();
  }
   @Test
   public void addUser(){
       SqlSession sqlSession = MybatisUntils.getSqlSession();
       UserMapper mapper = sqlSession.getMapper(UserMapper.class);
       mapper.addUser(10,"赵志伟","zzw970603");
       sqlSession.close();
  }
   @Test
   public void uodateUser(){
       SqlSession sqlSession = MybatisUntils.getSqlSession();
       UserMapper mapper = sqlSession.getMapper(UserMapper.class);
       User user = new User();
       user.setId(10);
       user.setName("杨一");

       mapper.update(user);
       sqlSession.close();
  }
   @Test
   public void delUser(){
       SqlSession sqlSession = MybatisUntils.getSqlSession();
       UserMapper mapper = sqlSession.getMapper(UserMapper.class);
       mapper.delUserById(10);
       sqlSession.close();
  }
}

 

@Param

基本类型参数或者String需要加Param

引用类型不需要加

在sql中引用的名称就是@param(“ ”)中的名称。

Lombok

Lombok项目是一个java库,它可以自动插入到编辑器和构建工具中,增强java的性能。不需要再写getter、setter或equals方法,只要有一个注解,你的类就有一个功能齐全的构建器、自动记录变量等等。

1、setting 插件 中 下载安装

2、在项目中导jar包使用

    <dependencies>
       <dependency>
           <groupId>org.projectlombok</groupId>
           <artifactId>lombok</artifactId>
           <version>RELEASE</version>
       </dependency>
   </dependencies>

 

3、使用

在实体类中加@Data后看structure中方法,发现会自动生成

@Data
@AllArgsConstructor //有参构造
@NoArgsConstructor //无参构造
@Alias("hello")
public class User {
   private int id;
   private String name;
   private String password; //数据库字段为 psw

}

缺点:

构造器不能重载

 

 

posted on   可惜君已逝i  阅读(43)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5
点击右上角即可分享
微信分享提示