SpringBoot整合Mybatis(yml方式)

Posted 低调的狗狗

tags:

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

  本来打算写个使用Sharding-JDBC的例程,但是在搭建Mybatis的过程中,一波三折,因为好久没搭建项目了,另外加上换了电脑。所以很破折,在这里记录一下Spring Boot整合Mybatis吧。可能很简单,但是我长时间没用忘记了,我这里备忘一下吧。

一、项目目录结构

  注意这里Application文件的位置,它是与controller、entity、mapper、service等包处于并列的关系。

  

二、数据库文件

SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;

-- ----------------------------
-- Table structure for t_user_00
-- ----------------------------
DROP TABLE IF EXISTS `t_user_00`;
CREATE TABLE `t_user_00`  (
  `id` int(0) NOT NULL AUTO_INCREMENT,
  `user_id` int(0) NOT NULL,
  `name` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
  `age` int(0) NOT NULL,
  PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;

SET FOREIGN_KEY_CHECKS = 1;

三、pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.1.13.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.gougou</groupId>
    <artifactId>shardingjdbc-shardingtable-demo</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>shardingjdbc-shardingtable-demo</name>
    <description>shardingjdbc-shardingtable-demo</description>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <java.version>1.8</java.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>1.3.2</version>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>

四、application.yml

# 数据源
spring:
  application:
    name: shardingjdbc-shardingtable-demo
  datasource:
    url: jdbc:mysql://localhost:3306/sharding_0?serverTimezone=UTC
    username: root
    password: root
    driver-class-name: com.mysql.jdbc.Driver
    dbcp2:
      min-idle: 5                                # 数据库连接池的最小维持连接数
      initial-size: 5                            # 初始化连接数
      max-total: 5                               # 最大连接数
      max-wait-millis: 150                       # 等待连接获取的最大超时时间

# mybatis配置 mybatis: mapper-locations: classpath:mapper/*.xml # mapper映射文件位置 type-aliases-package: com.gouggou.shardingtable.entity # 实体类所在的位置 configuration: log-impl: org.apache.ibatis.logging.stdout.StdOutImpl #用于控制台打印sql语句

五、启动类Application

  说明:

  1、@MapperScan的:扫描mapper接口的位置

  2、@ComponentScan:如果Application文件的位置不是与controller、entity、mapper、service等包处于并列的关系。就要用此注解,否则可以不用;

@MapperScan("com.gouggou.shardingtable.mapper")
@SpringBootApplication
public class Application {

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

}

六、controller

@RequestMapping("student")
@RestController
public class UserController {

    @Autowired
    private UserService userService;

    @RequestMapping("save")
    public String save() {
        User user = new User();
        user.setUserId(new Random().nextInt( 1000 ) + 1);
        user.setName("张三"+user.getUserId());
        user.setAge(new Random().nextInt( 80 ) + 1);
        userService.insert(user);
        return user.getName()+"创建成功!";
    }

}

七、service

public interface UserService {

    Integer insert(User u);

    List<User> findAll();

    List<User> findByUserIds(List<Integer> userIds);

}
@Service
public class UserServiceImpl implements UserService {

    @Autowired
    private UserMapper userMapper;

    @Override
    public Integer insert(User u) {
        return userMapper.insert(u);
    }

    @Override
    public List<User> findAll() {
        return userMapper.findAll();
    }

    @Override
    public List<User> findByUserIds(List<Integer> userIds) {
        return userMapper.findByUserIds(userIds);
    }
}

八、entity

@Data
public class User implements Serializable {

    private static final long serialVersionUID = -5514139686858156155L;

    private Integer id;

    private Integer userId;

    private String name;

    private Integer age;

}

九、Mapper

@Repository
public interface UserMapper {

    Integer insert(User u);

    List<User> findAll();

    List<User> findByUserIds(List<Integer> userIds);

}
<?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.gouggou.shardingtable.mapper.UserMapper" >
    <resultMap id="resultMap" type="com.gouggou.shardingtable.entity.User" >
        <id column="id" property="id" jdbcType="INTEGER" />
        <result column="user_id" property="userId" jdbcType="INTEGER" />
        <result column="name" property="name" jdbcType="VARCHAR" />
        <result column="age" property="age" jdbcType="INTEGER" />
    </resultMap>

    <insert id="insert">
    insert into t_user_00 (user_id,name,age) values (#{userId},#{name},#{age})
  </insert>

    <select id="findAll" resultMap="resultMap">
        select <include refid="columnsName"/> from t_user_00
    </select>

    <select id="findByUserIds" resultMap="resultMap">
        select <include refid="columnsName"/> from t_user_00 where user_id in (
        <foreach collection="list" item="item" separator=",">
            #{item}
        </foreach>
        )

    </select>

    <sql id="columnsName">
     id,user_id,name,age
  </sql>
</mapper>

十、遇到的问题

  1、idea 右键无java class选项

    2、maven仓库中产生后缀是LastUpdated的文件

 

以上是关于SpringBoot整合Mybatis(yml方式)的主要内容,如果未能解决你的问题,请参考以下文章

SpringBoot 整合MyBatis 统一配置bean的别名

SpringBoot.04.SpringBoot整合MyBatis

SpringBoot.04.SpringBoot整合MyBatis

SpringBoot.04.SpringBoot整合MyBatis

idea springboot中整合jdbc连接MySQL中,Schemas中无mybatis怎么解决?

6.3 Springboot整合Mybatis框架