注解开发.
1、面向接口编程.
根本原因:
- 解耦,可扩展,提高代码复用,分层开发中、上层不用管具体实现,大家都遵守的共同标准,使得开发变的更容易,规范性更好
- 理想的系统设计规范:定义与实现分离
关于接口的理解
接口从更深层次的理解,应是定义(规范,约束)与实现(名实分离的原则)的分离。
接口的本身反映了系统设计人员对系统的抽象理解。
接口应有两类:
- 第一类是对一个个体的抽象,它可对应为一个抽象体(abstract class);
- 第二类是对一个个体某一方面的抽象,即形成一个抽象面(interface);
一个体有可能有多个抽象面。抽象体与抽象面是有区别的。
2、注解使用(CRUD).
目录结构
可以在工具类中设置自动提交事务
//MyBatisUtils.java 中新增 //返回 sqlsession对象 参数为true 自动提交 public static SqlSession getSqlSession(boolean autoCommit){ return sqlSessionFactory.openSession(autoCommit); }
编写接口,及注解
public interface UserMapper { //获取 用户列表 @Select("select * from mybatis.user") List<User> getUserList(); //增加用户 @Insert("insert into mybatis.user(id,name,pwd) value(#{id},#{name},#{pwd})") int addUser(User user); //修改用户密码 @Update("update mybatis.user set pwd=#{password} where id=#{id}") int updateUserPwd(@Param("id") int id,@Param("password") String pwd); //删除用户 @Delete("delete from mybatis.user where id=#{id}") int deleteUser(int id); }
需要在核心配置文件中绑定接口
<mappers> <mapper class="dao.UserMapper"/> </mappers>
测试
代码省略 与之前相同
本质:反射机制实现
底层:动态代理
3、关于@Param().
- 基本类型的参数或者String类型,需要加上
- 引用类型不用加
- 如果只有一个基本类型,可以忽略,推荐加上
- 在Sql中引用的是@Param()中自定义的参数名
4、Lombok(团队开发不建议).
一个Java库,它会自动插入编辑器和构建工具中,Lombok提供了一组有用的注释,用来消除Java类中的大量样板代码
加上这个插件,就不用写getter和setter。。。 – 用于偷懒
使用
- 引入相应的maven包
<!-- https://mvnrepository.com/artifact/org.projectlombok/lombok --> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>1.18.12</version> <scope>provided</scope> </dependency>
安装插件(IDEA)
了解常用注解:
@Setter :注解在类或字段,注解在类时为所有字段生成setter方法,注解在字段上时只为该字段生成setter方法。
@Getter :使用方法同上,区别在于生成的是getter方法。
@ToString :注解在类,添加toString方法。
@EqualsAndHashCode: 注解在类,生成hashCode和equals方法。
@NoArgsConstructor: 注解在类,生成无参的构造方法。
@RequiredArgsConstructor: 注解在类,为类中需要特殊处理的字段生成构造方法,比如final和被@NonNull注解的字段。
@AllArgsConstructor: 注解在类,生成包含类中所有字段的构造方法。
@Data: 注解在类,生成setter/getter、equals、canEqual、hashCode、toString方法,如为final属性,则不会为该属性生成setter方法。
@Slf4j: 注解在类,生成log变量,严格意义来说是常量。使用注解