• SpringBoot: 10.整合mybatis(转)


     

    需求:通过使用 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、最后目录结构

  • 相关阅读:
    08.设计模式,和ES6let
    H5之本地存储
    07..前后台交互,设计模式
    查询出总数集合
    06.JSON+ajax+跨域+onde 环境搭建 笔记
    05 this 在不同环境下的指向 和正则
    04学习 JS 作用域 继承 闭包
    技术盛宴 | 从实战浅析运营商云资源池—解析流量模型
    从实战浅析运营商云资源池网络—技术的抉择
    ovn-sbctl
  • 原文地址:https://www.cnblogs.com/kuangzhisen/p/10427167.html
Copyright © 2020-2023  润新知