以下是详细讲解“构建SpringBoot+MyBatis+Freemarker的项目详解”的完整攻略。
1. 创建SpringBoot项目
首先,打开IDEA,点击创建一个新项目,选择Spring Initializr,选择构建工具为Maven,添加所需依赖,包含以下依赖:
Spring Web
MyBatis Framework
MySQL Driver
Freemarker
Lombok
这里使用的数据库为MySQL,可以根据自己的需要选择不同的数据库。
点击Finish完成项目创建。
2. 配置MyBatis
-
创建MyBatis的SQL映射文件,其中包含需要执行的SQL语句。
-
创建Mapper接口,其中定义对应的SQL语句方法。
-
在application.properties文件中配置数据库信息,包括数据库名、用户名和密码等。
-
加载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
-
创建Freemarker的模板文件,用于生成响应内容。
-
在application.properties中设置Freemarker的基本配置,如编码、模板文件位置等。
-
在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参数,查询对应的用户信息,并将查询结果展示在页面上。
-
在数据库中添加一张user表,包含字段id、name、sex和age。
-
创建User实体类,其中包含以上字段以及相应的get和set方法。
-
创建UserMapper和userMapper.xml文件,其中包括getUserById方法。
-
创建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:添加用户信息
我们要求通过表单提交,向数据库中添加一条用户信息,添加成功后展示成功信息,并给出链接跳转到对应用户信息页面。
-
在UserController中添加@GetMapping("/user/add")和@PostMapping("/user/add")两个方法,分别用来展示添加用户的表单页面和处理表单提交的结果。在@GetMapping("/user/add")方法中创建一个空的User对象,将其传递给ModelAndView,使表单可以根据User对象进行绑定和数据验证。
-
在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技术站