Springboot集成mybatis与jsp过程详解

 更新时间:2021年09月01日 10:44:02   作者:潮汐先生  
这篇文章主要介绍了Springboot集成mybatis与jsp过程,Spring Boot是一种全新的框架(相对而言),是用来简化Spring应用的初始搭建以及开发过程。该框架使用了特定的方式来进行配置

什么是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集成的资料请关注脚本之家其它相关文章!

相关文章

  • 使用SpringBoot简单实现一个苹果支付的场景

    使用SpringBoot简单实现一个苹果支付的场景

    这篇文章主要为大家详细介绍了如何在Spring Boot项目中集成Apple Pay功能,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下
    2024-11-11
  • 解读Spring配置与服务组件的关系和注入机制

    解读Spring配置与服务组件的关系和注入机制

    这篇文章主要介绍了解读Spring配置与服务组件的关系和注入机制,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-09-09
  • Java中策略设计模式的实现及应用场景

    Java中策略设计模式的实现及应用场景

    策略设计模式是Java中一种常用的设计模式,它通过定义一系列算法并将其封装成独立的策略类,从而使得算法可以在不影响客户端的情况下随时切换。策略设计模式主要应用于系统中存在多种相似的算法、需要灵活调整算法逻辑或者需要扩展新的算法等场景
    2023-04-04
  • SpringBoot使用编程方式配置DataSource的方法

    SpringBoot使用编程方式配置DataSource的方法

    这篇文章主要介绍了SpringBoot使用编程方式配置DataSource的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2019-01-01
  • 基于Java中throw和throws的区别(详解)

    基于Java中throw和throws的区别(详解)

    下面小编就为大家带来一篇基于Java中throw和throws的区别(详解)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-07-07
  • Java对文本文件MD5加密并ftp传送到远程主机目录的实现方法

    Java对文本文件MD5加密并ftp传送到远程主机目录的实现方法

    这篇文章主要给大家介绍了关于Java对文本文件MD5加密并ftp传送到远程主机目录的实现方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2018-08-08
  • @ConfigurationProperties遇到的坑及解决

    @ConfigurationProperties遇到的坑及解决

    这篇文章主要介绍了解决@ConfigurationProperties遇到的坑,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-07-07
  • Java调用构造函数和方法及使用详解

    Java调用构造函数和方法及使用详解

    在Java编程中,构造函数用于初始化新创建的对象,而方法则用于执行对象的行为,构造函数在使用new关键字创建类实例时自动调用,没有返回类型,并且名称与类名相同,本文通过示例详细介绍了如何在Java中使用构造函数和方法,感兴趣的朋友一起看看吧
    2024-10-10
  • MyBatis Plus逻辑删除和分页插件使用详解

    MyBatis Plus逻辑删除和分页插件使用详解

    这篇文章主要介绍了MyBatis Plus之逻辑删除和分页插件使用,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-12-12
  • idea2020.3测试评价及感受

    idea2020.3测试评价及感受

    idea2020.3版本这次变化最大的也就是 UI了完全抛弃了之前一直使用的模板更改成了新的样式,感兴趣的朋友快来下载体验下吧
    2020-10-10

最新评论