构建SpringBoot+MyBatis+Freemarker的项目详解

以下是详细讲解“构建SpringBoot+MyBatis+Freemarker的项目详解”的完整攻略。

1. 创建SpringBoot项目

首先,打开IDEA,点击创建一个新项目,选择Spring Initializr,选择构建工具为Maven,添加所需依赖,包含以下依赖:

Spring Web
MyBatis Framework
MySQL Driver
Freemarker
Lombok

这里使用的数据库为MySQL,可以根据自己的需要选择不同的数据库。

点击Finish完成项目创建。

2. 配置MyBatis

  1. 创建MyBatis的SQL映射文件,其中包含需要执行的SQL语句。

  2. 创建Mapper接口,其中定义对应的SQL语句方法。

  3. 在application.properties文件中配置数据库信息,包括数据库名、用户名和密码等。

  4. 加载MyBatis配置文件,在其中注册Mapper接口。

完整示例:

SQL映射文件(userMapper.xml):

<mapper namespace="com.example.demo.mapper.UserMapper">
    <select id="getUserById" resultType="User">
        select * from user where id=#{id}
    </select>
</mapper>

Mapper接口(UserMapper.java):

public interface UserMapper {
    User getUserById(int id);
}

application.properties配置:

spring.datasource.driverClassName=com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/test
spring.datasource.username=root
spring.datasource.password=root

MyBatis配置类(MybatisConfig.java):

@Configuration
@MapperScan("com.example.demo.mapper")
public class MybatisConfig {
    @Bean
    public SqlSessionFactory sqlSessionFactory() throws Exception {
        SqlSessionFactoryBean sessionFactory = new SqlSessionFactoryBean();
        sessionFactory.setDataSource(dataSource());
        PathMatchingResourcePatternResolver resolver = new PathMatchingResourcePatternResolver();
        sessionFactory.setMapperLocations(resolver.getResources("classpath:/mapper/*.xml"));
        return sessionFactory.getObject();
    }

    @Bean
    public DataSource dataSource() {
        DriverManagerDataSource dataSource = new DriverManagerDataSource();
        dataSource.setDriverClassName(env.getProperty("spring.datasource.driverClassName"));
        dataSource.setUrl(env.getProperty("spring.datasource.url"));
        dataSource.setUsername(env.getProperty("spring.datasource.username"));
        dataSource.setPassword(env.getProperty("spring.datasource.password"));
        return dataSource;
    }

    @Bean
    public PlatformTransactionManager transactionManager() {
        return new DataSourceTransactionManager(dataSource());
    }
}

3. 配置Freemarker

  1. 创建Freemarker的模板文件,用于生成响应内容。

  2. 在application.properties中设置Freemarker的基本配置,如编码、模板文件位置等。

  3. 在Controller中通过ModelAndView传递数据,并指定要使用的模板文件。

完整示例:

Freemarker模板文件(user.ftl):

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>用户信息</title>
</head>
<body>
    <h1>用户信息</h1>
    <table>
        <tr>
            <th>ID</th>
            <th>姓名</th>
            <th>性别</th>
            <th>年龄</th>
        </tr>
        <tr>
            <td>${user.id}</td>
            <td>${user.name}</td>
            <td>${user.sex}</td>
            <td>${user.age}</td>
        </tr>
    </table>
</body>
</html>

application.properties配置:

spring.freemarker.charset=utf-8
spring.freemarker.template-loader-path=classpath:/templates

Controller代码:

@Controller
public class UserController {
    private final UserMapper userMapper;

    @Autowired
    public UserController(UserMapper userMapper) {
        this.userMapper = userMapper;
    }

    @GetMapping("/user/{id}")
    public ModelAndView getUser(@PathVariable("id") int id) {
        User user = userMapper.getUserById(id);
        ModelAndView modelAndView = new ModelAndView("user");
        modelAndView.addObject("user", user);
        return modelAndView;
    }
}

4. 示例

接下来,我们通过两个示例来演示如何使用SpringBoot+MyBatis+Freemarker构建项目。

示例1:查询用户信息

我们要求通过URL中的id参数,查询对应的用户信息,并将查询结果展示在页面上。

  1. 在数据库中添加一张user表,包含字段id、name、sex和age。

  2. 创建User实体类,其中包含以上字段以及相应的get和set方法。

  3. 创建UserMapper和userMapper.xml文件,其中包括getUserById方法。

  4. 创建UserController,其中包含@GetMapping("/user/{id}")方法,使用@PathVariable注解获取URL中的id参数,并通过UserMapper查询对应用户信息,将结果传递给ModelAndView,并设置要使用的模板文件为"user.ftl"。

完整代码如下:

User实体类:

@Data
@AllArgsConstructor
@NoArgsConstructor
public class User {
    private int id;
    private String name;
    private String sex;
    private int age;
}

UserMapper.java文件:

public interface UserMapper {
    User getUserById(int id);
}

userMapper.xml文件:

<mapper namespace="com.example.demo.mapper.UserMapper">
    <select id="getUserById" resultType="User">
        select * from user where id=#{id}
    </select>
</mapper>

UserController.java文件:

@Controller
public class UserController {
    private final UserMapper userMapper;

    @Autowired
    public UserController(UserMapper userMapper) {
        this.userMapper = userMapper;
    }

    @GetMapping("/user/{id}")
    public ModelAndView getUser(@PathVariable("id") int id) {
        User user = userMapper.getUserById(id);
        ModelAndView modelAndView = new ModelAndView("user");
        modelAndView.addObject("user", user);
        return modelAndView;
    }
}

user.ftl模板文件:

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>用户信息</title>
</head>
<body>
    <h1>用户信息</h1>
    <table>
        <tr>
            <th>ID</th>
            <th>姓名</th>
            <th>性别</th>
            <th>年龄</th>
        </tr>
        <tr>
            <td>${user.id}</td>
            <td>${user.name}</td>
            <td>${user.sex}</td>
            <td>${user.age}</td>
        </tr>
    </table>
</body>
</html>

示例2:添加用户信息

我们要求通过表单提交,向数据库中添加一条用户信息,添加成功后展示成功信息,并给出链接跳转到对应用户信息页面。

  1. 在UserController中添加@GetMapping("/user/add")和@PostMapping("/user/add")两个方法,分别用来展示添加用户的表单页面和处理表单提交的结果。在@GetMapping("/user/add")方法中创建一个空的User对象,将其传递给ModelAndView,使表单可以根据User对象进行绑定和数据验证。

  2. 在user.ftl文件中添加一个链接,用于跳转到添加用户的页面。

完整代码如下:

UserController.java文件:

@Controller
public class UserController {
    private final UserMapper userMapper;

    @Autowired
    public UserController(UserMapper userMapper) {
        this.userMapper = userMapper;
    }

    @GetMapping("/user/{id}")
    public ModelAndView getUser(@PathVariable("id") int id) {
        User user = userMapper.getUserById(id);
        ModelAndView modelAndView = new ModelAndView("user");
        modelAndView.addObject("user", user);
        return modelAndView;
    }

    @GetMapping("/user/add")
    public ModelAndView addUser() {
        ModelAndView modelAndView = new ModelAndView("addUser");
        modelAndView.addObject("user", new User());
        return modelAndView;
    }

    @PostMapping("/user/add")
    public String addUser(@ModelAttribute User user) {
        userMapper.addUser(user);
        return "redirect:/success";
    }

    @GetMapping("/success")
    public String showSuccess() {
        return "success";
    }
}

addUser.ftl模板文件:

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>添加用户</title>
</head>
<body>
    <h1>添加用户</h1>
    <form action="/user/add" method="post">
        <table>
            <tr>
                <th>姓名</th>
                <td><input type="text" name="name" value="${user.name}"></td>
            </tr>
            <tr>
                <th>性别</th>
                <td>
                    <select name="sex">
                        <option value="男">男</option>
                        <option value="女">女</option>
                    </select>
                </td>
            </tr>
            <tr>
                <th>年龄</th>
                <td><input type="text" name="age" value="${user.age}"></td>
            </tr>
            <tr>
                <td colspan="2"><input type="submit" value="提交"></td>
            </tr>
        </table>
    </form>
</body>
</html>

success.ftl模板文件:

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>操作成功</title>
</head>
<body>
    <h1>操作成功</h1>
    <p>用户信息已成功添加,请返回<a href="/user">用户列表</a>页面查看</p>
</body>
</html>

user.ftl模板文件:

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>用户信息</title>
</head>
<body>
    <h1>用户信息</h1>
    <table>
        <tr>
            <th>ID</th>
            <th>姓名</th>
            <th>性别</th>
            <th>年龄</th>
        </tr>
        <tr>
            <td>${user.id}</td>
            <td>${user.name}</td>
            <td>${user.sex}</td>
            <td>${user.age}</td>
        </tr>
    </table>
    <a href="/user/add">添加用户</a>
</body>
</html>

以上就是完整的“构建SpringBoot+MyBatis+Freemarker的项目详解”的攻略。希望能对你有所帮助。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:构建SpringBoot+MyBatis+Freemarker的项目详解 - Python技术站

(0)
上一篇 2023年5月19日
下一篇 2023年5月19日

相关文章

  • Java使用JDBC驱动连接MySQL数据库

    以下是Java使用JDBC驱动连接MySQL数据库的完整攻略: 1. 下载JDBC驱动 首先,我们需要下载合适的JDBC驱动程序。可以在官方网站下载最新的JDBC驱动程序。下载后将其解压缩到本地磁盘。 2. 创建MySQL数据库 我们需要在本地的MySQL数据库中创建一个数据库供使用。如果您的系统中尚未安装MySQL数据库,需要在官方网站下载并安装,安装过程…

    Java 2023年5月19日
    00
  • 子线程任务发生异常时主线程事务回滚示例过程

    子线程任务发生异常时主线程事务回滚是一种常见的处理机制,下面我将为您提供一个完整的攻略来解释相关的过程。 首先,我们需要了解一些基本的知识点: 什么是子线程子线程就是在主线程之外启动的线程。子线程可以并行执行,无需等待主线程完成。 什么是主线程主线程是程序的入口,它负责启动并控制整个程序的执行流程。所有的子线程都是由主线程创建的。 什么是事务事务是一组相关的…

    Java 2023年5月26日
    00
  • 详解Maven settings.xml配置(指定本地仓库、阿里云镜像设置)

    详解Maven settings.xml配置(指定本地仓库、阿里云镜像设置) 在使用Maven构建Java项目的过程中,设置Maven的settings.xml配置文件可以更好地控制项目依赖包的下载以及本地仓库的位置。本文将详细介绍如何配置Maven的settings.xml文件。 本地仓库设置 本地仓库是用来存储本地构建的项目所需的依赖的地方。默认情况下,…

    Java 2023年5月20日
    00
  • spring无法引入注解及import org.springframework.web.bind.annotation.*报错的解决

    下面是关于“spring无法引入注解及import org.springframework.web.bind.annotation.*报错的解决”的完整攻略。 问题描述 当我们在Spring项目中引入注解或使用 org.springframework.web.bind.annotation.*包时,可能会出现以下问题:1. 编译时无法引入注解;2. 编译时报…

    Java 2023年5月19日
    00
  • Java Lock接口实现原理及实例解析

    Java Lock接口实现原理 Java Lock接口是Java中线程同步机制的一个重要组件。它可以替代传统的synchronized关键字实现线程同步,其主要实现原理是通过对一段代码区域进行加锁和解锁来实现线程同步。 Java Lock接口与synchronized关键字最大的区别就是它的锁具有可重入性。所谓可重入性,是指一个线程的已经获取的锁再次获取时会…

    Java 2023年5月18日
    00
  • 详解java连接mysql数据库的五种方式

    文章:详解Java连接MySQL数据库的五种方式 介绍 在Java应用中,我们经常需要连接数据库,而MySQL数据库是很受欢迎的一种关系型数据库。本文将详细介绍Java连接MySQL数据库的五种方式。 方式一:JDBC Java Database Connectivity (JDBC) 是Java平台下一项用于执行SQL语句的Java API,基本上,所有J…

    Java 2023年5月19日
    00
  • Java中对象的销毁方法分析

    Java是一种基于对象的编程语言,Java中的对象都是在堆内存中被创建。同时,Java提供垃圾回收器来回收不再使用的对象,从而避免内存泄漏问题。本篇攻略将深入讲解Java中对象的销毁方法,包括显示销毁和隐式销毁两种方式。 显示销毁 1.手动将对象设为null Java中的对象都是在堆内存中被创建,由垃圾回收器自动回收。但是,Java也提供了手动销毁对象的方式…

    Java 2023年5月26日
    00
  • JDK19新特性使用实例详解

    JDK19新特性使用实例详解 本文将详细讲解JDK19新特性的使用实例,并给出两条具体的示例说明。 1. Lambda表达式 Lambda表达式是JDK8引入的一个重要特性,它可以使代码更加简洁、易读。我们来看一个实例: // 普通的排序方法 Collections.sort(list, new Comparator<String>() { @O…

    Java 2023年5月26日
    00
合作推广
合作推广
分享本页
返回顶部