controller 存放控制器(Controller)类,处理请求和返回响应。
mapper 存放数据访问层(Mapper)接口和对应的XML文件。
model 存放模型(Model)类,与数据库表对应。
service 存放服务(Service)接口和实现类
impl
resources
mapper文件 存放Mapper接口对应的XML文件,定义SQL语句和映射关系。
mybatis-config.xml:MyBatis的主配置文件,配置数据库连接等全局设置。
db.properties:数据库连接信息的配置文件。
project-name
├── src
│ ├── main
│ │ ├── java # Java代码目录
│ │ │ ├── com.example.project.controller # 控制器包
│ │ │ ├── com.example.project.mapper # Mapper接口和XML文件包
│ │ │ ├── com.example.project.model # 模型包
│ │ │ ├── com.example.project.service # 业务逻辑包
│ │ │ └── com.example.project.util # 工具类包
│ │ ├── resources # 资源目录
│ │ │ ├── mapper # 存放Mapper对应的XML文件
│ │ │ ├── mybatis-config.xml # MyBatis主配置文件
│ │ │ └── db.properties # 数据库连接配置文件
│ │ └── webapp # Web资源目录
│ │ ├── WEB-INF # Web应用配置目录
│ │ │ ├── web.xml # Web应用配置文件
│ │ │ └── spring.xml # Spring配置文件(如果使用Spring)
│ │ ├── index.jsp # 首页JSP文件
│ │ └── static # 静态资源目录
│ │ ├── css # CSS文件目录
│ │ ├── js # JavaScript文件目录
│ │ └── images # 图片目录
└── pom.xml # Maven项目配置文件
public class Student {
private Long id;
private String name;
private Integer age;
private String gender;
// getter 和 setter 方法省略
}
// 2. 定义数据访问层接口和映射文件
package com.example.mapper;
public interface StudentMapper {
void insert(Student student); // 插入学生信息
void delete(Long id); // 删除学生信息
void update(Student student); // 更新学生信息
Student selectById(Long id); // 根据ID查询学生信息
List<Student> selectAll(); // 查询所有学生信息
}
<?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" >
<!-- StudentMapper.xml -->
<!-- 映射SQL语句和Java对象之间的关系 -->
<mapper namespace="com.example.mapper.StudentMapper">
<!-- 定义结果映射 -->
<resultMap id="StudentResultMap" type="com.example.model.Student">
<id column="id" property="id"/>
<result column="name" property="name"/>
<result column="age" property="age"/>
<result column="gender" property="gender"/>
</resultMap>
<!-- 插入学生信息 -->
<insert id="insert" parameterType="com.example.model.Student">
INSERT INTO student(name, age, gender) VALUES(#{name}, #{age}, #{gender})
</insert>
<!-- 删除学生信息 -->
<delete id="delete" parameterType="java.lang.Long">
DELETE FROM student WHERE id=#{id}
</delete>
<!-- 更新学生信息 -->
<update id="update" parameterType="com.example.model.Student">
UPDATE student SET name=#{name}, age=#{age}, gender=#{gender} WHERE id=#{id}
</update>
<!-- 根据ID查询学生信息 -->
<select id="selectById" resultMap="StudentResultMap">
SELECT * FROM student WHERE id=#{id}
</select>
<!-- 查询所有学生信息 -->
<select id="selectAll" resultMap="StudentResultMap">
SELECT * FROM student
</select>
</mapper>
// 3. 定义服务层接口和实现类
package com.example.service;
public interface StudentService {
void add(Student student); // 添加学生信息
void remove(Long id); // 删除学生信息
void modify(Student student); // 修改学生信息
Student findById(Long id); // 根据ID查询学生信息
List<Student> findAll(); // 查询所有学生信息
}
@Service
public class StudentServiceImpl implements StudentService {
@Autowired
private StudentMapper studentMapper;
@Override
public void add(Student student) {
studentMapper.insert(student);
}
@Override
public void remove(Long id) {
studentMapper.delete(id);
}
@Override
public void modify(Student student) {
studentMapper.update(student);
}
@Override
public Student findById(Long id) {
return studentMapper.selectById(id);
}
@Override
public List<Student> findAll() {
return studentMapper.selectAll();
}
}
创建名为 StudentController 的 Java 类
// 4. 编写控制器类
@Controller
public class StudentController {
@Autowired
private StudentService studentService;
// 处理显示学生列表的请求
@GetMapping("/students")
public ModelAndView showStudents() {
List<Student> students = studentService.findAll();
ModelAndView mav = new ModelAndView("students"); // 返回视图名为"students"
mav.addObject("students", students); // 将学生列表添加到模型中
return mav;
}
// 处理显示添加学生页面的请求
@GetMapping("/students/new")
public ModelAndView showAddStudentForm() {
ModelAndView mav = new ModelAndView("add_student_form"); // 返回视图名为"add_student_form"
mav.addObject("student", new Student()); // 创建一个空的学生对象,并添加到模型中
return mav;
}
// 处理提交添加学生的请求
@PostMapping("/students")
public String addStudent(@ModelAttribute("student") Student student) {
studentService.add(student);
return "redirect:/students"; // 重定向到学生列表页面
}
// 处理显示修改学生页面的请求
@GetMapping("/students/{id}/edit")
public ModelAndView showEditStudentForm(@PathVariable Long id) {
Student student = studentService.findById(id);
ModelAndView mav = new ModelAndView("edit_student_form"); // 返回视图名为"edit_student_form"
mav.addObject("student", student); // 将要修改的学生对象添加到模型中
return mav;
}
// 处理提交修改学生的请求
@PutMapping("/students/{id}")
public String updateStudent(@PathVariable Long id, @ModelAttribute("student") Student student) {
student.setId(id);
studentService.modify(student);
return "redirect:/students"; // 重定向到学生列表页面
}
// 处理删除学生的请求
@DeleteMapping("/students/{id}")
public String deleteStudent(@PathVariable Long id) {
studentService.remove(id);
return "redirect:/students"; // 重定向到学生列表页面
}
}
在resources进行配置
在resources新建一个mapper文件
存放Mapper接口对应的XML文件,定义SQL语句和映射关系。
数据库连接信息的配置文件。
driver=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/student?useSSL=false
user=root
pwd=123456789
配置 Spring 容器和 MyBatis 相关内容,如数据源、事务管理等
<!-- 配置数据源 -->
<bean id="dataSource" class="com.zaxxer.hikari.HikariDataSource">
<property name="driverClassName" value="${spring.datasource.driver-class-name}"/>
<property name="jdbcUrl" value="${spring.datasource.url}"/>
<property name="username" value="${spring.datasource.username}"/>
<property name="password" value="${spring.datasource.password}"/>
<property name="minimumIdle" value="${spring.datasource.hikari.minimumIdle}"/>
<property name="maximumPoolSize" value="${spring.datasource.hikari.maximumPoolSize}"/>
</bean>
<!-- 配置 SqlSessionFactory -->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource"/>
<property name="mapperLocations" value="classpath:mapper/*.xml"/>
</bean>
<!-- 配置 MapperScannerConfigurer -->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="basePackage" value="com.example.mapper"/>
</bean>
<!-- 配置事务管理器 -->
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource"/>
</bean>
<!-- 开启基于注解的事务 -->
<tx:annotation-driven transaction-manager="transactionManager"/>
配置 SpringMVC 相关内容,例如视图解析器、处理器映射等
<mvc:annotation-driven/>
<bean id="viewResolver"
class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/jsp/"/>
<property name="suffix" value=".jsp"/>
</bean>
<mvc:resources mapping="/static/**" location="/static/"/>
<mvc:interceptors>
<mvc:interceptor>
<mvc:mapping path="/**"/>
<bean class="com.example.interceptor.TimeInterceptor"></bean>
</mvc:interceptor>
</mvc:interceptors>