Springboot集成mybatis與jsp過程詳解
什么是Spring Boot?
Spring Boot是一種全新的框架(相對而言),是用來簡化Spring應用的初始搭建以及開發(fā)過程。該框架使用了特定的方式來進行配置。通過這種方式Spring Boot將在蓬勃發(fā)展的快速應用開發(fā)領域(rapid application development)成為領導者。
springboot特點
- 創(chuàng)建獨立的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
我們說了要實現(xiàn)springboot集成mybatis和jsp,所以首先要假如他們的依賴和相關依賴,這里放整個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相關 -->
<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 # 創(chuàng)建這個目錄一定要使用 "/" 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);
/**
* 根據(jù)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);
/**
* 根據(jù)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 采用數(shù)據(jù)庫自動生成(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);
/**
* 根據(jù)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);
/**
* 根據(jù)id刪除用戶
* @author Christy
* @date 2021/5/13 9:42
* @param id
* @return void
*/
void deleteById(Integer id);
}
/**
* @Component注解 在工廠中創(chuàng)建對象
* @Controller @Service @Repository都繼承自@Component注解,
* 該三個注解將三層Controller,Service,Dao區(qū)別開來,其余地方如需要創(chuàng)建對象需要用Component
*
* @Transactional
* 修飾范圍:
* 類:代表類中所有方法加入事務
* 方法: 代表當前方法加入事務
* propagation: 事務的傳播屬性 是指發(fā)生在多個業(yè)務層之間的事務傳遞
* 默認值:REQUIRED 需要事務,如果外部存在事務則融入事務,沒有則開啟事務
* REQUIRED_NEW:需要新事物 外部存在事務則事務掛起,自己創(chuàng)建新的事務 內(nèi)部事務運行結束外部事物恢復(該傳播屬性常用于記錄業(yè)務操作日志)
* SUPPORTS:支持事務,外部存在事務則融入事務,沒有也不開啟
* 那么問題來了,查詢方法上有必要加@Transactional(propagation = Propagation.SUPPORTS)?
* 答:有必要。
* 舉例:A.save(){ B.find*(){ C.update() }},這是個典型的A調(diào)用B,B調(diào)用C。對于A和C都是需要事務的,事務的傳播屬性都是默認值REQUIRED,
* 如果此時B沒有加事務,則A的事務無法傳遞到C,此時C的傳播屬性因為是默認的REQUIRED,所以C會開啟一個新的事務。這時A和C分別處于不同的事務中
*
* @author Christy
* @date 2021/5/13 10:04
**/
@Service // 通知springboot掃描該注解 用來在工廠中創(chuàng)建對象
@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過程詳解的詳細內(nèi)容,更多關于Springboot集成的資料請關注腳本之家其它相關文章!
相關文章
使用SpringBoot簡單實現(xiàn)一個蘋果支付的場景
這篇文章主要為大家詳細介紹了如何在Spring?Boot項目中集成Apple?Pay功能,文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起學習一下2024-11-11
SpringBoot使用編程方式配置DataSource的方法
這篇文章主要介紹了SpringBoot使用編程方式配置DataSource的方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2019-01-01
基于Java中throw和throws的區(qū)別(詳解)
下面小編就為大家?guī)硪黄贘ava中throw和throws的區(qū)別(詳解)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-07-07
Java對文本文件MD5加密并ftp傳送到遠程主機目錄的實現(xiàn)方法
這篇文章主要給大家介紹了關于Java對文本文件MD5加密并ftp傳送到遠程主機目錄的實現(xiàn)方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2018-08-08
@ConfigurationProperties遇到的坑及解決
這篇文章主要介紹了解決@ConfigurationProperties遇到的坑,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-07-07

