Springboot整合Mybatis web小项目
目录
1.在pom.xml导入相关的依赖.
Mybatis相关的依赖
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.1.1</version>
</dependency>
Mysql驱动相关的依赖
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.47</version>
<scope>runtime</scope>
</dependency>
Druid 连接池相关的依赖
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>1.1.17</version>
</dependency>
PageHelper 分页插件
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper-spring-boot-starter</artifactId>
<version>1.2.13</version>
</dependency>
2.建立数据库
建立部门表department
CREATE TABLE `department` (
`dept_id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键',
`dept_name` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '部门名称',
PRIMARY KEY (`dept_id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 1000 CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '部门表' ROW_FORMAT = Dynamic;
建立员工表:Employee
CREATE TABLE `employee` (
`emp_id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键',
`emp_name` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '员工名',
`dept_id` int(11) NOT NULL COMMENT '关联部门表主键',
`gender` varchar(10) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '性别',
`email` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '邮箱',
`phone` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '手机号',
`hire_date` datetime(0) DEFAULT NULL COMMENT '入职时间',
PRIMARY KEY (`emp_id`) USING BTREE,
INDEX `dept_id`(`dept_id`) USING BTREE,
CONSTRAINT `employee_ibfk_1` FOREIGN KEY (`dept_id`) REFERENCES `department` (`dept_id`) ON DELETE RESTRICT ON UPDATE RESTRICT
) ENGINE = InnoDB AUTO_INCREMENT = 1008 CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '员工表' ROW_FORMAT = Dynamic;
3.编写实体类Entity
1.Department.java
public class Department {
private Integer deptId;
private String deptName;
private List<Employee> employees;
public List<Employee> getEmployees() {
return employees;
}
public void setEmployees(List<Employee> employees) {
this.employees = employees;
}
public Integer getDeptId() {
return deptId;
}
public void setDeptId(Integer deptId) {
this.deptId = deptId;
}
public String getDeptName() {
return deptName;
}
public void setDeptName(String deptName) {
this.deptName = deptName;
}
@Override
public String toString() {
return "Department{" +
"deptId=" + deptId +
", deptName='" + deptName + '\'' +
", employees=" + employees +
'}';
}
}
2.Employee.java
public class Employee {
private Integer empId;
private String empName;
private String gender;
private String email;
private String phone;
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date hireDate;
//多对一
private Department department;
public Integer getEmpId() {
return empId;
}
public void setEmpId(Integer empId) {
this.empId = empId;
}
public String getEmpName() {
return empName;
}
public void setEmpName(String empName) {
this.empName = empName;
}
public String getGender() {
return gender;
}
public void setGender(String gender) {
this.gender = gender;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public String getPhone() {
return phone;
}
public void setPhone(String phone) {
this.phone = phone;
}
public Date getHireDate() {
return hireDate;
}
public void setHireDate(Date hireDate) {
this.hireDate = hireDate;
}
public Department getDepartment() {
return department;
}
public void setDepartment(Department department) {
this.department = department;
}
@Override
public String toString() {
return "Employee{" +
"empId=" + empId +
", empName='" + empName + '\'' +
", gender='" + gender + '\'' +
", email='" + email + '\'' +
", phone='" + phone + '\'' +
", hireDate=" + hireDate +
", department=" + department +
'}';
}
}
3.编写Mapper层
1.DepartmentMapper
@Mapper
@Repository
public interface DepartmentMapper {
/**
* 获取部门列表
* @return
*/
List<Department> getDepartmentList();
/**
* 根据部门ID查询部门信息
* @param deptId
* @return
*/
Department getDepartmentByDeptId(Integer deptId);
/**
* 根据部门ID查询部门详情
* @param deptId
* @return
*/
Department getDepartmentByDeptId_(Integer deptId);
}
2.EmployeeMapper
@Mapper
public interface EmployeeMapper {
/**
* 添加员工
* @param employee
*/
void addEmployee(Employee employee);
/**
* 删除员工
*/
void deleteEmployeeByEmpId(Integer empId);
/**
* 更新员工
*/
void updateEmployee(Employee employee);
/**
* 查询员工列表
* @return
*/
List<Employee> getEmployeeList();
/**
* 根据员工ID查询员工信息
* @param empId
* @return
*/
Employee getEmployeeByEmpId(Integer empId);
}
3.配置mapper.xml文件
通过用xml文件注解的形式实现上面的接口
departmentMapper.xml
<?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">
<mapper namespace="com.snow.mapper.DepartmentMapper">
<select id="getDepartmentList" resultType="department">
select * from department
</select>
<select id="getDepartmentByDeptId" resultType="department" parameterType="int">
SELECT * FROM department WHERE dept_Id=#{deptId}
</select>
<resultMap id="deptMap" type="department">
<id column="dept_id" property="deptId"></id>
<result column="dept_name" property="deptName"></result>
<collection property="employees" ofType="employee">
<id column="emp_id" property="empId"></id>
<result column="emp_name" property="empName"></result>
<result column="email" property="email"></result>
<result column="gender" property="gender"></result>
<result column="phone" property="phone"></result>
<result column="hire_date" property="hireDate"></result>
</collection>
</resultMap>
<select id="getDepartmentByDeptId_" parameterType="int" resultMap="deptMap">
select * FROM department d,employee e WHERE d.dept_id=e.dept_id and d.dept_id=#{deptId}
</select>
</mapper>
employeeMapper.xml
<?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">
<mapper namespace="com.snow.mapper.EmployeeMapper">
<resultMap id="empMap" type="employee">
<id column="emp_id" property="empId"></id>
<result column="emp_name" property="empName"></result>
<result column="gender" property="gender"></result>
<result column="email" property="email"></result>
<result column="phone" property="phone"></result>
<result column="hire_Date" property="hireDate"></result>
<association property="department" javaType="department">
<id column="dept_id" property="deptId"></id>
<result column="dept_name" property="deptName"></result>
</association>
</resultMap>
<!--根据用户id查询员工信息-->
<select id="getEmployeeByEmpId" resultMap="empMap" parameterType="int">
select * from employee e,department d where e.dept_id=d.dept_id and e.emp_id=#{empId}
</select>
<resultMap id="empMap_" type="employee">
<id column="emp_id" property="empId"></id>
<result column="emp_name" property="empName"></result>
<result column="gender" property="gender"></result>
<result column="email" property="email"></result>
<result column="phone" property="phone"></result>
<result column="hire_date" property="hireDate"></result>
<association property="department" column="dept_id" javaType="department" select="com.snow.mapper.DepartmentMapper.getDepartmentByDeptId"></association>
</resultMap>
<!--查询全部-->
<select id="getEmployeeList" resultMap="empMap_">
SELECT * FROM employee e,department d where e.dept_id=d.dept_id
</select>
<!--添加用户-->
<insert id="addEmployee" parameterType="employee" useGeneratedKeys="true" keyProperty="empId">
INSERT into employee
(emp_name,gender,email,phone,hire_date,dept_id)
VALUES
(#{empName},#{gender},#{email},#{phone},#{hireDate},#{department.deptId})
</insert>
<!--删除员工-->
<delete id="deleteEmployeeByEmpId" parameterType="int" >
DELETE FROM employee WHERE emp_id=#{empId}
</delete>
<!--更新员工-->
<update id="updateEmployee" parameterType="employee">
UPDATE employee
<set>
<if test="empName!=null">emp_name=#{empName},</if>
<if test="gender!=null">gender=#{gender},</if>
<if test="email!=null">email=#{email},</if>
<if test="phone!=null">phone=#{phone},</if>
<if test="hireDate!=null">hire_date=#{hireDate},</if>
<if test="department!=null and department.deptId!=null">dept_id=#{department.deptId}</if>
</set>
<where>
emp_id=#{empId}
</where>
</update>
</mapper>
4.配置application.properties
spring.datasource.username=root
spring.datasource.password=123456
spring.datasource.url=jdbc:mysql://localhost:3306/emp_manager?characterEncoding=utf-8&useSSL=false&unicode=true&serverTimezone=UTC
#mybatis
mybatis.mapper-locations=classpath:mapper/*.xml
mybatis.type-aliases-package=com.snow.entity
mybatis.configuration.map-underscore-to-camel-case=true
#thymeleaf
spring.thymeleaf.mode=HTML5
spring.thymeleaf.cache=false
spring.thymeleaf.encoding=UTF-8
#json时间格式化配置
spring.jackson.date-format=yyyy-MM-dd HH:mm:ss
5.Service层
1.departmentService
public interface DeptService {
/**
* 获取部门列表
* @return
*/
List<Department> getDepartmentList();
}
2.employeeService
public interface EmpService {
/**
* 添加员工
* @param employee
*/
void addEmployee(Employee employee);
/**
* 删除员工
*/
void deleteEmployeeByEmpId(Integer empId);
/**
* 更新员工
*/
void updateEmployee(Employee employee);
/**
* 查询员工列表
* @return
*/
Page<Employee> getEmployeeList(int pageNo,int pageSize);
/**
* 根据员工ID查询员工信息
* @param empId
* @return
*/
Employee getEmployeeByEmpId(Integer empId);
}
3.Impl实现上面的两个接口,一般都是这样开发的
1.departmentServiceImpl.java
@Service
@Repository
public class DeptServiceImpl implements DeptService {
@Autowired
private DepartmentMapper departmentMapper;
@Override
public List<Department> getDepartmentList() {
return departmentMapper.getDepartmentList();
}
}
2.EmployeeServiceImpl.java
@Service
public class EmpServiceImpl implements EmpService {
@Autowired
private EmployeeMapper employeeMapper;
@Override
public void addEmployee(Employee employee) {
employeeMapper.addEmployee(employee);
}
@Override
public void deleteEmployeeByEmpId(Integer empId) {
employeeMapper.deleteEmployeeByEmpId(empId);
}
@Override
public void updateEmployee(Employee employee) {
employeeMapper.updateEmployee(employee);
}
@Override
public Page<Employee> getEmployeeList(int pageNo,int pageSize) {
Page<Employee> page = new Page<>();
PageHelper.startPage(pageNo,pageSize);
List<Employee> employeeList = employeeMapper.getEmployeeList();
PageInfo<Employee> info = new PageInfo<>(employeeList);
page.setPage(info.getList());
page.setPageCount(info.getPages());
page.setPageNo(info.getPageNum());
page.setHasNext(info.isHasNextPage());
page.setHasPre(info.isHasPreviousPage());
return page;
}
@Override
public Employee getEmployeeByEmpId(Integer empId) {
return employeeMapper.getEmployeeByEmpId(empId);
}
}
6.Controller层
EmpController.java
@Controller
public class EmpController {
@Autowired
private EmpService empService;
@Autowired
private DeptService deptService;
/*获取所有用户*/
@GetMapping("/allemp")
public String allEmpList(Integer pageNo, Integer pageSize, Model model){
if (pageNo==null){
pageNo=1;
}
if (pageSize==null){
pageSize=5;
}
Page<Employee> employeeList = empService.getEmployeeList(pageNo, pageSize);
System.out.println(employeeList);
model.addAttribute("employees",employeeList);
return "employee_list";
}
/*添加页面*/
@GetMapping("/addEmp")
public String goAddHtml(Model model){
List<Department> departmentList = deptService.getDepartmentList();
model.addAttribute("depts",departmentList);
return "employee_add";
}
/*添加用户*/
@PostMapping("/insertEmp")
public String addEmp(Employee employee){
empService.addEmployee(employee);
return "redirect:/allemp";
}
/*删除用户*/
@GetMapping("/delemp/{empId}")
public String delEmpById(@PathVariable("empId") Integer empId){
empService.deleteEmployeeByEmpId(empId);
return "redirect:/allemp";
}
/*更新用户页面*/
@GetMapping("/upup")
public String upEmp(Integer empId,Model model){
List<Department> departmentList = deptService.getDepartmentList();
model.addAttribute("departments",departmentList);
Employee employeeByEmpId = empService.getEmployeeByEmpId(empId);
model.addAttribute("emps",employeeByEmpId);
return "employee_update";
}
/*更新员工信息*/
@GetMapping("/upEmp")
public String upupEmp(Employee employee){
empService.updateEmployee(employee);
return "redirect:/allemp";
}
/*获取分页数据*/
@ResponseBody
@GetMapping("/pagedata")
public Page<Employee> getPageData(Integer pageNo,Integer pageSize){
if (pageNo==null){
pageNo=1;
}
if (pageSize==null){
pageSize=5;
}
return empService.getEmployeeList(pageNo,pageSize);
}
}
7.页面实现的效果
在浏览器输入localhost:8080
总结:上面是我用Sspringboot 实现的一个小Demo ,适合新手小白入手,熟悉springboot的使用。