SpringBoot:9、整合MyBatis

2019-10-28  本文已影响0人  程序员小H

1、MyBatis介绍

MyBatis的官方定义:MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以使用简单的 XML 或注解来配置和映射原生类型、接口和 Java 的 POJO(Plain Old Java Objects,普通老式 Java 对象)为数据库中的记录。

2、MyBatis配置

官方文档说明:https://mybatis.org/mybatis-3/zh/configuration.html
MyBatis 的配置文件包含了会深深影响 MyBatis 行为的设置和属性信息。 配置文档的顶层结构如下:

3、实战

3.1 创建项目

创建一个项目springboot-mybatis,引入相关依赖:

<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>2.1.1</version>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <scope>runtime</scope>
        </dependency>
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid</artifactId>
            <version>1.1.10</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>

3.2 代码清单

SQL脚本

-- ----------------------------
-- Table structure for t_user
-- ----------------------------
DROP TABLE IF EXISTS `t_user`;
CREATE TABLE `t_user` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '用户ID',
  `name` varchar(10) DEFAULT '' COMMENT '用户姓名',
  `password` varchar(32) DEFAULT '' COMMENT '密码',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8;

INSERT INTO `t_user` VALUES (1, '小H', '123456');
INSERT INTO `t_user` VALUES (2, '萧炎', '123456');

用户实体对象:User.java

public class User {

    // 主键
    private String id;
    // 用户名
    private String name;
    // 密码
    private String password;
    // 省略掉getter、setter、toString
}

dao层接口:UserDao.java

@Mapper
public interface UserDao {
    List<User> findAll();
}

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="com.xiaoh.springboot.mybatis.dao.UserDao">

    <!-- 可根据自己的需求,是否要使用 -->
    <resultMap type="com.xiaoh.springboot.mybatis.domain.User" id="userMap">
        <result property="id" column="id"/>
        <result property="name" column="name"/>
        <result property="password" column="password"/>
    </resultMap>

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

    <select id="findAll" resultMap="userMap">
        SELECT <include refid="Base_Column_List"/> FROM t_user
    </select>

</mapper>

注意:UserDao中的方法名需要与UserMapper.xml中方法保持一致。
SQL 映射文件只有很少的几个顶级元素(按照应被定义的顺序列出):

service层接口:
UserService.java

public interface UserService {
    List<User> findAll();
}

UserServiceImpl.java

@Service
public class UserServiceImpl implements UserService {

    @Autowired
    UserDao userDao;

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

配置文件:application.yml

spring:
  datasource:
    url: jdbc:mysql://172.16.6.31:3306/test
    username: root
    password: 123456
    driver-class-name: com.mysql.jdbc.Driver
    type: com.alibaba.druid.pool.DruidDataSource
    initialSize: 5
    minIdle: 5
    maxActive: 20
    maxWait: 60000
    timeBetweenEvictionRunsMillis: 60000
    minEvicableIdleTimeMillis: 300000
    validationQuery: SELECT 1 FROM DUAL
    testWhileIdle: true
    testOnBorrow: false
    testOnReturn: false
    poolPreparedStatements: true
    maxPoolPreparedStatementPerConnectionSize: 20
    filters: stat,wall,log4j
    connectionProperties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000
    useGlobalDataourceStat: true
mybatis:
  # 配置MyBatis映射文件
  mapper-locations: classpath*:/mapper/*Mapper.xml
  # MyBatis扫描包别名
  type-aliases-package: com.xiaoh.springboot.mybatis.domain

写个Controller测试,UserController.java

@RestController
public class UserController {

    @Autowired
    private UserService userService;

    @RequestMapping(value = "/users")
    public List<User> findAll() {
        return userService.findAll();
    }
}

数据库配置类:DruidConfiguration.java

@Configuration
public class DruidConfiguration {

    private static final Logger logger = LoggerFactory.getLogger(DruidConfiguration.class);

    private static final String DB_PREFIX = "spring.datasource";

    @Bean
    public ServletRegistrationBean druidServlet() {
        logger.info("init Druid Servlet Configuration ");
        ServletRegistrationBean servletRegistrationBean = new ServletRegistrationBean(new StatViewServlet(), "/druid/*");
        // IP白名单
        servletRegistrationBean.addInitParameter("allow", "127.0.0.1");
        // IP黑名单(共同存在时,deny优先于allow)
        servletRegistrationBean.addInitParameter("deny", "192.168.1.100");
        //控制台管理用户
        servletRegistrationBean.addInitParameter("loginUsername", "admin");
        servletRegistrationBean.addInitParameter("loginPassword", "9527");
        //是否能够重置数据 禁用HTML页面上的“Reset All”功能
        servletRegistrationBean.addInitParameter("resetEnable", "false");
        return servletRegistrationBean;
    }

    @Bean
    public FilterRegistrationBean filterRegistrationBean() {
        FilterRegistrationBean filterRegistrationBean = new FilterRegistrationBean(new WebStatFilter());
        filterRegistrationBean.addUrlPatterns("/*");
        filterRegistrationBean.addInitParameter("exclusions", "*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*");
        return filterRegistrationBean;
    }
}

SpringbootMybatisApplication.java

@SpringBootApplication
@MapperScan(value = "com.xiaoh.springboot.mybatis.dao")
public class SpringbootMybatisApplication {

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

4、测试

启动项目,浏览器访问:http://localhost:8080/users ,结果如下:

file

5、源码

GitHub:https://github.com/chenjiecg/springboot

本文由博客一文多发平台 OpenWrite 发布!

上一篇 下一篇

猜你喜欢

热点阅读