什么是Spring Boot?
Spring Boot是一種全新的框架(相對而言),是用來簡化Spring應用的初始搭建以及開發過程。該框架使用了特定的方式來進行配置。通過這種方式Spring Boot將在蓬勃發展的快速應用開發領域(rapid application development)成為領導者。
springboot特點
- 創建獨立的Spring應用程序
- 嵌入的Tomcat,無需部署WAR文件
- 簡化Maven配置
- 自動配置Spring
- 沒有XML配置
springboot快速搭建項目
springboot的東西很多,其余的東西后面有機會再做補充吧。
今天主要以標題springboot集成mybatis與jsp為例演示springboot快速搭建項目
新建項目springboot_mybatis_jsp
這里我們目前只選一個web依賴,剩下的我們需要的時候再手動添加;
springboot的版本我們選擇2.4.5,后面我們手動改成2.2.5.RELEASE。
最后我們點擊Finish
。至此我們項目的初始化就完成了。
項目配置
配置項目目錄
mapper目錄的添加要注意是com/christy/mapper
,這里不要搞錯了
配置工作目錄(working directory)
這一步一定要做,否則無法訪問到項目的jsp頁面
第一步中點擊下拉三角形選擇Edit Configurations
第四步直接雙擊完后記得點擊Apply
->OK
配置pom.xml
我們說了要實現springboot集成mybatis和jsp,所以首先要假如他們的依賴和相關依賴,這里放整個pom.xml內容
<?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相關 --> <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相關 --> <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 # 開啟jso的自動編譯 server.servlet.jsp.init-parameters.development=true # 配置視圖解析器 spring.mvc.view.prefix=/ spring.mvc.view.suffix=.jsp # 編寫mybatis相關配置 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 # 創建這個目錄一定要使用 "/" mybatis.mapper-locations=classpath:com/christy/mapper/*.xml # 指定別名 mybatis.type-aliases-package=com.christy.model.entity # 開啟日志 日志級別: off > error > warn > info > debug > all logging.level.root=info logging.level.com.christy.model.dao=debug logging.level.com.christy.controller=debug
編寫代碼
建表t_user
CREATE TABLE t_user ( id INT (6) PRIMARY KEY AUTO_INCREMENT, NAME VARCHAR (40), age INT (3), salary DOUBLE (7, 2) );
編寫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 + '}'; } } // 我們這里沒有使用lombok
編寫UserDao
@Mapper public interface UserDao { /** * 查詢所有 * @author Christy * @date 2021/5/13 9:38 * @param * @return java.util.List<com.christy.model.entity.User> */ List<User> findAll(); /** * 添加用戶信息 * @author Christy * @date 2021/5/13 9:38 * @param user * @return */ void save(User user); /** * 根據id查詢用戶 * @author Christy * @date 2021/5/13 9:39 * @param id * @return com.christy.model.entity.User */ User findById(Integer id); /** * 修改用戶信息 * @author Christy * @date 2021/5/13 9:39 * @param user * @return void */ void update(User user); /** * 根據id刪除用戶 * @author Christy * @date 2021/5/13 9:39 * @param id * @return void */ void deleteById(Integer id); }
編寫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 采用數據庫自動生成(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>
編寫UserService.java、UserServiceImpl.java
public interface UserService { /** * 查詢所有用戶 * @author Christy * @date 2021/5/13 9:41 * @param * @return java.util.List<com.christy.model.entity.User> */ List<User> findAll(); /** * 保存用戶信息 * @author Christy * @date 2021/5/13 9:42 * @param user * @return void */ void save(User user); /** * 根據id查詢用戶 * @author Christy * @date 2021/5/13 9:42 * @param id * @return com.christy.model.entity.User */ User findById(Integer id); /** * 修改用戶信息 * @author Christy * @date 2021/5/13 9:42 * @param user * @return void */ void update(User user); /** * 根據id刪除用戶 * @author Christy * @date 2021/5/13 9:42 * @param id * @return void */ void deleteById(Integer id); }
/** * @Component注解 在工廠中創建對象 * @Controller @Service @Repository都繼承自@Component注解, * 該三個注解將三層Controller,Service,Dao區別開來,其余地方如需要創建對象需要用Component * * @Transactional * 修飾范圍: * 類:代表類中所有方法加入事務 * 方法: 代表當前方法加入事務 * propagation: 事務的傳播屬性 是指發生在多個業務層之間的事務傳遞 * 默認值:REQUIRED 需要事務,如果外部存在事務則融入事務,沒有則開啟事務 * REQUIRED_NEW:需要新事物 外部存在事務則事務掛起,自己創建新的事務 內部事務運行結束外部事物恢復(該傳播屬性常用于記錄業務操作日志) * SUPPORTS:支持事務,外部存在事務則融入事務,沒有也不開啟 * 那么問題來了,查詢方法上有必要加@Transactional(propagation = Propagation.SUPPORTS)? * 答:有必要。 * 舉例:A.save(){ B.find*(){ C.update() }},這是個典型的A調用B,B調用C。對于A和C都是需要事務的,事務的傳播屬性都是默認值REQUIRED, * 如果此時B沒有加事務,則A的事務無法傳遞到C,此時C的傳播屬性因為是默認的REQUIRED,所以C會開啟一個新的事務。這時A和C分別處于不同的事務中 * * @author Christy * @date 2021/5/13 10:04 **/ @Service // 通知springboot掃描該注解 用來在工廠中創建對象 @Transactional // 控制事務 修飾范圍: 類 方法 public class UserServiceImpl implements UserService { @Autowired private UserDao userDao; @Override @Transactional(propagation = Propagation.SUPPORTS) // propagation: 事務的傳播屬性 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); } }
編寫Controller
@Controller @RequestMapping("user") public class UserController { @Autowired private UserService userService; /** * 查詢所有 * @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"; } /** * 添加用戶 * @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"; } /** * 查詢用戶 * @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"; } /** * 修改用戶信息 * @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"; } /** * 刪除一個用戶 * @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"; } }
測試
我們啟動項目,訪問列表頁面http://localhost:8899/user/findAll,然后按下圖操作我們預編寫的功能
以上就是Springboot集成mybatis與jsp過程詳解的詳細內容,更多關于Springboot集成的資料請關注服務器之家其它相關文章!
原文鏈接:https://blog.csdn.net/bbxylqf126com/article/details/116743483