18.springboot整合mybatis

Posted 结构化思维wz

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了18.springboot整合mybatis相关的知识,希望对你有一定的参考价值。

springboot整合mybatis

往日推荐:
1.springboot手撸一个mybatis代码生成器
2.springboot中的跨域问题
3.spring注解开发总结
4.小学生都能看懂的springmvc教程

1.创建工程

在这里插入图片描述

2.在properties中配置数据库信息

spring.datasource.url=jdbc:mysql://localhost:3306/wangze
spring.datasource.username=root
spring.datasource.password=123456
注意注意:这个username,很容易被idea自动不全误导成name.....踩坑了

3.创建实体类

package com.example.mybatis.model;

/**
 * @author: 王泽
 */

public class User {
    private String name;
    private Integer id;
    private String password;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }
}

4.编写dao层

有两种方式编写dao层,一种是注解的方式,一种是以前ssm中xml文件的方式

注册mapper组件也有两种:一种在mapper上加@Mapper;一种在配置类上加@MapperScan()

  • 注解方式

    @Mapper
    public interface UserMapper {
        @Select("select * from user where id =#{id}")
        User getUserById(Integer id); //根据id操作数据库
    
    
    }
    

    测试:

    @SpringBootTest
    class MybatisApplicationTests {
        @Autowired
        UserMapper userMapper;
    
        @Test
        void contextLoads() {
        User user = userMapper.getUserById(1);
            System.out.println(user);
        }
    
    }
    

在这里插入图片描述

分析:属性名必须一致。如果不一一对应,解决方式有两种:xml文件中可以使用resultMap,java代码中也可以用注解@Results

我们先把数据库中的字段名由原来的name改成username;在mapper中做如下改变就可以查到了!


@Mapper
public interface UserMapper {
    @Results({
            @Result(property = "name",column ="username" )  //property对应javabean中的属性名。column对应数据库中的字段名
    })
    @Select("select * from user where id =#{id}")
    User getUserById(Integer id); //根据id操作数据库


}

@Select、@Insert、@Update以及@Delete四个注解分别对应XML中的select、insert、update以及delete标签,@Results注解类似于XML中的ResultMap映射文件(getUserById方法给查询结果的字段取别名主要是向小伙伴们演示下@Results注解的用法),另外使用@SelectKey注解可以实现主键回填的功能,即当数据插入成功后,插入成功的数据id会赋值到user对象的id属性上。

UserMapper2创建好之后,还要配置mapper扫描,有两种方式,一种是直接在UserMapper2上面添加@Mapper注解,这种方式有一个弊端就是所有的Mapper都要手动添加,要是落下一个就会报错,还有一个一劳永逸的办法就是直接在启动类上添加Mapper扫描,如下:

@SpringBootApplication
@MapperScan(basePackages = "org.sang.mybatis.mapper")
public class MybatisApplication {
    public static void main(String[] args) {
        SpringApplication.run(MybatisApplication.class, args);
    }
}

xml文件方式:

  • 创建usermapper类

    
    public interface UserMapper {
        User getUserById(Integer id); //根据id操作数据库
    
    
    }
    
    
  • 创建mapper.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.example.mybatis.mapper.UserMapper">
    <resultMap id="UserMap" type="com.example.mybatis.model.User">
    	<result property="name" column="username"/>
    </resultMap>
    <select id="getUserById" resultType="com.example.mybatis.model.User">
    	select * from user where id = #{id};
    </select>
    </mapper>
    
  • 指定mapper.xml路径

    在resource中的时候

    mybatis.mapper-laocations=classpath:mapper/*.xml
    

    与java代码在一个包下

    <build>
        <resources>
            <resource>
                <directory>src/main/java</directory>
                <includes>
                    <include>**/*.xml</include>
                </includes>
            </resource>
            <resource>
                <directory>src/main/resources</directory>
            </resource>
        </resources>
    </build>
    

    注意在resource中创建的时候应该用“/”作为分隔符,不能用“.” 例如com/wangze/mybatis mapper名字必须对应

    注意在resource中创建的时候应该用“/”作为分隔符,不能用“.” 例如com/wangze/mybatis mapper名字必须对应

以上是关于18.springboot整合mybatis的主要内容,如果未能解决你的问题,请参考以下文章

Mybatis学习--spring和Mybatis整合

springboot整合mybatis,redis,代码

SpringBoot整合Mybatis之Annotation

请教mybatis+spring+atomikos的整合问题

springboot整合mybatis,redis,代码

基于Spring+SpringMVC+MyBatis开发书评网Spring和MyBatis的整合