一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務(wù)器之家:專(zhuān)注于服務(wù)器技術(shù)及軟件下載分享
分類(lèi)導(dǎo)航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術(shù)|正則表達(dá)式|C/C++|IOS|C#|Swift|Android|VB|R語(yǔ)言|JavaScript|易語(yǔ)言|vb.net|

服務(wù)器之家 - 編程語(yǔ)言 - Java教程 - Springboot集成mybatis與jsp過(guò)程詳解

Springboot集成mybatis與jsp過(guò)程詳解

2021-12-13 13:36潮汐先生 Java教程

這篇文章主要介紹了Springboot集成mybatis與jsp過(guò)程,Spring Boot是一種全新的框架(相對(duì)而言),是用來(lái)簡(jiǎn)化Spring應(yīng)用的初始搭建以及開(kāi)發(fā)過(guò)程。該框架使用了特定的方式來(lái)進(jìn)行配置

什么是Spring Boot?

Spring Boot是一種全新的框架(相對(duì)而言),是用來(lái)簡(jiǎn)化Spring應(yīng)用的初始搭建以及開(kāi)發(fā)過(guò)程。該框架使用了特定的方式來(lái)進(jìn)行配置。通過(guò)這種方式Spring Boot將在蓬勃發(fā)展的快速應(yīng)用開(kāi)發(fā)領(lǐng)域(rapid application development)成為領(lǐng)導(dǎo)者。

 

springboot特點(diǎn)

  • 創(chuàng)建獨(dú)立的Spring應(yīng)用程序
  • 嵌入的Tomcat,無(wú)需部署WAR文件
  • 簡(jiǎn)化Maven配置
  • 自動(dòng)配置Spring
  • 沒(méi)有XML配置

 

springboot快速搭建項(xiàng)目

springboot的東西很多,其余的東西后面有機(jī)會(huì)再做補(bǔ)充吧。

今天主要以標(biāo)題springboot集成mybatis與jsp為例演示springboot快速搭建項(xiàng)目

新建項(xiàng)目springboot_mybatis_jsp

Springboot集成mybatis與jsp過(guò)程詳解

Springboot集成mybatis與jsp過(guò)程詳解

這里我們目前只選一個(gè)web依賴(lài),剩下的我們需要的時(shí)候再手動(dòng)添加;

springboot的版本我們選擇2.4.5,后面我們手動(dòng)改成2.2.5.RELEASE。

最后我們點(diǎn)擊Finish。至此我們項(xiàng)目的初始化就完成了。

Springboot集成mybatis與jsp過(guò)程詳解

項(xiàng)目配置

配置項(xiàng)目目錄

Springboot集成mybatis與jsp過(guò)程詳解

mapper目錄的添加要注意是com/christy/mapper,這里不要搞錯(cuò)了

配置工作目錄(working directory)

這一步一定要做,否則無(wú)法訪問(wèn)到項(xiàng)目的jsp頁(yè)面

Springboot集成mybatis與jsp過(guò)程詳解

第一步中點(diǎn)擊下拉三角形選擇Edit Configurations

第四步直接雙擊完后記得點(diǎn)擊Apply->OK

配置pom.xml

我們說(shuō)了要實(shí)現(xiàn)springboot集成mybatis和jsp,所以首先要假如他們的依賴(lài)和相關(guān)依賴(lài),這里放整個(gè)pom.xml內(nèi)容

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" 								     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <parent>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-parent</artifactId>
      <version>2.2.5.RELEASE</version>
      <relativePath/> <!-- lookup parent from repository -->
  </parent>
  <groupId>com.christy</groupId>
  <artifactId>springboot_mybatis_jsp</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <name>springboot_mybatis_jsp</name>
  <description>Demo project for Spring Boot</description>
  <properties>
      <java.version>1.8</java.version>
  </properties>
  <dependencies>
      <dependency>
          <groupId>org.springframework.boot</groupId>
          <artifactId>spring-boot-starter-web</artifactId>
      </dependency>
      <dependency>
          <groupId>org.springframework.boot</groupId>
          <artifactId>spring-boot-starter-test</artifactId>
          <scope>test</scope>
      </dependency>
      <!-- mybatis相關(guān) -->
      <dependency>
          <groupId>org.mybatis.spring.boot</groupId>
          <artifactId>mybatis-spring-boot-starter</artifactId>
          <version>2.1.2</version>
      </dependency>
      <dependency>
          <groupId>com.alibaba</groupId>
          <artifactId>druid</artifactId>
          <version>1.1.12</version>
      </dependency>
      <dependency>
          <groupId>mysql</groupId>
          <artifactId>mysql-connector-java</artifactId>
          <version>5.1.38</version>
      </dependency>
      <!-- jsp相關(guān) -->
      <dependency>
          <groupId>org.apache.tomcat.embed</groupId>
          <artifactId>tomcat-embed-jasper</artifactId>
      </dependency>
      <dependency>
          <groupId>jstl</groupId>
          <artifactId>jstl</artifactId>
          <version>1.2</version>
      </dependency>
  </dependencies>
  <build>
      <plugins>
          <plugin>
              <groupId>org.springframework.boot</groupId>
              <artifactId>spring-boot-maven-plugin</artifactId>
              <configuration>
                  <jvmArguments>-Dfile.encoding=UTF-8</jvmArguments>
              </configuration>
          </plugin>
      </plugins>
  </build>
</project>

配置application.properties

server.port=8899
# 開(kāi)啟jso的自動(dòng)編譯
server.servlet.jsp.init-parameters.development=true
# 配置視圖解析器
spring.mvc.view.prefix=/
spring.mvc.view.suffix=.jsp
# 編寫(xiě)mybatis相關(guān)配置
spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/christy?characterEncoding=UTF-8
spring.datasource.username=root
spring.datasource.password=123456
# 創(chuàng)建這個(gè)目錄一定要使用 "/"
mybatis.mapper-locations=classpath:com/christy/mapper/*.xml
# 指定別名
mybatis.type-aliases-package=com.christy.model.entity
# 開(kāi)啟日志 日志級(jí)別: off > error > warn > info > debug > all
logging.level.root=info
logging.level.com.christy.model.dao=debug
logging.level.com.christy.controller=debug

編寫(xiě)代碼

建表t_user

CREATE TABLE t_user (
  id INT (6) PRIMARY KEY AUTO_INCREMENT,
  NAME VARCHAR (40),
  age INT (3),
  salary DOUBLE (7, 2)
);

編寫(xiě)User.java

public class User {
  private Integer id;
  private String name;
  private Integer age;
  private Double salary;
  public User() {
  }
  public User(Integer id, String name, Integer age, Double salary) {
      this.id = id;
      this.name = name;
      this.age = age;
      this.salary = salary;
  }
  public Integer getId() {
      return id;
  }
  public void setId(Integer id) {
      this.id = id;
  }
  public String getName() {
      return name;
  }
  public void setName(String name) {
      this.name = name;
  }
  public Integer getAge() {
      return age;
  }
  public void setAge(Integer age) {
      this.age = age;
  }
  public Double getSalary() {
      return salary;
  }
  public void setSalary(Double salary) {
      this.salary = salary;
  }
  @Override
  public String toString() {
      return "User{" +
              "id=" + id +
              ", name='" + name + '\'' +
              ", age=" + age +
              ", salary=" + salary +
              '}';
  }
}
// 我們這里沒(méi)有使用lombok

編寫(xiě)UserDao

@Mapper
public interface UserDao {
  /**
   * 查詢(xún)所有
   * @author Christy
   * @date 2021/5/13 9:38
   * @param 
   * @return java.util.List<com.christy.model.entity.User>
   */
  List<User> findAll();
 /**
   * 添加用戶(hù)信息
   * @author Christy
   * @date 2021/5/13 9:38
   * @param user
   * @return 
   */
  void save(User user);
  /**
   * 根據(jù)id查詢(xún)用戶(hù)
   * @author Christy
   * @date 2021/5/13 9:39
   * @param id
   * @return com.christy.model.entity.User
   */
  User findById(Integer id);
  /**
   * 修改用戶(hù)信息
   * @author Christy
   * @date 2021/5/13 9:39
   * @param user
   * @return void
   */
  void update(User user);
  /**
   * 根據(jù)id刪除用戶(hù)
   * @author Christy
   * @date 2021/5/13 9:39
   * @param id
   * @return void
   */
  void deleteById(Integer id);
}

編寫(xiě)UserMapper.xml

<?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.christy.model.dao.UserDao">
  <!--findAll-->
  <select id="findAll" resultType="com.christy.model.entity.User">
      select id,name,age,salary from t_user
  </select>
  <!--save 采用數(shù)據(jù)庫(kù)自動(dòng)生成(useGeneratedKeys="true")并返回主鍵的值(keyProperty保存主鍵的屬性名)-->
  <insert id="save" parameterType="com.christy.model.entity.User" useGeneratedKeys="true" keyProperty="id" >
      insert into t_user values(#{id},#{name},#{age},#{salary})
  </insert>
  <!--findById-->
  <select id="findById" parameterType="Integer" resultType="com.christy.model.entity.User">
      select id,name,age,salary from t_user where id = #{id}
  </select>
  <!--update-->
  <update id="update" parameterType="com.christy.model.entity.User">
      update t_user
      set
          name=#{name},
          age=#{age},
          salary=#{salary}
      where id = #{id}
  </update>
  <!--deleteById-->
  <select id="deleteById" parameterType="Integer" >
      delete from t_user where id = #{id}
  </select>
</mapper>

編寫(xiě)UserService.java、UserServiceImpl.java

public interface UserService {    
  /**
   * 查詢(xún)所有用戶(hù)
   * @author Christy
   * @date 2021/5/13 9:41
   * @param 
   * @return java.util.List<com.christy.model.entity.User>
   */
  List<User> findAll();
  /**
   * 保存用戶(hù)信息
   * @author Christy
   * @date 2021/5/13 9:42
   * @param user
   * @return void
   */
  void save(User user);
  /**
   * 根據(jù)id查詢(xún)用戶(hù)
   * @author Christy
   * @date 2021/5/13 9:42
   * @param id
   * @return com.christy.model.entity.User
   */
  User findById(Integer id);
  /**
   * 修改用戶(hù)信息
   * @author Christy
   * @date 2021/5/13 9:42
   * @param user
   * @return void
   */
  void update(User user);    
  /**
   * 根據(jù)id刪除用戶(hù)
   * @author Christy
   * @date 2021/5/13 9:42
   * @param id
   * @return void
   */
  void deleteById(Integer id);
}
/**
* @Component注解 在工廠中創(chuàng)建對(duì)象
* @Controller @Service @Repository都繼承自@Component注解,
* 該三個(gè)注解將三層Controller,Service,Dao區(qū)別開(kāi)來(lái),其余地方如需要?jiǎng)?chuàng)建對(duì)象需要用Component
*
* @Transactional
* 修飾范圍:
*      類(lèi):代表類(lèi)中所有方法加入事務(wù)
*      方法: 代表當(dāng)前方法加入事務(wù)
* propagation: 事務(wù)的傳播屬性 是指發(fā)生在多個(gè)業(yè)務(wù)層之間的事務(wù)傳遞
*      默認(rèn)值:REQUIRED 需要事務(wù),如果外部存在事務(wù)則融入事務(wù),沒(méi)有則開(kāi)啟事務(wù)
*      REQUIRED_NEW:需要新事物 外部存在事務(wù)則事務(wù)掛起,自己創(chuàng)建新的事務(wù) 內(nèi)部事務(wù)運(yùn)行結(jié)束外部事物恢復(fù)(該傳播屬性常用于記錄業(yè)務(wù)操作日志)
*      SUPPORTS:支持事務(wù),外部存在事務(wù)則融入事務(wù),沒(méi)有也不開(kāi)啟
*          那么問(wèn)題來(lái)了,查詢(xún)方法上有必要加@Transactional(propagation = Propagation.SUPPORTS)?
*          答:有必要。
*          舉例:A.save(){ B.find*(){ C.update() }},這是個(gè)典型的A調(diào)用B,B調(diào)用C。對(duì)于A和C都是需要事務(wù)的,事務(wù)的傳播屬性都是默認(rèn)值REQUIRED,
*          如果此時(shí)B沒(méi)有加事務(wù),則A的事務(wù)無(wú)法傳遞到C,此時(shí)C的傳播屬性因?yàn)槭悄J(rèn)的REQUIRED,所以C會(huì)開(kāi)啟一個(gè)新的事務(wù)。這時(shí)A和C分別處于不同的事務(wù)中
*
* @author Christy
* @date 2021/5/13 10:04
**/
@Service // 通知springboot掃描該注解 用來(lái)在工廠中創(chuàng)建對(duì)象
@Transactional  // 控制事務(wù) 修飾范圍: 類(lèi) 方法
public class UserServiceImpl implements UserService {
  @Autowired
  private UserDao userDao;

  @Override
  @Transactional(propagation = Propagation.SUPPORTS)  // propagation: 事務(wù)的傳播屬性
  public List<User> findAll() {
      return userDao.findAll();
  }

  @Override
  public void save(User user) {
      userDao.save(user);
  }

  @Override
  public User findById(Integer id) {
      return userDao.findById(id);
  }

  @Override
  public void update(User user) {
      userDao.update(user);
  }

  @Override
  public void deleteById(Integer id) {
      userDao.deleteById(id);
  }
}

編寫(xiě)Controller

@Controller
@RequestMapping("user")
public class UserController {
  @Autowired
  private UserService userService;
  /**
   * 查詢(xún)所有
   * @author Christy
   * @date 2021/5/13 10:48
   * @param request
   * @param model
   * @return java.lang.String
   */
  @RequestMapping("findAll")
  public String findAll(HttpServletRequest request, Model model){
      List<User> users = userService.findAll();
      //保存到作用域
      model.addAttribute("users",users);
      return "user_list";
  }
  /**
   * 添加用戶(hù)
   * @author Christy
   * @date 2021/5/13 10:49
   * @param name
   * @param user
   * @return java.lang.String
   */
  @RequestMapping("save")
  public String save(String name,User user){
      userService.save(user);
      return "redirect:/user/findAll";
  }
  /**
   * 查詢(xún)用戶(hù)
   * @author Christy
   * @date 2021/5/13 10:49
   * @param id
   * @param model
   * @return java.lang.String
   */
  @RequestMapping("findById")
  public String findById(Integer id,Model model){
      User user = userService.findById(id);
      model.addAttribute("user",user);
      return "user_detail";
  }
  /**
   * 修改用戶(hù)信息
   * @author Christy
   * @date 2021/5/13 10:50
   * @param user
   * @return java.lang.String
   */
  @RequestMapping("update")
  public String update(User user){
      userService.update(user);
      return "redirect:/user/findAll";
  }
  /**
   * 刪除一個(gè)用戶(hù)
   * @author Christy
   * @date 2021/5/13 10:50
   * @param id
   * @return java.lang.String
   */
  @RequestMapping("deleteById")
  public String deleteById(Integer id){
      userService.deleteById(id);
      return "redirect:/user/findAll";
  }
}

測(cè)試

我們啟動(dòng)項(xiàng)目,訪問(wèn)列表頁(yè)面http://localhost:8899/user/findAll,然后按下圖操作我們預(yù)編寫(xiě)的功能

Springboot集成mybatis與jsp過(guò)程詳解

以上就是Springboot集成mybatis與jsp過(guò)程詳解的詳細(xì)內(nèi)容,更多關(guān)于Springboot集成的資料請(qǐng)關(guān)注服務(wù)器之家其它相關(guān)文章!

原文鏈接:https://blog.csdn.net/bbxylqf126com/article/details/116743483

 

延伸 · 閱讀

精彩推薦
  • Java教程20個(gè)非常實(shí)用的Java程序代碼片段

    20個(gè)非常實(shí)用的Java程序代碼片段

    這篇文章主要為大家分享了20個(gè)非常實(shí)用的Java程序片段,對(duì)java開(kāi)發(fā)項(xiàng)目有所幫助,感興趣的小伙伴們可以參考一下 ...

    lijiao5352020-04-06
  • Java教程Java實(shí)現(xiàn)搶紅包功能

    Java實(shí)現(xiàn)搶紅包功能

    這篇文章主要為大家詳細(xì)介紹了Java實(shí)現(xiàn)搶紅包功能,采用多線(xiàn)程模擬多人同時(shí)搶紅包,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙...

    littleschemer13532021-05-16
  • Java教程升級(jí)IDEA后Lombok不能使用的解決方法

    升級(jí)IDEA后Lombok不能使用的解決方法

    最近看到提示IDEA提示升級(jí),尋思已經(jīng)有好久沒(méi)有升過(guò)級(jí)了。升級(jí)完畢重啟之后,突然發(fā)現(xiàn)好多錯(cuò)誤,本文就來(lái)介紹一下如何解決,感興趣的可以了解一下...

    程序猿DD9332021-10-08
  • Java教程小米推送Java代碼

    小米推送Java代碼

    今天小編就為大家分享一篇關(guān)于小米推送Java代碼,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧...

    富貴穩(wěn)中求8032021-07-12
  • Java教程Java使用SAX解析xml的示例

    Java使用SAX解析xml的示例

    這篇文章主要介紹了Java使用SAX解析xml的示例,幫助大家更好的理解和學(xué)習(xí)使用Java,感興趣的朋友可以了解下...

    大行者10067412021-08-30
  • Java教程Java8中Stream使用的一個(gè)注意事項(xiàng)

    Java8中Stream使用的一個(gè)注意事項(xiàng)

    最近在工作中發(fā)現(xiàn)了對(duì)于集合操作轉(zhuǎn)換的神器,java8新特性 stream,但在使用中遇到了一個(gè)非常重要的注意點(diǎn),所以這篇文章主要給大家介紹了關(guān)于Java8中S...

    阿杜7482021-02-04
  • Java教程Java BufferWriter寫(xiě)文件寫(xiě)不進(jìn)去或缺失數(shù)據(jù)的解決

    Java BufferWriter寫(xiě)文件寫(xiě)不進(jìn)去或缺失數(shù)據(jù)的解決

    這篇文章主要介紹了Java BufferWriter寫(xiě)文件寫(xiě)不進(jìn)去或缺失數(shù)據(jù)的解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望...

    spcoder14552021-10-18
  • Java教程xml與Java對(duì)象的轉(zhuǎn)換詳解

    xml與Java對(duì)象的轉(zhuǎn)換詳解

    這篇文章主要介紹了xml與Java對(duì)象的轉(zhuǎn)換詳解的相關(guān)資料,需要的朋友可以參考下...

    Java教程網(wǎng)2942020-09-17
主站蜘蛛池模板: 欧美午夜寂寞影院安卓列表 | 日b视频免费看 | 好男人资源免费播放在线观看 | 亚洲 欧美 国产 综合 在线 | 久久精品观看影院2828 | 欧美精品成人a多人在线观看 | 91精品婷婷国产综合久久8 | 双夫1v2 | hd性欧美俱乐部中文 | 91麻豆影视 | 精品国产精品人妻久久无码五月天 | 免费观看国产视频 | 亚洲第一综合天堂另类专 | 亚洲欧美另类在线观看 | 国产视频三区 | 色老板在线观看 | 4虎影视国产在线观看精品 4s4s4s4s色大众影视 | 亚洲理论视频 | 91久久碰国产 | 日日操美女 | 秋霞理论最新三级理论最 | jiujiure精品| 国产午夜精品福利久久 | 国产盗摄wc厕所撒尿视频 | 欧美视频精品一区二区三区 | 无人区免费一二三四乱码 | 日本大片免aaa费观看视频 | 亚洲无人区乱码中文字幕 | 国产1区2区在线观看 | 好大好硬抽搐好爽想要 | 全黄毛片 | 亚洲精品黄色 | 日本不卡免免费观看 | 九九热免费在线观看 | 人人揉人人爽五月天视频 | 国产精品福利短视在线播放频 | 精品无人乱码一区二区三区 | 国产射频放大器 | 亚洲国产综合久久精品 | 九9热这里只有真品 | 好湿好紧好多水c |