需求:通过使用 SpringBoot+SpringMVC+MyBatis 整合实现一个对数据库中的 t_user 表的 CRUD 的操作
1、创建maven项目,添加项目所需依赖
<!--springboot项目依赖的父项目--> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.0.0.RELEASE</version> </parent> <dependencies> <!--注入springboot启动器--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <!--注入springboot对thymeleaf视图技术的支持--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-thymeleaf</artifactId> </dependency> <!--mybaits启动器,注入springboot对mybatis的支持--> <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>1.1.1</version> </dependency> <!-- mysql 数据库驱动 --> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> </dependency> <!-- 阿里巴巴druid数据库连接池 --> <dependency> <groupId>com.alibaba</groupId> <artifactId>druid</artifactId> <version>1.0.9</version> </dependency> <!-- jpa实体类规范 --> <dependency> <groupId>javax.persistence</groupId> <artifactId>persistence-api</artifactId> <version>1.0</version> </dependency> </dependencies>
2、在resource文件夹下添加application.properties全局配置文件
#数据库连接信息 spring.datasource.driverClassName=com.mysql.jdbc.Driver spring.datasource.url=jdbc:mysql://127.0.0.1:3306/springboot spring.datasource.username=root spring.datasource.password=duan #数据库连接池 spring.datasource.type=com.alibaba.druid.pool.DruidDataSource #配置mybatis中实体类xml配置文件中实体类所在文件夹,如果配置了,在xml配置文件中参数、返回值实体类可以不写包名 mybatis.type-aliases-package=com.bjsxt.pojo #mapper接口xml文件所在位置 mybatis.mapper-locations=classpath:mapping/*.xml
3、数据库设计
创建数据库
DROP TABLE IF EXISTS `t_user`; CREATE TABLE `t_user` ( `id` bigint(10) NOT NULL AUTO_INCREMENT, `name` varchar(255) DEFAULT NULL, `age` smallint(3) DEFAULT NULL, `hobby` varchar(255) DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8;
添加数据
INSERT INTO `t_user` VALUES (‘1‘, ‘张三‘, ‘22‘, ‘羽毛球‘); INSERT INTO `t_user` VALUES (‘2‘, ‘李四‘, ‘20‘, ‘篮球‘); INSERT INTO `t_user` VALUES (‘3‘, ‘王五‘, ‘24‘, ‘排球‘);
4、创建实体类User
package com.bjsxt.pojo; import javax.persistence.*; /** * Created by Administrator on 2019/2/10. */ @Entity @Table(name = "t_user") public class User { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Column(name = "id") private Long id; @Column(name = "name") private String name; @Column(name = "age") private int age; @Column(name = "hobby") private String hobby; public Long getId() { return id; } public void setId(Long id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public String getHobby() { return hobby; } public void setHobby(String hobby) { this.hobby = hobby; } }
5、创建mapper接口以及接口映射的配置文件
package com.bjsxt.mapper; import com.bjsxt.pojo.User; import org.apache.ibatis.annotations.Mapper; import java.util.List; /** * Created by Administrator on 2019/2/10. */ public interface UserMapper { /** * 查询所有的用户 * @return */ List<User> selectAllUser(); /** * 查询单个用户 */ User selectUserById(Integer id); /** * 添加用户 */ void addUser(User user); /** * 修改用户 */ void updateUser(User user); /** * 删除用户 */ void deleteUser(Integer id); }
<?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.bjsxt.mapper.UserMapper"> <select id="selectAllUser" resultType="User"> select * from t_user; </select> <select id="selectUserById" parameterType="java.lang.Integer" resultType="User"> select * from t_user where id=#{id}; </select> <insert id="addUser" parameterType="User"> insert into t_user(name,age,hobby) values(#{name},#{age},#{hobby}); </insert> <update id="updateUser" parameterType="User"> update t_user set name=#{name},age=#{age},hobby=#{hobby} where id=#{id}; </update> <delete id="deleteUser" parameterType="java.lang.Integer"> delete from t_user where id=#{id}; </delete> </mapper>
6、创建业务层
接口:
package com.bjsxt.service; import com.bjsxt.pojo.User; import java.util.List; /** * Created by Administrator on 2019/2/10. */ public interface UserService { /** * 查询所有的用户 * @return */ List<User> selectAllUser(); /** * 查询单个用户 */ User selectUserById(Integer id); /** * 添加用户 */ void addUser(User user); /** * 修改用户 */ void updateUser(User user); /** * 删除用户 */ void deleteUser(Integer id); }
实现类
package com.bjsxt.service.impl; import com.bjsxt.mapper.UserMapper; import com.bjsxt.pojo.User; import com.bjsxt.service.UserService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.util.List; /** * Created by Administrator on 2019/2/10. */ @Service @Transactional //service层打开事务 public class UserServiceImpl implements UserService { @Autowired private UserMapper userMapper; @Override public List<User> selectAllUser() { return userMapper.selectAllUser(); } @Override public User selectUserById(Integer id) { return userMapper.selectUserById(id); } @Override public void addUser(User user) { userMapper.addUser(user); } @Override public void updateUser(User user) { userMapper.updateUser(user); } @Override public void deleteUser(Integer id) { userMapper.deleteUser(id); } }
7、创建controller
package com.bjsxt.controller; import com.bjsxt.pojo.User; import com.bjsxt.service.UserService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import javax.servlet.http.HttpServletRequest; /** * Created by Administrator on 2019/2/10. */ @Controller @RequestMapping("user") public class UserController { @Autowired private UserService userService; /** * 去用户列表页面 * @param model * @return */ @RequestMapping("toUserList") public String toUserList(Model model){ model.addAttribute("userList",userService.selectAllUser()); return "user_list"; } /** * 去用户编辑添加页面 */ @RequestMapping("toUserEdit") public String toUserEdit(HttpServletRequest request,Model model){ String id=request.getParameter("id"); if(null!=id&&!"".equals(id)){ //编辑 User user=userService.selectUserById(Integer.parseInt(id)); model.addAttribute("user",user); } return "user_edit"; } /** * 用户添加或编辑 */ @RequestMapping(value = "userEdit",method = RequestMethod.POST) public String userEdit(HttpServletRequest request,User user){ if(null!=user.getId()&&!"".equals(user.getId())){ //编辑 userService.updateUser(user); }else{ //添加 userService.addUser(user); } return "redirect:/user/toUserList"; } /** * 用户删除 */ @RequestMapping("deleteUser") public String deleteUser(Integer id){ userService.deleteUser(id); return "redirect:/user/toUserList"; } }
8、编写页面,视图层采用thymeleaf技术
用户列表页面user_list.html
<!DOCTYPE html > <html lang="en" xmlns:th="http://www.thymeleaf.org"> <head> <meta charset="UTF-8"> <title>用户列表</title> </head> <body> <div> <div><a href="toUserEdit">添加</a></div> <table> <tr> <th>用户id</th> <th>用户姓名</th> <th>用户年龄</th> <th>用户爱好</th> <th>操作</th> </tr> <tr th:each="user:${userList}"> <td th:text="${user.id}"></td> <td th:text="${user.name}"></td> <td th:text="${user.age}"></td> <td th:text="${user.hobby}"></td> <td> <a th:href="@{/user/toUserEdit(id=${user.id})}">编辑</a> <a th:href="@{/user/deleteUser(id=${user.id})}">删除</a> </td> </tr> </table> </div> </body> </html>
用户添加编辑页面user_edit.html
<!DOCTYPE html> <html lang="en" xmlns:th="http://www.thymeleaf.org"> <head> <meta charset="UTF-8"> <title>用户编辑添加</title> </head> <body> <form action="/user/userEdit" method="post"> <input type="hidden" name="id" th:field="${user.id}"> 用户姓名:<input type="text" name="name" th:field="${user.name}"><br /> 用户年龄:<input type="text" name="age" th:field="${user.age}"><br /> 用户爱好:<input type="text" name="hobby" th:field="${user.hobby}"><br /> <input type="submit" value="提交"> </form> </body> </html>
9、编写启动类
package com.bjsxt; import org.mybatis.spring.annotation.MapperScan; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; /** * Created by Administrator on 2019/2/10. */ @SpringBootApplication @MapperScan("com.bjsxt.mapper") //指定mapper接口所在的位置 public class App { public static void main(String[] args){ SpringApplication.run(App.class,args); } }
在浏览器中访问即可http://localhost:8080/user/toUserList
10、最后目录结构