前言
我們早就見過注解了,隻不過那時候我們不了解他。
關于注解首先引入官方文檔的一句話:Java 注解用于為 Java 代碼提供中繼資料。
作為中繼資料,注解不直接影響你的代碼執行,但也有一些類型的注解實際上可以用于這一目的。
Java 注解是從 Java5 開始添加到 Java 的
這個是我們見過最多的
@Override 它是用來描述目前方法是一個重寫的方法,在編譯階段對方法進行檢查 jdk1.5中它隻能描述繼承中的重寫,jdk1.6中它可以描述接口實作的重寫,也能描述類的繼承的重寫
至于java中的注解是怎樣的這個需要自己去了解,今天我們學在mybatis中是用注解開發。
使用注解CRUD
檢視示範
我們隻需要在接口中寫好的方法上面添加好相對應的注解名字,在裡面寫上需要的sql語句。這樣我們就不需要寫相對應的.xml檔案了。
@Select({"select * from user"})
List<User> getUserList();
最重要的一點是我們要在核心配置檔案mybatis-config.xml中的映射集中添加接口映射。
<mappers>
<mapper class="aw.dao.UserMapper"/>
</mappers>
測試類,測試類還是和以前的樣式一樣
public void test(){
SqlSession sqlSession = MybatisUtils.getSqlSession();
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
List<User> 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();
}
lombok的使用
首先是我們需要對呀進行一個了解
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進行安裝
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.16</version>
<scope>provided</scope>
</dependency>
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){}
}