src/main/java ├─ com.example.config # 配置類 ├─ com.example.controller # 控制層 ├─ com.example.dao # 資料存取層 ├─ com.example.model # 實體類 └─ com.example.service # 業務層 src/main/resources ├─ application.properties # 資料源配置 ├─ mybatis-config.xml # MyBatis 全局配置(可選) └─ mapper/*.xml # SQL 映射檔
@Configuration
@EnableWebMvc
@ComponentScan("com.example")
public class WebMvcConfig implements WebMvcConfigurer {
@Override
public void configureViewResolvers(ViewResolverRegistry registry) {
registry.jsp("/WEB-INF/views/", ".jsp");
}
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("/static/**").addResourceLocations("/static/");
}
}
@Configuration
@MapperScan("com.example.dao")
public class MyBatisConfig {
@Bean
@ConfigurationProperties("spring.datasource")
public DataSource dataSource() {
return new HikariDataSource();
}
@Bean
public SqlSessionFactory sqlSessionFactory(DataSource dataSource) throws Exception {
SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
bean.setDataSource(dataSource);
bean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath:mapper/*.xml"));
return bean.getObject();
}
@Bean
public DataSourceTransactionManager txManager(DataSource dataSource) {
return new DataSourceTransactionManager(dataSource);
}
}
spring.datasource.url=jdbc:mysql://localhost:3306/test?useSSL=false&serverTimezone=GMT
spring.datasource.username=root
spring.datasource.password=root
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
// User.java
public class User {
private Integer id;
private String name;
private String pwd;
// getter/setter/toString
}
// UserDao.java
@Mapper
public interface UserDao {
@Select("SELECT * FROM user")
List findAll();
@Insert("INSERT INTO user(name, pwd) VALUES(#{name}, #{pwd})")
@Options(useGeneratedKeys = true, keyProperty = "id")
int insert(User user);
}
@Service
public class UserService {
@Autowired UserDao userDao;
public List list() { return userDao.findAll(); }
public void add(User u) { userDao.insert(u); }
}
@Controller
@RequestMapping("/user")
public class UserController {
@Autowired UserService userService;
@GetMapping("/list")
public String list(Model model) {
model.addAttribute("users", userService.list());
return "userList";
}
@PostMapping("/add")
public String add(User user) {
userService.add(user);
return "redirect:/user/list";
}
}
<%@ taglib prefix="c" uri="https://java.sun.com/jsp/jstl/core" %>
<table border="1">
<tr><th>ID</th><th>姓名</th><th>密碼</th></tr>
<c:forEach items="${users}" var="u">
<tr><td>${u.id}</td><td>${u.name}</td><td>${u.pwd}</td></tr>
</c:forEach>
</table>
<form action="/user/add" method="post">
姓名:<input name="name" /> 密碼:<input name="pwd" type="password" />
<button type="submit">新增</button>
</form>
public class WebAppInitializer extends AbstractAnnotationConfigDispatcherServletInitializer {
@Override protected Class>[] getRootConfigClasses() { return new Class[]{MyBatisConfig.class}; }
@Override protected Class>[] getServletConfigClasses() { return new Class[]{WebMvcConfig.class}; }
@Override protected String[] getServletMappings() { return new String[]{"/"}; }
}
Tomcat 啟動 → 訪問 https://localhost:8080/user/list → 顯示用戶列表 → 新增測試。