SpringMVC MyBatis整合实例代码详解
SpringMVC和MyBatis是两个非常流行的Java Web框架,它们都有自己的优点和特点。在本文中,我们将详细讲解如何将SpringMVC和MyBatis整合起来,以便更好地开发Web应用程序。
整合步骤
整合SpringMVC和MyBatis需要以下步骤:
- 添加依赖
- 配置数据源
- 配置MyBatis
- 配置SpringMVC
- 编写代码
下面我们将逐一讲解这些步骤。
添加依赖
首先,我们需要添加SpringMVC和MyBatis的依赖。下面是一个使用Maven的示例:
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>5.3.9</version>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.7</version>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>2.0.7</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.2.8</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.25</version>
</dependency>
</dependencies>
在上面的代码中,我们添加了SpringMVC、MyBatis、Druid和MySQL的依赖。
配置数据源
接下来,我们需要配置数据源。在本文中,我们使用Druid作为数据源。下面是一个使用Druid的示例:
@Configuration
public class DataSourceConfig {
@Bean
public DataSource dataSource() {
DruidDataSource dataSource = new DruidDataSource();
dataSource.setDriverClassName("com.mysql.cj.jdbc.Driver");
dataSource.setUrl("jdbc:mysql://localhost:3306/test?useSSL=false&serverTimezone=UTC");
dataSource.setUsername("root");
dataSource.setPassword("password");
return dataSource;
}
}
在上面的代码中,我们使用@Configuration注解来配置数据源,并使用@Bean注解来创建DruidDataSource对象。我们还设置了数据库的URL、用户名和密码。
配置MyBatis
接下来,我们需要配置MyBatis。下面是一个使用MyBatis的示例:
@Configuration
@MapperScan("com.example.mapper")
public class MyBatisConfig {
@Autowired
private DataSource dataSource;
@Bean
public SqlSessionFactoryBean sqlSessionFactory() throws Exception {
SqlSessionFactoryBean sessionFactory = new SqlSessionFactoryBean();
sessionFactory.setDataSource(dataSource);
sessionFactory.setTypeAliasesPackage("com.example.entity");
return sessionFactory;
}
@Bean
public MapperScannerConfigurer mapperScannerConfigurer() {
MapperScannerConfigurer scannerConfigurer = new MapperScannerConfigurer();
scannerConfigurer.setBasePackage("com.example.mapper");
return scannerConfigurer;
}
}
在上面的代码中,我们使用@Configuration注解来配置MyBatis,并使用@MapperScan注解来扫描Mapper接口。我们还使用@Autowired注解来注入数据源,并使用SqlSessionFactoryBean来创建SqlSessionFactory对象。我们还使用MapperScannerConfigurer来扫描Mapper接口。
配置SpringMVC
接下来,我们需要配置SpringMVC。下面是一个使用SpringMVC的示例:
@Configuration
@EnableWebMvc
@ComponentScan(basePackages = "com.example.controller")
public class MvcConfig implements WebMvcConfigurer {
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("/static/**").addResourceLocations("/static/");
}
@Bean
public InternalResourceViewResolver viewResolver() {
InternalResourceViewResolver viewResolver = new InternalResourceViewResolver();
viewResolver.setPrefix("/WEB-INF/views/");
viewResolver.setSuffix(".jsp");
return viewResolver;
}
}
在上面的代码中,我们使用@Configuration注解来配置SpringMVC,并使用@EnableWebMvc注解来启用SpringMVC。我们还使用@ComponentScan注解来扫描Controller。我们还使用addResourceHandlers方法来添加静态资源处理器,并使用InternalResourceViewResolver来配置视图解析器。
编写代码
最后,我们需要编写代码。下面是一个使用SpringMVC和MyBatis的示例:
@Controller
public class UserController {
@Autowired
private UserService userService;
@GetMapping("/users")
public String getUsers(Model model) {
List<User> users = userService.getUsers();
model.addAttribute("users", users);
return "users";
}
}
@Service
public class UserServiceImpl implements UserService {
@Autowired
private UserMapper userMapper;
@Override
public List<User> getUsers() {
return userMapper.getUsers();
}
}
public interface UserMapper {
List<User> getUsers();
}
public class User {
private Long id;
private String name;
private Integer age;
// getters and setters
}
public interface UserService {
List<User> getUsers();
}
在上面的代码中,我们创建了一个名为“UserController”的Controller,并注入了一个名为“userService”的Service。我们还创建了一个名为“UserServiceImpl”的Service,并注入了一个名为“userMapper”的Mapper。我们还创建了一个名为“UserMapper”的Mapper接口,并创建了一个名为“User”的实体类。我们还创建了一个名为“UserService”的Service接口。
示例说明
示例1:使用SpringMVC和MyBatis查询用户列表
在本示例中,我们将使用SpringMVC和MyBatis查询用户列表。我们将创建一个名为“UserController”的Controller,并注入一个名为“userService”的Service。我们还将创建一个名为“UserServiceImpl”的Service,并注入一个名为“userMapper”的Mapper。我们还将创建一个名为“UserMapper”的Mapper接口,并创建一个名为“User”的实体类。我们还将创建一个名为“UserService”的Service接口。
在UserController中添加以下方法:
@GetMapping("/users")
public String getUsers(Model model) {
List<User> users = userService.getUsers();
model.addAttribute("users", users);
return "users";
}
在UserServiceImpl中添加以下方法:
@Override
public List<User> getUsers() {
return userMapper.getUsers();
}
在UserMapper中添加以下方法:
List<User> getUsers();
在User中添加以下属性和方法:
private Long id;
private String name;
private Integer age;
// getters and setters
在UserService中添加以下方法:
List<User> getUsers();
在MyBatisConfig中添加以下方法:
@Bean
public SqlSessionFactoryBean sqlSessionFactory() throws Exception {
SqlSessionFactoryBean sessionFactory = new SqlSessionFactoryBean();
sessionFactory.setDataSource(dataSource);
sessionFactory.setTypeAliasesPackage("com.example.entity");
sessionFactory.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath*:mapper/*.xml"));
return sessionFactory;
}
在resources目录下创建一个名为“mapper”的目录,并在其中创建一个名为“UserMapper.xml”的文件,内容如下:
<mapper namespace="com.example.mapper.UserMapper">
<select id="getUsers" resultType="com.example.entity.User">
select * from user
</select>
</mapper>
在WEB-INF目录下创建一个名为“views”的目录,并在其中创建一个名为“users.jsp”的文件,内容如下:
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Users</title>
</head>
<body>
<table>
<thead>
<tr>
<th>ID</th>
<th>Name</th>
<th>Age</th>
</tr>
</thead>
<tbody>
<c:forEach items="${users}" var="user">
<tr>
<td>${user.id}</td>
<td>${user.name}</td>
<td>${user.age}</td>
</tr>
</c:forEach>
</tbody>
</table>
</body>
</html>
在MvcConfig中添加以下方法:
@Bean
public InternalResourceViewResolver viewResolver() {
InternalResourceViewResolver viewResolver = new InternalResourceViewResolver();
viewResolver.setPrefix("/WEB-INF/views/");
viewResolver.setSuffix(".jsp");
return viewResolver;
}
在DataSourceConfig中添加以下方法:
@Bean
public DataSource dataSource() {
DruidDataSource dataSource = new DruidDataSource();
dataSource.setDriverClassName("com.mysql.cj.jdbc.Driver");
dataSource.setUrl("jdbc:mysql://localhost:3306/test?useSSL=false&serverTimezone=UTC");
dataSource.setUsername("root");
dataSource.setPassword("password");
dataSource.setInitialSize(5);
dataSource.setMinIdle(5);
dataSource.setMaxActive(20);
dataSource.setMaxWait(60000);
dataSource.setTimeBetweenEvictionRunsMillis(60000);
dataSource.setMinEvictableIdleTimeMillis(300000);
dataSource.setValidationQuery("SELECT 1 FROM DUAL");
dataSource.setTestWhileIdle(true);
dataSource.setTestOnBorrow(false);
dataSource.setTestOnReturn(false);
dataSource.setPoolPreparedStatements(true);
dataSource.setMaxPoolPreparedStatementPerConnectionSize(20);
dataSource.setFilters("stat,wall");
return dataSource;
}
在上面的代码中,我们使用DruidDataSource来配置数据源,并设置了一些连接池的参数。我们还使用SqlSessionFactoryBean来配置MyBatis,并使用@MapperScan注解来扫描Mapper接口。我们还使用InternalResourceViewResolver来配置视图解析器,并使用@GetMapping注解来处理GET请求。
示例2:使用SpringMVC和MyBatis添加用户
在本示例中,我们将使用SpringMVC和MyBatis添加用户。我们将创建一个名为“UserController”的Controller,并注入一个名为“userService”的Service。我们还将创建一个名为“UserServiceImpl”的Service,并注入一个名为“userMapper”的Mapper。我们还将创建一个名为“UserMapper”的Mapper接口,并创建一个名为“User”的实体类。我们还将创建一个名为“UserService”的Service接口。
在UserController中添加以下方法:
@GetMapping("/add")
public String addUserForm(Model model) {
model.addAttribute("user", new User());
return "addUser";
}
@PostMapping("/add")
public String addUser(@ModelAttribute("user") User user) {
userService.addUser(user);
return "redirect:/users";
}
在UserServiceImpl中添加以下方法:
@Override
public void addUser(User user) {
userMapper.addUser(user);
}
在UserMapper中添加以下方法:
void addUser(User user);
在User中添加以下属性和方法:
private Long id;
private String name;
private Integer age;
// getters and setters
在UserService中添加以下方法:
void addUser(User user);
在MyBatisConfig中添加以下方法:
@Bean
public MapperScannerConfigurer mapperScannerConfigurer() {
MapperScannerConfigurer scannerConfigurer = new MapperScannerConfigurer();
scannerConfigurer.setBasePackage("com.example.mapper");
Properties properties = new Properties();
properties.setProperty("mappers", "org.apache.ibatis.annotations.Mapper");
properties.setProperty("notEmpty", "false");
properties.setProperty("IDENTITY", "MYSQL");
scannerConfigurer.setProperties(properties);
return scannerConfigurer;
}
在resources目录下创建一个名为“mapper”的目录,并在其中创建一个名为“UserMapper.xml”的文件,内容如下:
<mapper namespace="com.example.mapper.UserMapper">
<insert id="addUser" parameterType="com.example.entity.User">
insert into user(name, age) values(#{name}, #{age})
</insert>
</mapper>
在WEB-INF目录下创建一个名为“views”的目录,并在其中创建一个名为“addUser.jsp”的文件,内容如下:
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Add User</title>
</head>
<body>
<form method="post" action="/add">
<label>Name:</label>
<input type="text" name="name" required>
<br>
<label>Age:</label>
<input type="number" name="age" required>
<br>
<button type="submit">Add User</button>
</form>
</body>
</html>
在MvcConfig中添加以下方法:
@Bean
public InternalResourceViewResolver viewResolver() {
InternalResourceViewResolver viewResolver = new InternalResourceViewResolver();
viewResolver.setPrefix("/WEB-INF/views/");
viewResolver.setSuffix(".jsp");
return viewResolver;
}
在DataSourceConfig中添加以下方法:
@Bean
public DataSource dataSource() {
DruidDataSource dataSource = new DruidDataSource();
dataSource.setDriverClassName("com.mysql.cj.jdbc.Driver");
dataSource.setUrl("jdbc:mysql://localhost:3306/test?useSSL=false&serverTimezone=UTC");
dataSource.setUsername("root");
dataSource.setPassword("password");
dataSource.setInitialSize(5);
dataSource.setMinIdle(5);
dataSource.setMaxActive(20);
dataSource.setMaxWait(60000);
dataSource.setTimeBetweenEvictionRunsMillis(60000);
dataSource.setMinEvictableIdleTimeMillis(300000);
dataSource.setValidationQuery("SELECT 1 FROM DUAL");
dataSource.setTestWhileIdle(true);
dataSource.setTestOnBorrow(false);
dataSource.setTestOnReturn(false);
dataSource.setPoolPreparedStatements(true);
dataSource.setMaxPoolPreparedStatementPerConnectionSize(20);
dataSource.setFilters("stat,wall");
return dataSource;
}
在上面的代码中,我们使用DruidDataSource来配置数据源,并设置了一些连接池的参数。我们还使用SqlSessionFactoryBean来配置MyBatis,并使用MapperScannerConfigurer来扫描Mapper接口。我们还使用InternalResourceViewResolver来配置视图解析器,并使用@GetMapping和@PostMapping注解来处理GET和POST请求。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:SpringMVC mybatis整合实例代码详解 - Python技术站