java后台

SpringBoot系列—MyBatis(十一)

2019-09-26  本文已影响0人  海晨忆

个人博客:haichenyi.com。感谢关注

  上一篇,Druid是用于处理数据库连接池与后台监控。

  MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以使用简单的 XML 或注解来配置和映射原生信息,将接口和 Java 的 POJOs(Plain Ordinary Java Object,普通的 Java对象)映射成数据库中的记录。——百度百科

添加依赖

    <dependency>
        <groupId>org.mybatis.spring.boot</groupId>
        <artifactId>mybatis-spring-boot-starter</artifactId>
        <version>2.1.0</version>
    </dependency>

  MyBatis添加依赖跟SpringBoot的其他启动器不一样,MyBatis需要写版本号,因为,SpringBoot并没有MyBatis的启动器。

用法

注解的方式

  先看一下项目结构:

项目结构图.png

  首先,我们先在连接的数据库里面创建表,添加几条数据。

  然后,创建pojo类User,对应我的表

package com.haichenyi.springbootjdbc.pojo;

import lombok.Data;

@Data
public class User {
    public Long UserId;
    public String Username;
    public String password;
    public String nickName;
    public String headImg;
    public Integer age;
    public Integer sex;
    public String address;
    public String desc;
}

  接着,创建mapper接口

package com.haichenyi.springbootjdbc.mapper;

import com.haichenyi.springbootjdbc.pojo.User;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Select;

import java.util.List;

@Mapper
public interface UserMapper {
    @Select("select * from userinfo")
    List<User> getUserInfo();
}

  就是一个普通的接口,用 @Mapper 标识了。然后写了一个获取用户信息的方法。 @Select 里面是sql语句。

  用 @Mapper 标识的接口,在运行的过程中,会帮我们生成实现类,到时候,我们直接通过这个接口的引用调用这个方法即可。我们也可以在入口的位置用 @MapperScan 标识包名,应用启动的时候,会给这个包下面的所有接口都生成实现类。如下

package com.haichenyi.springbootjdbc;

import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@MapperScan("com.haichenyi.springbootjdbc.mapper")
@SpringBootApplication
public class SpringBootJdbcApplication {

    public static void main(String[] args) {
        SpringApplication.run(SpringBootJdbcApplication.class, args);
    }

}

  最后,就是我们的controller层了。

package com.haichenyi.springbootjdbc.controller;

import com.haichenyi.springbootjdbc.mapper.UserMapper;
import com.haichenyi.springbootjdbc.pojo.User;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.List;

@RestController
public class UserController {

    @Autowired
    UserMapper userMapper;

    @RequestMapping("/getUserInfo")
    public List<User> getUserInfo() {
        return userMapper.getUserInfo();
    }
}

  这样,我们就可以通过 http://localhost:8080/getUserInfo 读到数据库中的数据了

  只这样,我们读到的数据,如果表字段与pojo类的字段不一一对应,我们可能读到的数据为空,所以,我们要开启驼峰命名,开启之后MyBatis会帮我们一一对应好。怎么开启呢?就在我们前面的JdbcConfig中添加如下方法即可。就跟我们前面一篇Druid添加配置类似。

   /**
     * MyBatis自定义配置
     *
     * @return ConfigurationCustomizer
     */
    @Bean
    public ConfigurationCustomizer configurationCustomizer() {
        return configuration -> {
            //开启驼峰命名
            configuration.setMapUnderscoreToCamelCase(true);
            //开启二级缓存
            configuration.setCacheEnabled(true);
        };
    }

  这样就可以了。

xml的方式

  前面和后面都是一样的,就是中间那不创建mapper接口不一样。xml中怎么创建mapper呢?

  首先,还是创建一个正常的接口,定义方法。如下:注释写的很清楚了。

package com.haichenyi.springbootjdbc.mapper;

import com.haichenyi.springbootjdbc.pojo.User;
import org.apache.ibatis.annotations.Select;

import java.util.List;

//这里如果没有@Mapper注解,那就在启动类添加@MapperScan注解,上面已经说过怎么添加了。两种方式都可以,标记mapper的接口还是需要的
public interface UserMapper {
//这里的sql语句就不需要了,sql语句在xml里面配置。
//    @Select("select * from userinfo")
    List<User> getUserInfo();
}

  然后,添加两个xml,一个是config,一个是写sql语句的。路径需要注意,先在resources目录下创建一个mybatis目录,在mybatis目录下创建mybatis-config.xml,在mybatis目录下创建mapper目录,然后在mapper目录下创建你的mapper.xml文件,如下:

  这个是写mybatis配置文件的,名字我写的是:mybatis-config.xml,这个路径

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
        PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
    <settings>
        <!--开启驼峰命名-->
        <setting name="mapUnderscoreToCamelCase" value="true"/>
    </settings>
</configuration>

  然后就是创建mapper.xml,这里,我们以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">
<!--namespace要是你前面创建mapper接口的全路径,这样才能对应-->
<mapper namespace="com.haichenyi.springbootjdbc.mapper.UserMapper">
    <!--id:是你前面接口里面创建的方法名-->
    <!--
    resultType:这里的返回类型就是你接口读取数据对应的bean类,不管你需要的是集合,还是单个对象,这里都是你bean类,
    如果你读取的是多条数据,它会自动帮你封装成list,拿到这个list,你再去做你其他的处理
    -->
    <select id="getUserInfo" resultType="com.haichenyi.springbootjdbc.pojo.User">
        select * from userinfo
    </select>
</mapper>

  注释写的很清楚了。

  再就是配置这个两个xml路径了,你需要在你的全局配置文件中配置好,指定对应的路径:

mybatis:
  #核心配置文件路径
  config-location: classpath:mybatis/mybatis-config.xml
  #映射配置文件路径
  mapper-locations: classpath:mybatis/mapper/*.xml

  为啥非要创建一个mapper目录,再创建mapper文件呢?就是这里好指定。mapper文件肯定不止一个,难道你要一个一个的配置吗?这样写只用指定一个就可以了。

上一篇下一篇

猜你喜欢

热点阅读