📒 程式員小王的博客:程式員小王的博客
🎉 歡迎點贊 👍 收藏 ?留言 📝
😊 如有編輯錯誤聯系作者,如果有比較好的文章歡迎分享給我,我會取其精華去其糟粕
🍅java自學的學習路線:java自學的學習路線
一、EasyCode和Lombok插件的安裝
1、在idea中下載EasyCode插件
Easycode是idea的一個插件,可以直接對資料的表生成 entity(物體類層)、controller(控制層)、service(業務層)、dao(dao層)、mapper(mapper檔案) 無需任何編碼,簡單而強大 ,懶人必備呀!

- 安裝成功后設定作者名

2、LomBok插件的安裝
Lombok能通過注解的方式,在編譯時自動為物體類中的屬性生成構造器、getter/setter、equals、hashcode、toString方法 ,效果是在原始碼中沒有getter和setter方法,但是在編譯生成的位元組碼檔案中有getter和setter方法,

二、EasyCode的使用
1、使用easyCode需要idea鏈接資料庫
- 選擇mysql資料庫

- 設定賬戶的用戶密碼和資料庫

- 測驗鏈接下載驅動

- 測驗成功可以鏈接

- 鏈接成功后

2、使用easyCode自動生成代碼
- 右擊資料庫表=》選EasyCode=》選擇GenerateCode

- 選擇entity(物體類層)、controller(控制層)、service(業務層)、dao(dao層)、mapper(mapper檔案)

- 自動生成結構,并且控制層滿足restFul風格

3、自動生成的Controller層
/**
* (TAdmin)表控制層
*
* @author 程式員小王
* @since 2021-12-26 21:07:13
*/
@RestController
@RequestMapping("tAdmin")
public class TAdminController {
/**
* 服務物件
*/
@Resource
private TAdminService tAdminService;
/**
* 通過主鍵查詢單條資料
*
* @param id 主鍵
* @return 單條資料
*/
@GetMapping("{id}")
public ResponseEntity<TAdmin> queryById(@PathVariable("id") Integer id) {
return ResponseEntity.ok(this.tAdminService.queryById(id));
}
/**
* 新增資料
*
* @param tAdmin 物體
* @return 新增結果
*/
@PostMapping
public ResponseEntity<TAdmin> add(TAdmin tAdmin) {
return ResponseEntity.ok(this.tAdminService.insert(tAdmin));
}
/**
* 編輯資料
*
* @param tAdmin 物體
* @return 編輯結果
*/
@PutMapping
public ResponseEntity<TAdmin> edit(TAdmin tAdmin) {
return ResponseEntity.ok(this.tAdminService.update(tAdmin));
}
/**
* 洗掉資料
*
* @param id 主鍵
* @return 洗掉是否成功
*/
@DeleteMapping
public ResponseEntity<Boolean> deleteById(Integer id) {
return ResponseEntity.ok(this.tAdminService.deleteById(id));
}
}
4、自動生成的mapper檔案
<mapper namespace="com.tjcu.dao.TAdminDao">
<resultMap type="com.tjcu.entity.TAdmin" id="TAdminMap">
<result property="id" column="id" jdbcType="INTEGER"/>
<result property="username" column="username" jdbcType="VARCHAR"/>
<result property="password" column="password" jdbcType="VARCHAR"/>
<result property="name" column="name" jdbcType="VARCHAR"/>
<result property="sex" column="sex" jdbcType="VARCHAR"/>
</resultMap>
<!--查詢單個-->
<select id="queryById" resultMap="TAdminMap">
select
id, username, password, name, sex
from t_admin
where id = #{id}
</select>
<!--查詢指定行資料-->
<select id="queryAllByLimit" resultMap="TAdminMap">
select
id, username, password, name, sex
from t_admin
<where>
<if test="id != null">
and id = #{id}
</if>
<if test="username != null and username != ''">
and username = #{username}
</if>
<if test="password != null and password != ''">
and password = #{password}
</if>
<if test="name != null and name != ''">
and name = #{name}
</if>
<if test="sex != null and sex != ''">
and sex = #{sex}
</if>
</where>
limit #{pageable.offset}, #{pageable.pageSize}
</select>
<!--統計總行數-->
<select id="count" resultType="java.lang.Long">
select count(1)
from t_admin
<where>
<if test="id != null">
and id = #{id}
</if>
<if test="username != null and username != ''">
and username = #{username}
</if>
<if test="password != null and password != ''">
and password = #{password}
</if>
<if test="name != null and name != ''">
and name = #{name}
</if>
<if test="sex != null and sex != ''">
and sex = #{sex}
</if>
</where>
</select>
<!--新增所有列-->
<insert id="insert" keyProperty="id" useGeneratedKeys="true">
insert into t_admin(username, password, name, sex)
values (#{username}, #{password}, #{name}, #{sex})
</insert>
<insert id="insertBatch" keyProperty="id" useGeneratedKeys="true">
insert into t_admin(username, password, name, sex)
values
<foreach collection="entities" item="entity" separator=",">
(#{entity.username}, #{entity.password}, #{entity.name}, #{entity.sex})
</foreach>
</insert>
<insert id="insertOrUpdateBatch" keyProperty="id" useGeneratedKeys="true">
insert into t_admin(username, password, name, sex)
values
<foreach collection="entities" item="entity" separator=",">
(#{entity.username}, #{entity.password}, #{entity.name}, #{entity.sex})
</foreach>
on duplicate key update
username = values(username),
password = values(password),
name = values(name),
sex = values(sex)
</insert>
<!--通過主鍵修改資料-->
<update id="update">
update t_admin
<set>
<if test="username != null and username != ''">
username = #{username},
</if>
<if test="password != null and password != ''">
password = #{password},
</if>
<if test="name != null and name != ''">
name = #{name},
</if>
<if test="sex != null and sex != ''">
sex = #{sex},
</if>
</set>
where id = #{id}
</update>
<!--通過主鍵洗掉-->
<delete id="deleteById">
delete from t_admin where id = #{id}
</delete>
</mapper>
5、自動生成的dao層
**
* (TAdmin)表資料庫訪問層
*
* @author 程式員小王
* @since 2021-12-26 21:07:15
*/
public interface TAdminDao {
/**
* 通過ID查詢單條資料
*
* @param id 主鍵
* @return 實體物件
*/
TAdmin queryById(Integer id);
/**
* 統計總行數
*
* @param tAdmin 查詢條件
* @return 總行數
*/
long count(TAdmin tAdmin);
/**
* 新增資料
*
* @param tAdmin 實體物件
* @return 影響行數
*/
int insert(TAdmin tAdmin);
/**
* 批量新增資料(MyBatis原生foreach方法)
*
* @param entities List<TAdmin> 實體物件串列
* @return 影響行數
*/
int insertBatch(@Param("entities") List<TAdmin> entities);
/**
* 批量新增或按主鍵更新資料(MyBatis原生foreach方法)
*
* @param entities List<TAdmin> 實體物件串列
* @return 影響行數
* @throws org.springframework.jdbc.BadSqlGrammarException 入參是空List的時候會拋SQL陳述句錯誤的例外,請自行校驗入參
*/
int insertOrUpdateBatch(@Param("entities") List<TAdmin> entities);
/**
* 修改資料
*
* @param tAdmin 實體物件
* @return 影響行數
*/
int update(TAdmin tAdmin);
/**
* 通過主鍵洗掉資料
*
* @param id 主鍵
* @return 影響行數
*/
int deleteById(Integer id);
}
6、自動生成的業務層
/**
* (TAdmin)表服務實作類
*
* @author 程式員小王
* @since 2021-12-26 21:07:18
*/
@Service("tAdminService")
public class TAdminServiceImpl implements TAdminService {
@Resource
private TAdminDao tAdminDao;
/**
* 通過ID查詢單條資料
*
* @param id 主鍵
* @return 實體物件
*/
@Override
public TAdmin queryById(Integer id) {
return this.tAdminDao.queryById(id);
}
/**
* 新增資料
*
* @param tAdmin 實體物件
* @return 實體物件
*/
@Override
public TAdmin insert(TAdmin tAdmin) {
this.tAdminDao.insert(tAdmin);
return tAdmin;
}
/**
* 修改資料
*
* @param tAdmin 實體物件
* @return 實體物件
*/
@Override
public TAdmin update(TAdmin tAdmin) {
this.tAdminDao.update(tAdmin);
return this.queryById(tAdmin.getId());
}
/**
* 通過主鍵洗掉資料
*
* @param id 主鍵
* @return 是否成功
*/
@Override
public boolean deleteById(Integer id) {
return this.tAdminDao.deleteById(id) > 0;
}
}
7、訪問資料庫
- 資料庫資料

- 前端訪問資料庫

三、LomBok插件使用
1、LomBok解決的問題及缺點
(1)優點
lombok主要解決物體類層的get,set方法,構造器,例外處理;I/O流的關閉操作等等,這些代碼沒有什么技術含量,又影響著代碼的美觀,Lombok插件接收解決這些問題的
(2)缺點
但是企業開發中有些公司不使用lomBok,因為只要有一個人使用了lombok,整個專案組都需要使用lombok
2、Lombok的使用
(1)SpringBoot和IDEA官方有推薦使用
- Idea已經內置了LomBok插件
- SpringBoot2.1x之后的版本已經內置了LomBok的相關依賴
(2)引入相關的依賴
<!--lombok的相關依賴-->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.16.18</version>
<scope>provided</scope>
</dependency>
注意:Lombok的scope=provided,說明它只在編譯階段生效,不需要打入包中,事實正是如此,Lombok在編譯期將帶Lombok注解的Java檔案正確編譯為完整的Class檔案,
(3)IDEA對LomBok的支持
- 點擊File-- Settings設定界面,開啟 AnnocationProcessors:

開啟該項是為了讓Lombok注解在編譯階段起到作用
(4)LomBok相關注解的使用
- 沒使用Lombok之前
public class TAdmin implements Serializable {
private static final long serialVersionUID = -81568151678905514L;
private Integer id;
private String username;
private String password;
private String name;
private String sex;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
}
- 使用Lombok之后
@Setter
@Getter //生成所有成員變數的getter/setter方法;作用于成員變數上
@ToString //覆寫默認的toString()方法
@NoArgsConstructor //生成無參構造器
@AllArgsConstructor //生成全參構造器
public class TAdmin implements Serializable {
private static final long serialVersionUID = -81568151678905514L;
private Integer id;
private String username;
private String password;
private String name;
private String sex;
}

3、Lombok實作原理
javac就支持“JSR 269 Pluggable Annotation Processing API”規范,只要程式實作了該API,就能在javac運行的時候得到呼叫,
- javac對原始碼進行分析,生成一棵抽象語法樹(
AST) - javac編譯程序中呼叫實作了JSR 269的Lombok程式
- 此時Lombok就對第一步驟得到的AST進行處理,找到Lombok注解所在類對應的語法樹 (AST),然后修改該語法樹(AST),增加Lombok注解定義的相應樹節點
- javac使用修改后的抽象語法樹(AST)生成位元組碼檔案
4、Lombok里面的相關注解
(1)@Getter/@Setter:
- 作用類上,生成所有成員變數的
getter/setter方法;作用于成員變數上,生成該成員變數的getter/setter方法,可以設定訪問權限及是否懶加載等,
@Getter
@Setter
public class Emp implements Serializable {
private static final long serialVersionUID = 1L;
private Integer id;
private String name;
private Double salary;
private Integer age;
}
(2)@ToString:
- 作用于類,覆寫默認的toString()方法,可以通過of屬性 限定顯示某些欄位,通過exclude屬性 排除某些欄位,
@Getter
@Setter
@ToString(of={"name","salary"},exclude = {"age"})
@AllArgsConstructor
public class Emp implements Serializable {
private static final long serialVersionUID = 1L;
private Integer id;
private String name;
private Double salary;
private Integer age;
}

(3)生成建構式相關的注解
@NoArgsConstructor, @RequiredArgsConstructor, @AllArgsConstructor:作用于類上,用于生成建構式,有staticName、access等屬性,
staticName屬性一旦設定,將采用靜態方法的方式生成實體,access屬性可以限定訪問權限,
@NoArgsConstructor:生成無參構造器;
@RequiredArgsConstructor:生成包含final和@NonNull注解的成員變數的構造器;
@AllArgsConstructor:生成全參構造器
@Getter
@Setter
@ToString(of={"name","salary"},exclude = {"age"})
@AllArgsConstructor //全參構造器
@NoArgsConstructor //無參構造器
public class Emp implements Serializable {
private static final long serialVersionUID = 1L;
private Integer id;
private String name;
private Double salary;
private Integer age;
}
(4)@EqualsAndHashCode
- 作用于類,覆寫默認的equals和hashCode

(5)@NonNull:
- 主要作用于成員變數和引數中,標識不能為空,否則拋出空指標例外,
@Getter
@Setter
@ToString(of={"name","salary"},exclude = {"age"})
@AllArgsConstructor //全參構造器
@NoArgsConstructor //無參構造器
@EqualsAndHashCode //作用于類,覆寫默認的equals和hashCode
public class Emp implements Serializable {
private static final long serialVersionUID = 1L;
private Integer id;
/**
* @NonNull代碼name不能為空,否則報錯
*/
@NonNull private String name;
private Double salary;
private Integer age;
}
(6)@Data
- 作用于類上,是以下注解的集合:
@ToString @EqualsAndHashCode @Getter @Setter @RequiredArgsConstructor
//@ToString @EqualsAndHashCode @Getter @Setter @RequiredArgsConstructor集合
@Data
@AllArgsConstructor //一定注意不包含全構造器
public class Emp implements Serializable {
private static final long serialVersionUID = 1L;
private Integer id;
private String name;
private Double salary;
private Integer age;
}

轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/395115.html
標籤:java
