<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
SSM框架是spring MVC ,Spring和Mybatis框架的整合,是標準的MVC模式,將整個系統劃分為表現層(web),controller層,service層,dao層四層,使用spring MVC負責請求的轉發和檢視管理。
Spring實現業務物件管理,Mybatis作為資料物件的持久化引擎。
DataBase ===> Entity ===> Mapper.xml ===> Dao.Java ===> Service.java ===> Controller.java ===> html css js(thymeleaf)
用IDEA建立一個maven專案結構如左圖所示,在該專案中,有五個包,分別是controller、dao、entity、service和serviceimpl:
層 | 描述 |
---|---|
實體層 | 資料庫在專案中的類,主要用於定義與資料庫物件應的屬性,提供get/set方法,tostring方法,有參無參建構函式。 |
持久層 | 與資料庫互動,dao層首先會建立dao介面,接著就可以在組態檔中定義該介面的實現類;接著就可以在模組中呼叫dao的介面進行資料業務的處理,而不用關注此介面的具體實現類是哪一個類,dao層的資料來源和資料庫連線的引數都是在組態檔中進行設定的。 |
業務層 | 控制業務,業務模組的邏輯應用設計,和dao層一樣都是先設計介面,再建立要實現的類,然後在組態檔中進行設定其實現的關聯。接下來就可以在service層呼叫介面進行業務邏輯應用的處理。 |
實現層 | 實現service介面的所有方法,整合service和dao |
控制層 | controller層主要呼叫Service層裡面的介面控制具體的業務流程,控制的設定也要在組態檔中進行。Controller和Service的區別是:Controller負責具體的業務模組流程的控制;Service層負責業務模組的邏輯應用設計 |
實體層用於存放我們的實體類,與資料庫中的屬性值基本保持一致,實現set和get的方法。
1.匯入lombok小辣椒驅動依賴,用來生成get/set方法依賴:
package com.dvms.entity; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; import lombok.ToString; import lombok.experimental.Accessors; import java.util.Date; @Data @ToString @AllArgsConstructor @NoArgsConstructor @Accessors(chain = true) //鏈式呼叫 public class Emp { private String id; private String name; private Double salary; private Integer age; private Date bir; }
2.傳統方式
package com.umf.entity; import java.io.Serializable; public class UpdataSettingEntity implements Serializable { private static final long serialVersionUID = 1L; // private Integer id = 1; // private int updataflag; /** * 設定: */ public void setId(Integer id) { this.id = id; } /** * 獲取: */ public Integer getId() { return id; } /** * 設定: */ public void setUpdataflag(int updataflag) { this.updataflag = updataflag; } /** * 獲取: */ public int getUpdataflag() { return updataflag; } }
dao層(介面類)對資料庫進行資料持久化操作,他的方法語句是直接針對資料庫操作的,主要實現一些增刪改查操作,在Mybatis中方法主要與與xxxDao(Mapper).xml內相互一一對映。
Mybatis可以用.xml進行資料操作,也可以在dao層用註解的方式,也可以採取xml和dao層介面組合使用的方法(常用)。
package com.dvms.dao; import com.dvms.entity.User; import org.apache.ibatis.annotations.Param; import org.springframework.stereotype.Repository; import java.util.List; @Repository public interface UserDao { //登入 User login(@Param("username") String username, @Param("password") String password);// 在mybatis中傳遞多個引數要做引數的繫結 //新增使用者(註冊) void save(User user); //查詢所有使用者 List<User> findAlluser(); //刪除使用者 void delete(String id); //修改使用者資訊(先查再改) User update(String id); void add(User user); }
xxxDao(Mapper).xml:
關鍵: < mapper namespace=“com.dvms.dao.UserDao”>
前提:基本資料庫語法
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="com.dvms.dao.UserDao"> <!--註冊/新增使用者--> <insert id="save" parameterType="User"> insert into user (id,username,password,sex,phone,email,role) values (#{id},#{username},#{password},#{sex},#{phone},#{email},#{role}) </insert> <!--登入驗證--> <select id="login" resultType="User"> select id,username,password,sex,phone,email,role from user where username =#{username} and password =#{password} </select> <!--查詢所有使用者--> <select id="findAlluser" resultType="User"> select id,username,password,sex,phone,email,role from user </select> <!--刪除使用者--> <delete id="delete" parameterType="String"> delete from user where id=#{id} </delete> <!--修改使用者資訊--> <!--查到要修改的使用者資訊--> <select id="update" parameterType="String" resultType="User"> select id,username,password,sex,phone,email,role from user where id=#{id} </select> <!--修改使用者資訊--> <update id="add" parameterType="User"> update user set username=#{username},password=#{password},sex=#{sex},phone=#{phone},email=#{email},role=#{role} where id=#{id} </update> </mapper>
在dao層用註解的方式:
public interface StudentDao { @Select("select * from student where stu_id=#{stuId}") public Student queryById(int stuId); }
service層(介面類)為controller層的類提供介面進行呼叫,一般就是自己寫的方法封裝起來,具體實現在serviceImpl中。
service層是建立在dao層之上的,建立了dao層後才可以建立service層,而service層又是在controller層之下的,因而service層應該既呼叫dao層的介面,又要提供介面給Controller層的類來進行呼叫,它剛好處於一箇中間層的位置。每個模型都有一個service介面,每個介面分別封裝各自的業務處理方法。
package com.dvms.service; import com.dvms.entity.User; import java.util.List; public interface UserService { //新增使用者 void save(User user); //登入 User login(String username, String password); //查詢所有使用者 List<User> findAlluser(); //刪除使用者 void delete(String id); //修改使用者資訊 User update(String id); void add(User user); }
servicedmpl(實現service層,整合service和dao)(匯入dao層)(介面實現類)
package com.dvms.service.Impl; import com.dvms.dao.UserDao; import com.dvms.entity.User; import com.dvms.service.UserService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.util.List; import java.util.UUID; @Service public class UserServiceImpl implements UserService { @Autowired private UserDao userDao; @Override public void save(User user) { user.setId(UUID.randomUUID().toString()); userDao.save(user); } @Override public User login(String username, String password) { return userDao.login(username,password); } @Override public List<User> findAlluser() { return userDao.findAlluser(); } @Override public void delete(String id) { userDao.delete(id); } @Override public User update(String id) { return userDao.update(id); } @Override public void add(User user) { userDao.add(user); } }
負責具體模組的業務流程控制(獲取引數(前端傳過來)返回響應(前端或資料庫或一個指定路徑)),需要呼叫service邏輯設計層的介面來控制業務流程(匯入service層)。
package com.dvms.controller; import com.dvms.entity.Emp; ..... @Controller public class EmpController { @Autowired private EmpService empService; @GetMapping("emp/findAll") public String findAll(@RequestParam(defaultValue = "1") int pageNum, @RequestParam(defaultValue = "5") int pageSize, Model model){ PageHelper.startPage(pageNum,pageSize);// PageInfo<Emp> pageInfo = new PageInfo<>(empService.findAll()); model.addAttribute("pageInfo",pageInfo); // List<Emp> emps = empService.findAll(); // model.addAttribute("emps",emps); return "ems/tables"; } @RequestMapping("/emp/save") public String save(Emp emp){ empService.save(emp); return "redirect:/emp/findAll"; } }
Controller層呼叫了Service層的介面方法,Service層呼叫Dao層的方法,其中呼叫的引數是使用Entity層進行傳遞的。View層與Controller層協同工作,主要負責介面展示。
以上為個人經驗,希望能給大家一個參考,也希望大家多多支援it145.com。
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45