SpringBoot学习三:整合Mybatis

2018-07-29  本文已影响19人  yuluo

Mybatis环境搭建

  1. 配置依赖

将我们第一次创建项目时注释的关于Mybatis与JDBC依赖打开。

<?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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>online.suiyu</groupId>
    <artifactId>springboot-demo</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>jar</packaging>
    <name>springboot-demo</name>
    <description>Demo project for Spring Boot</description>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.0.3.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <java.version>1.8</java.version>
    </properties>
    <dependencies>
        <!--<dependency>-->
        <!--<groupId>org.springframework.boot</groupId>-->
        <!--<artifactId>spring-boot-starter-data-redis</artifactId>-->
        <!--</dependency>-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-jdbc</artifactId>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <scope>runtime</scope>
        </dependency>
        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>1.3.2</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>io.springfox</groupId>
            <artifactId>springfox-swagger2</artifactId>
            <version>2.5.0</version>
        </dependency>
        <dependency>
            <groupId>io.springfox</groupId>
            <artifactId>springfox-swagger-ui</artifactId>
            <version>2.5.0</version>
        </dependency>
    </dependencies>
    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>
</project>
  1. 修改Controller添加访问路径
package online.suiyu.springbootdemo.controller;

@Api("测试类")
@RestController
@RequestMapping("index")
public class IndexController {

    @Autowired
    private UserService userService;


    @ApiOperation(value = "index", notes = "测试方法", tags = {"hello"})
    @RequestMapping(value = "/hello", method = RequestMethod.GET)
    public String index() {
        return "Hello,World!";
    }

    @ApiOperation(value = "getAllUser", notes = "获取所有的内容", tags = "user")
    @RequestMapping(value = "/getalluser", method = RequestMethod.GET)
    public List<User> getAllUser() {
        return userService.getAllUser();
    }

    @ApiOperation(value = "getUserBySex", notes = "通过性别获取user", tags = "user")
    @RequestMapping(value = "/getuserbysex", method = RequestMethod.GET)
    public List<User> getUserBySex(@RequestParam(value = "sex", required = true) String sex) {
        return userService.getUserBySex(sex);
    }
}

对于上方代码,IDEA针对@Autowired报了一个警告Spring Team recommends "Always use constructor based dependency injection in your beans. Always use assertions for mandatory dependencies".
Spring推荐使用构造器来注入bean
所以,程序中的bean引入应该写成这样:

private final UserDao userDao;
@Autowired
public UserServiceImpl(UserDao userDao) {
    this.userDao = userDao;
}

了解更多,查看知友的解释

  1. 修改service
package online.suiyu.springbootdemo.service;

@Service
public class UserService {

    @Autowired
    private UserMapper userMapper;

    public List<User> getAllUser() {
        return userMapper.getAllUser();
    }


    public List<User> getUserBySex(String sex) {
        return userMapper.getUserBySex(sex);
    }
}
  1. 创建mybatis的xml配置文件
    namespace名称需要与对应的DAO接口对齐
<?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="online.suiyu.springbootdemo.mapper.UserMapper">
    <select id="getAllUser"
            resultType="online.suiyu.springbootdemo.vo.User">
        SELECT * from user
    </select>
</mapper>
  1. 创建与xml配置文件对应的DAO接口
    getUserBySex()方法使用了注解形式,简单的增删改查可以使用注解方式。
package online.suiyu.springbootdemo.mapper;

@Component
public interface UserMapper {

    List<User> getAllUser();


    @Select("select * from user where sex = #{sex}")
    List<User> getUserBySex(String sex);
}
  1. 在入口类中添加@MapperScan
@SpringBootApplication
@MapperScan("online.suiyu.springbootdemo.mapper")
public class SpringbootDemoApplication {

    public static void main(String[] args) {
        SpringApplication.run(SpringbootDemoApplication.class, args);
    }
}
  1. 在配置文件application.yml中配置Mybatis
mybatis:
  mapper-locations: classpath:mapper/*.xml
  type-aliases-package: online.suiyu.springbootdemo.vo

可以看出配置的主要是resource中的Mapper.xml文件与javabean文件。

至此,SpringBoot整合Mybatis完成,其项目结构为


项目结构

如果出现异常,一般都是接口与xml文件对不齐。

添加数据库连接池druid

  1. 添加druid的maven依赖
<!-- https://mvnrepository.com/artifact/com.alibaba/druid -->
<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>druid</artifactId>
    <version>1.1.10</version>
</dependency>
  1. 配置数据库连接池的参数
添加druid配置

为程序体添加事务管理

  1. 在主程序中添加注解@EnableTransactionManagement开启事务管理
  2. 在所需的方法体上加上@Transactional即可
    @Transactional
    @Override
    public boolean addUsers(List<User> userList) {
        logger.info("UserServiceImpl.addUsers开始");
        int num = userDao.addUsers(userList);
//        int i = 10 / 0;
        logger.info("UserServiceImpl.addUsers结束");
        return num > 0;
    }
上一篇 下一篇

猜你喜欢

热点阅读