我们早就见过注解了,只不过那时候我们不了解他。
关于注解首先引入官方文档的一句话:Java 注解用于为 Java 代码提供元数据。
作为元数据,注解不直接影响你的代码执行,但也有一些类型的注解实际上可以用于这一目的。
Java 注解是从 Java5 开始添加到 Java 的
这个是我们见过最多的
@Override 它是用来描述当前方法是一个重写的方法,在编译阶段对方法进行检查 jdk1.5中它只能描述继承中的重写,jdk1.6中它可以描述接口实现的重写,也能描述类的继承的重写
至于java中的注解是怎样的这个需要自己去了解,今天我们学在mybatis中是用注解开发。
查看演示
我们只需要在接口中写好的方法上面添加好相对应的注解名字,在里面写上需要的sql语句。这样我们就不需要写相对应的.xml文件了。
@Select({"select * from user"})
List getUserList();
最重要的一点是我们要在核心配置文件mybatis-config.xml中的映射集中添加接口映射。
测试类,测试类还是和以前的样式一样
public void test(){
SqlSession sqlSession = MybatisUtils.getSqlSession();
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
List userList = mapper.getUserList();
for (User user : userList) {
System.out.println(user);
}
sqlSession.close();
}
添加
同样我们还是在接口中在方法上面添加好相对应的sql语句
@Insert({"insert into user(id,username,password) value(#{id},#{username},#{password})"})
int getAdd(User user);
测试类,我们这里的没有进行提交事务那是因为我们在获取连接的时候就已经自动提交了事务。传递参数为true时就是开启了自动提交事务。
public static SqlSession getSqlSession(){
return sqlSessionFactory.openSession(true);
}
public void test(){
SqlSession sqlSession = MybatisUtils.getSqlSession();
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
int i = mapper.getAdd(new User(5, "ss", "ss"));
if (i>0){
System.out.println("执行成功");
}
sqlSession.close();
}
修改
步骤和前面的一样,只不过是注解的名字换了
@Update({"update user set username=#{username},password=#{password} where id=#{id}"})
int getUpdate(User user);
测试类
public void test(){
SqlSession sqlSession = MybatisUtils.getSqlSession();
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
int i = mapper.getUpdate(new User(4, "aaa", "aaa"));
if (i>0){
System.out.println("执行成功");
}
sqlSession.close();
}
删除
同样和前面的事务一样,这里要注意一点那就是参数如果是基本类型或String类型我们多需要在参数前面添加参数注解,一个参数的时候可添加也可不添加,所以我们要在传递参数前面添加**@Param()**注解,注解里面的参数是和上面注解中的sql语句中的参数相对应的。
@Delete({"delete from user where id=#{ids}"})
int getDelete(@Param("ids") int id);
测试类
public void test(){
SqlSession sqlSession = MybatisUtils.getSqlSession();
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
int i = mapper.getDelete(5);
if (i>0){
System.out.println("执行成功");
}
sqlSession.close();
}
首先是我们需要对呀进行一个了解
Project Lombok is a java library that automatically plugs into your editor and build tools, spicing up your java.
Never write another getter or equals method again, with one annotation your class has a fully featured builder, Automate your logging variables, and much more.
这是lombok官网的原话
projectlombok是一个java库,它可以自动插入到编辑器和构建工具中,提高java的效率。
永远不要再编写另一个getter或equals方法,使用一个注释,您的类有一个功能齐全的生成器,自动记录变量,等等。
使用他有两种方式
1使用maven进行安装
org.projectlombok
lombok
1.18.16
provided
2.在 idea的setting中添加lombok插件
1、@Data:在JavaBean中使用,注解包含包含getter、setter、NoArgsConstructor注解
@Value注解和@Data类似,区别在于它会把所有成员变量默认定义为private final修饰,并且不会生成set方法
2、@getter:在JavaBean中使用,注解会生成对应的getter方法
3、@setter:在JavaBean中使用,注解会生成对应的setter方法
4、@NoArgsConstructor:在JavaBean中使用,注解会生成对应的无参构造方法
5、@AllArgsConstructor:在JavaBean中使用,注解会生成对应的有参构造方法
@RequiredArgsConstructor :生成private构造方法,使用staticName选项生成指定名称的static方法。
6、@ToString:在JavaBean中使用,注解会自动重写对应的toStirng方法
@ToString(exclude={"column1","column2"}):排除多个column列所对应的元素
@ToString(of={"column1","column2"}):只生成包含多个column列所对应的元素
7、@EqualsAndHashCode:在JavaBean中使用,注解会自动重写对应的equals方法和hashCode方法
8、@Slf4j:在需要打印日志的类中使用,项目中使用slf4j日志框架
9、@Log4j:在需要打印日志的类中使用,项目中使用log4j日志框架
10、@NonNull:注解快速判断是否为空,为空抛出java.lang.NullPointerException
11、@Synchronized:注解自动添加到同步机制,生成的代码并不是直接锁方法,而是锁代码块, 作用范围是方法上
12、@Cleanup:注解用于确保已分配的资源被释放(IO的连接关闭)
************************************************重点线***************************************************
13、@Accessors(chain = true):链式风格,在调用set方法时,返回这个类的实例对象
14、@RequiredArgsContructor(staticName = "of"):生成一个静态方法,用于构建本类对象,与@NonNull联用,指定那些属性是本方法参数
15、@Builder:构建者模式
16、@Delegate:代理模式
我们只需要记住几个常用的就行
@Data、@getter、@setter、@NoArgsConstructor、@AllArgsConstructor、@ToString、@EqualsAndHashCode
其他的用到是去产看文档就行。
使用方法
lombok也有很多的弊端,我们要明白他的优缺点合理利用他。
比如他的构造方法 我们还可以单独写不同构造。
package aw.pojo;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@AllArgsConstructor
@NoArgsConstructor
public class User {
private int id;
private String username;
private String password;
//这里我们还可以写单独的构造方法
public User(int id){}
}