美文网首页
Spring Boot 整合MyBatis

Spring Boot 整合MyBatis

作者: 小昭文 | 来源:发表于2018-10-11 10:23 被阅读84次
image.png

一、准备工作

1、添加依赖

在pom.xml文件中,添加mybatis-spring-boot-starter依赖和mySql连接的依赖

<!--MySQL数据库驱动,无需参与编译-->

<dependency>

    <groupId>mysql</groupId>

    <artifactId>mysql-connector-java</artifactId>

    <version>5.1.40</version>

    <scope>runtime</scope>

</dependency>

<!--MyBatis-->

<dependency>

    <groupId>org.mybatis.spring.boot</groupId>

    <artifactId>mybatis-spring-boot-starter</artifactId>

    <version>1.3.2</version>

</dependency>

2、在数据库中添加如下表

# Dump of table role

# ------------------------------------------------------------

DROP TABLE IF EXISTS `role`;

CREATE TABLE `role` (

`id` int(11) unsigned NOT NULL AUTO_INCREMENT,

`name` varchar(50) NOT NULL DEFAULT '' COMMENT '角色名称',

PRIMARY KEY (`id`)

) ENGINE=InnoDB DEFAULT CHARSET=utf8;

LOCK TABLES `role` WRITE;

/*!40000 ALTER TABLE `role` DISABLE KEYS */;

INSERT INTO `role` (`id`, `name`)

VALUES

  (1,'超级管理员'),

  (2,'一般用户');

/*!40000 ALTER TABLE `role` ENABLE KEYS */;

UNLOCK TABLES;

3、配置数据库的用户名密码信息

在resources的application.yml文件中添加如下节点

spring:
  datasource:
    username: root
    password:
    url: jdbc:mysql://localhost:3306/student_manage?useUnicode=true&characterEncoding=UTF-8
    driver-class-name: com.mysql.jdbc.Driver

二、建立相关类

1、添加实体类

新建一个domain的包,然后在此包中新增一个Role的类

public class Role {

    /**

     * 主健ID (无默认值)

     */

    private Integer id;

    /**

     * 角色名称(必填项)  (默认值为: )

     */

    private String name;

    public Integer getId() {

        return id;

    }

    public void setId(Integer id) {

        this.id = id;

    }

    public String getName() {

        return name;

    }

    public void setName(String name) {

        this.name = name;

    }

}

2、添加dao层

新建一个dao的包,然后在此包下新建一个RoleMapper的类

/**

* @Mapper 如果没有在SpringbootLearingApplication添加@MapperScan 注解的话,这里都需要一个这样的注解

*/

public interface RoleMapper {

    /**

     * 查询所有的角色

     *

     * @return

     */

    List<Role> queryAll();

    /**

     * 查询单个

     *

     * @param id

     * @return

     */

    Role selectOne(Integer id);

    /**

     * 新增

     *

     * @param role

     * @return

     */

    int add(Role role);

    /**

     * 修改

     *

     * @param role

     * @return

     */

    int update(Role role);

    /**

     * 删除

     *

     * @param id

     * @return

     */

    int delete(Integer id);

}

3、添加service层

新建一个service的包,然后在此包下新建一个RoleService的类,其中的@SuppressWarnings(“SpringJavaAutowireingInspection”) 注解是为了不让IDEA标红,可有可无

@Service

public class RoleService {

    @Autowired

    @SuppressWarnings("SpringJavaAutowiringInspection")

    private RoleMapper roleMapper;

    /**

     * 查询所有的角色

     *

     * @return

     */

    public List<Role> queryAll() {

        return this.roleMapper.queryAll();

    }

    /**

     * 查询单个

     *

     * @param id

     * @return

     */

    public Role selectOne(Integer id) {

        return this.roleMapper.selectOne(id);

    }

    /**

     * 新增

     *

     * @param role

     * @return

     */

    public int add(Role role) {

        return this.roleMapper.add(role);

    }

    /**

     * 修改

     *

     * @param role

     * @return

     */

    public int update(Role role) {

        return this.roleMapper.update(role);

    }

    /**

     * 删除

     *

     * @param id

     * @return

     */

    public int delete(Integer id) {

        return this.roleMapper.delete(id);

    }

}

4、添加控制器

在controller包下新建一个RoleController的类,其他代码省略

@RestController

@RequestMapping("/api/role")

public class RoleController {

    @Autowired

    private RoleService roleService;

    @RequestMapping("/list")

    public List<Role> queryAll() {

        return this.roleService.queryAll();

    }

}

5、配置全局Mapper包扫描

在SpringbootLearningApplication文件的头部添加如下注解:

/**
 * 这个注解是给指定包下的类自动添加@Mapper,省的com.xiaozhao.dao下的每个mapper类都得添加一个@Mapper注解了
 *
 * @author xiaozhao
 */

@SpringBootApplication
@MapperScan("com.xiaozhao.dao")
public class SpringbootMybatisApplication {

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


三、配置MyBaits

1.使用xml
1.1 在resources文件夹下新建一个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>
    <typeAliases>
        <typeAlias alias="Integer" type="java.lang.Integer"/>
        <typeAlias alias="Long" type="java.lang.Long"/>
        <typeAlias alias="HashMap" type="java.util.HashMap"/>
        <typeAlias alias="LinkedHashMap" type="java.util.LinkedHashMap"/>
        <typeAlias alias="ArrayList" type="java.util.ArrayList"/>
        <typeAlias alias="LinkedList" type="java.util.LinkedList"/>
    </typeAliases>
</configuration>

1.2然后在resources>mybatis 下再次新建一个mapper文件夹, 在这个mapper文件夹下新建一个RoleMapper.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.xiaozhao.dao.RoleMapper">
    <resultMap id="BaseResultMap" type="com.xiaozhao.domain.Role">
        <id column="id" property="id" jdbcType="INTEGER"/>
        <result column="name" property="name" jdbcType="VARCHAR"/>
    </resultMap>

    <sql id="Base_Column_List">
        id, name
    </sql>

    <!--查询全部-->
    <select id="queryAll" resultMap="BaseResultMap">
        SELECT
        <include refid="Base_Column_List"/>
        FROM role
    </select>

    <!--查询单个-->
    <select id="selectOne" parameterType="Integer" resultMap="BaseResultMap">
        SELECT
        <include refid="Base_Column_List"/>
        FROM role
        WHERE id=#{id}
    </select>

    <!--增加-->
    <insert id="add" parameterType="com.xiaozhao.domain.Role">
        INSERT INTO role(name) VALUES (#{name})
    </insert>

    <!--修改-->
    <update id="update" parameterType="com.xiaozhao.domain.Role">
        UPDATE role set name=#{name} WHERE id=#{id}
    </update>

    <!--删除-->
    <delete id="delete" parameterType="Integer">
        DELETE  FROM role WHERE id=#{id}
    </delete>

</mapper>

1.3 把配置信息告诉spring

在application.yml文件中添加入下节点

#    配置mybatis
mybatis:
  config-location: classpath:mybatis/mybatis-config.xml
  mapper-locations: classpath:mybatis/mapper/*.xml
  type-aliases-package: com.xiaozhao.domain

把最后测试运行,在浏览器中输入:http://localhost:8080/api/role/list ,得到如下结果:

image.png

2、使用注解的形式

使用注解跟xml的区别主要体现在dao层,就是把sql语句以注解的形式写到代码中。然后修改下application.yml文件中的mybatis配置即可。

2.1修改后的RoleMapper.java

package com.xiaozhao.dao;

import com.xiaozhao.domain.Role;

import org.apache.ibatis.annotations.*;

import org.apache.ibatis.type.JdbcType;

import java.util.List;

/**

* @author xiaozhao

* @date 2018/9/29上午10:40

* <p>

* 使用注解的形式

*/

/**

* @Mapper 如果没有在SpringbootLearingApplication添加@MapperScan 注解的话,这里都需要一个这样的注解

*/

public interface RoleMapper {

    /**

     * 查询所有的角色

     *

     * @return

     */

    @Select("SELECT id, name FROM role")

    @Results({

            @Result(property = "id", column = "id", jdbcType = JdbcType.INTEGER),

            @Result(property = "name", column = "name", jdbcType = JdbcType.VARCHAR)

    })

    List<Role> queryAll();

    /**

     * 查询单个

     *

     * @param id

     * @return

     */

    @Select("SELECT id, name FROM role  WHERE id=#{id}")

    @Results({

            @Result(property = "id", column = "id", jdbcType = JdbcType.INTEGER),

            @Result(property = "name", column = "name", jdbcType = JdbcType.VARCHAR)

    })

    Role selectOne(Integer id);

    /**

     * 新增

     *

     * @param role

     * @return

     */

    @Insert(" INSERT INTO role(name) VALUES (#{name})")

    int add(Role role);

    /**

     * 修改

     *

     * @param role

     * @return

     */

    @Update(" UPDATE role set name=#{name} WHERE id=#{id}")

    int update(Role role);

    /**

     * 删除

     *

     * @param id

     * @return

     */

    @Delete("  DELETE  FROM role WHERE id=#{id}")

    int delete(Integer id);

}

2.2修改后的application.yml

spring:

  # 数据库连接

  datasource:

    url: jdbc:mysql://127.0.0.1:3306/student_manage?useUnicode=true&characterEncoding=UTF-8

    username: root

    password:

    driver-class-name: com.mysql.jdbc.Driver

mybatis:

  type-aliases-package: com.xiaozhao.domain

打印sql语句

使用logback来进行打印,可以参考文章:logback

在resources文件夹下新建一个logback-spring.xml文件

<?xml version="1.0" encoding="UTF-8"?>
<configuration debug="false">

    <!-- 控制台输出 -->
    <!-- 彩色日志 -->
    <!-- 彩色日志依赖的渲染类 -->
    <conversionRule conversionWord="clr" converterClass="org.springframework.boot.logging.logback.ColorConverter"/>
    <conversionRule conversionWord="wex"
                    converterClass="org.springframework.boot.logging.logback.WhitespaceThrowableProxyConverter"/>
    <conversionRule conversionWord="wEx"
                    converterClass="org.springframework.boot.logging.logback.ExtendedWhitespaceThrowableProxyConverter"/>
    <!-- 彩色日志格式 -->
    <property name="CONSOLE_LOG_PATTERN"
              value="${CONSOLE_LOG_PATTERN:-%clr(%d{yyyy-MM-dd HH:mm:ss.SSS}){faint} %clr(${LOG_LEVEL_PATTERN:-%5p}) %clr(${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}}"/>
    <!-- Console 输出设置 -->
    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <pattern>${CONSOLE_LOG_PATTERN}</pattern>
            <charset>utf8</charset>
        </encoder>
    </appender>

<!--用来设置某一个包或者具体的某一个类的日志打印级别-->
    <!--打印MyBatis的sql语句-->
    <logger name="com.xiaozhao.dao" level="DEBUG"></logger>


    <!-- 日志输出级别,生产环境下需要移除控制台输出 -->
    <root level="INFO">
        <appender-ref ref="STDOUT"/>
    </root>
</configuration>

注意其中的包名要是项目中mapper所在的包名,设置为DEBUG级别,然后就可以打印sql了。

完整代码

https://github.com/xiaozhaowen/spring-boot-in-action/tree/master/springboot-mybatis

相关文章

网友评论

      本文标题:Spring Boot 整合MyBatis

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