美文网首页
SpringBoot整合MyBatis

SpringBoot整合MyBatis

作者: 沉浮_0644 | 来源:发表于2018-12-13 11:31 被阅读0次

    在IDEA用SpringBoot模板引擎创建SpringBoot项目,勾选Web、MySQL、JPA、MyBatis。

    在resource下新建application.yml文件,这里使用ymal来配置

    spring:
      datasource:
        url: jdbc:mysql://localhost:3306/jpa?serverTimezone=UTC
        username: root
        password: 123456
        driver-class-name: com.mysql.jdbc.Driver
        #使用druid数据源
        type: com.alibaba.druid.pool.DruidDataSource
    
    mybatis:
      #指定实体所在的位置
      type-aliases-package: cn.edu.hsxy.entity
      #指定映射文件的位置,如果全部使用注解,没有映射文件可以不写
      mapper-locations: classpath:mapper/*.xml
    

    新建实体了User

    package cn.edu.hsxy.entity;
    public class User {
        private int id;
        private String name;
        private String password;
    
    /*
      set/get方法
    */
    }
    

    实体类创建好了开始写dao。

    package cn.edu.hsxy.dao;
    import ...
    @Mapper
    public interface UserDao {
    
        int insert(User user);
    
        User selectByPrimaryKey(Integer id);
    
        int update(User user);
    
        @Delete("DELETE FROM user WHERE id=#{id}")
        int delete(Integer id);
    }
    
    
    • 需要在dao的所以接口上写上@Mapper注解。如果不写,可以在主函数上写@MapperScan("cn.edu.hsxy.dao"),指向dao接口所在的包,扫描该包下的所有接口。

    在resource下创建mapper包,放所有的映射文件,与之前application.yml文件的位置要一致。这里创建UserMapper.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="cn.edu.hsxy.dao.UserDao">
        <insert id="insert">
            INSERT INTO
                user
                (name ,password)
              VALUES
             (#{name},#{password})
        </insert>
    
        <select id="selectByPrimaryKey" resultType="cn.edu.hsxy.entity.User">
            SELECT *
            FROM user
            WHERE id=#{id}
        </select>
    
        <update id="update">
            UPDATE
                  user
            SET
                name = #{name},
                password = #{password}
              WHERE
                  id=#{id}
        </update>
    
    </mapper>
    
    • namespace的值就是到接口的全限定名,根据这个名找到接口所在的位置。
    • id就是接口中的方法名。
    • 如果在接口中的方法中写好了@Select、@Delete等注解,则不需要再配置文件中写映射了。

    dao层写好开始写Service层,在service下创建UserService接口

    package cn.edu.hsxy.service;
    
    import cn.edu.hsxy.entity.User;
    
    public interface UserService {
        public User getUserById(int id);
    
        boolean addUser(User user);
    
        boolean updateUser(User user);
    
        Integer deleteUser(Integer id);
    }
    
    

    写一个UserServiceImpl实现上接口,去写业务逻辑

    package cn.edu.hsxy.service.impl;
    
    import  ...;
    
    @Service("userService")
    public class UserServiceImpl implements UserService {
    
        @Resource
        private UserDao userDao;
    
        @Override
        public User getUserById(int id) {
            return userDao.selectByPrimaryKey(id);
        }
    
        @Override
        public boolean addUser(User user) {
            boolean result = false;
            try{
                userDao.insert(user);
            }catch (Exception e){
                e.printStackTrace();
            }
            return result;
        }
    
        @Override
        public boolean updateUser(User user) {
            Integer result = -1;
            try{
                result = userDao.update(user);
            }catch (Exception e){
                e.printStackTrace();
            }
            if(result == 1){
                return true;
            }
            return false;
        }
    
        @Override
        public Integer deleteUser(Integer id) {
            return userDao.delete(id);
        }
    }
    
    

    Service层写好了开始写Controller层。

    package cn.edu.hsxy.controller;
    
    import  ...;
    
    @Controller
    @RequestMapping("/user")
    public class UserController {
    
        @Autowired
        private UserService userService;
    
        @RequestMapping("/getUser")
        @ResponseBody
        public User getUser(){
            User user = new User();
            user.setId(1);
            user.setName("ssk");
            user.setPassword("123456");
            return user;
        }
    
        @ResponseBody
        @RequestMapping("/showUser")
        public User toIndex(int id){
            return userService.getUserById(id);
        }
    
        @RequestMapping("/updateUser")
        @ResponseBody
        public User updateUser(User user){
            boolean flag = userService.updateUser(user);
            if(flag == true){
                return user;
            }
            return null;
        }
    
        @ResponseBody
        @RequestMapping("/deleteUser")
        public Integer deleteUserById(Integer id){
            return userService.deleteUser(id);
        }
    
    }
    
    

    接下来就是主函数了,因为SpringBoot使用内嵌Tomcat,使用主函数就可以运行了。

    package cn.edu.hsxy;
    
    import  ... ;
    
    @SpringBootApplication
    //@MapperScan("cn.edu.hsxy.dao")
    public class SpringbootMybatisApplication {
    
        public static void main(String[] args) {
            SpringApplication.run(SpringbootMybatisApplication.class, args);
        }
    }
    
    • 因为在接口中已经写@Mapper注解了,所以@MapperScan可以不写,建议使用@MapperScan注解。

    源码及数据库文件分享 提取码:ijrz

    相关文章

      网友评论

          本文标题:SpringBoot整合MyBatis

          本文链接:https://www.haomeiwen.com/subject/mfevhqtx.html