Spring Boot(二)之与Mybatis结合使用

Spring Boot(二)之与Mybatis结合使用

这是使用的是mybatis的xml方式,还有注解的方式

1.创建项目

1.1 创建一个Project

image

1.2 编辑Project Metadata

image

1.3 添加Web程序和SQL程序

添加Web程序

image

勾选Web程序

添加SQL程序

image

勾选MySQL,JDBC,MyBatis三项

点击Next

1.4 选择项目路径

image

点击Finish,项目创建完成

1.5 创建项目完成

项目目录结构

image

2.pom.xml依赖

在项目创建完成,会在pom.xml文件中生成对应的依赖和build插件。如下:

<?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>com.zhang</groupId>
    <artifactId>springboot-mybatis-demo</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <!--以jar包的形式,如果改为war,就是打出来的包是war形式,后面会专门介绍如果打成war-->
    <packaging>jar</packaging>

    <name>springboot-mybatis-demo</name>
    <description>Demo project for Spring Boot</description>

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.0.4.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-jdbc</artifactId>
        </dependency>
        <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>1.3.2</version>
        </dependency>

        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <scope>runtime</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>

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

</project>

除此之外,我们还需要添加其他的依赖(也可以不使用的),如:

<!-- alibaba的druid数据库连接池 -->
<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>druid-spring-boot-starter</artifactId>
    <version>1.1.9</version>
</dependency>

关于alibaba的druid数据库连接池,大家可以自行百度

3.application.yml配置编写

将application.properties文件重命名为application.yml(个人喜好)

编译application.yml,添加配置

server:
  port: 8080

spring:
    datasource:
        name: mysql_test
        type: com.alibaba.druid.pool.DruidDataSource
        #druid相关配置
        druid:
          #监控统计拦截的filters
          filters: stat
          driver-class-name: com.mysql.jdbc.Driver
          #基本属性
          url: jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=UTF-8&allowMultiQueries=true
          username: root
          password: root
          #配置初始化大小/最小/最大
          initial-size: 1
          min-idle: 1
          max-active: 20
          #获取连接等待超时时间
          max-wait: 60000
          #间隔多久进行一次检测,检测需要关闭的空闲连接
          time-between-eviction-runs-millis: 60000
          #一个连接在池中最小生存的时间
          min-evictable-idle-time-millis: 300000
          validation-query: SELECT 'x'
          test-while-idle: true
          test-on-borrow: false
          test-on-return: false
          #打开PSCache,并指定每个连接上PSCache的大小。oracle设为true,mysql设为false。分库分表较多推荐设置为false
          pool-prepared-statements: false
          max-pool-prepared-statement-per-connection-size: 20


# mybatis
mybatis:
  mapper-locations: classpath:mapper/*.xml
  type-aliases-package: com.zhang.springbootmybatisdemo.domain

mapper-locations:配置mapper文件的路径

type-aliases-package:配置domain对象路径

4.创建Controller,Service,Dao,Domain实例

4.1 创建Controller

@RestController
@RequestMapping("/user")
public class UserController {

    @Autowired
    private UserService userService;

    @PostMapping("/add")
    public int add(@RequestBody User user) {
        return userService.addUser(user);
    }

    @ResponseBody
    @PostMapping("/search")
    public User searchById(@RequestBody User user) {
        return userService.searchById(user.getUserId());
    }

    @ResponseBody
    @PostMapping("/searchall")
    public List<User> searchAll() {
        return userService.searchAll();
    }

}

4.2 创建Service

@Component
public interface UserService {
    int addUser(User user);

    User searchById(String userId);

    List<User> searchAll();
}

@Component: 在UserService上添加Component注解,防止UserController中的userService属性自动注入是出现编译错误。

ServiceImpl的实现类

@Service(value = "userService")
public class UserServiceImpl implements UserService {

    @Autowired
    private UserDao userDao;

    @Override
    public int addUser(User user) {
        return userDao.add(user);
    }

    @Override
    public User searchById(String userId) {
        return userDao.searchById(userId);
    }

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

@Service(value = “userService”):指定UserController中userService参数的实现对象。

4.3 编写User

public class User {
    private String userId;
    private String username;
    private String password;
    ...
    // 省略 get set
}

4.4 编写UserDao

@Component
public interface UserDao {
    int add(User user);
    User searchById(String userId);
    List<User> searchAll();
}

这里需要注意一个问题,需要在启动类SpringbootMybatisDemoApplication上面加上一个MappingScan的注解,在程序是,扫描dao中的类。

@SpringBootApplication
@MapperScan("com.zhang.springbootmybatisdemo.dao")
public class SpringbootMybatisDemoApplication {

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

额外注意:@MapperScan(“com.zhang.springbootmybatisdemo.dao”)

5.编写Mapping的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.zhang.springbootmybatisdemo.dao.UserDao">
    <sql id="BASE_TABLE">
        tb_user
    </sql>

    <sql id="BASE_COLUMN">
        user_id,username,password
    </sql>

    <!--因为mysql的表字段和User对象的字段不一致,所以需要转换匹配-->
    <resultMap id="BaseResultMap" type="com.zhang.springbootmybatisdemo.domain.User">
        <result column="user_id" property="userId" jdbcType="VARCHAR"/>
        <result column="username" property="username" jdbcType="VARCHAR"/>
        <result column="password" property="password" jdbcType="VARCHAR"/>
    </resultMap>

    <insert id="add" parameterType="com.zhang.springbootmybatisdemo.domain.User">
      insert into
      tb_user(user_id,username,password)
      values(#{userId,jdbcType=VARCHAR},#{username,jdbcType=VARCHAR},#{password,jdbcType=VARCHAR})
    </insert>

    <!--resultMap 是将返回的结果进行mapping匹配,如果mysql和User的字段一致,那么可以直接使用 resultType="User" 直接返回-->
    <select id="searchById" parameterType="java.lang.String" resultMap="BaseResultMap">
        SELECT
        <include refid="BASE_COLUMN"/>
        FROM
        <include refid="BASE_TABLE"/>
        WHERE user_id = #{userId,jdbcType=VARCHAR}
    </select>

    <select id="searchAll" resultMap="BaseResultMap">
        SELECT
        <include refid="BASE_COLUMN"/>
        FROM
        <include refid="BASE_TABLE"/>
    </select>
</mapper>

这里需要当心,指定参数的全路径名称是否正确。

6.测试运行

6.1 插入数据,如下

插入数据1:

image

插入数据2:

image

查询mysql

image

6.2 查询数据,如下

指定userId查询

image

查询所有数据

image

这里基本上将Spring Boot与Mybatis的结合实现了。

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
Spring Boot整合MyBatis可以使用`@MapperScan`注解来扫描Mapper接口,同时需要在配置文件中配置MyBatis的相关信息。 1. 添加依赖 在`pom.xml`中添加MyBatisMyBatis-SpringBoot-Starter依赖: ``` <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>${mybatis.version}</version> </dependency> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>${mybatis.version}</version> </dependency> ``` 其中`${mybatis.version}`表示MyBatis的版本号。 2. 配置数据源 在`application.properties`中配置数据源相关信息,这里以MySQL为例: ``` spring.datasource.driverClassName=com.mysql.cj.jdbc.Driver spring.datasource.url=jdbc:mysql://localhost:3306/test?useSSL=false&allowPublicKeyRetrieval=true&serverTimezone=UTC spring.datasource.username=root spring.datasource.password=123456 ``` 3. 配置MyBatis 在`application.properties`中配置MyBatis相关信息: ``` # mybatis mybatis.type-aliases-package=com.example.demo.entity mybatis.mapper-locations=classpath:mapper/*.xml ``` 其中`mybatis.type-aliases-package`表示实体类所在的包,`mybatis.mapper-locations`表示Mapper接口对应的XML文件所在的位置。 4. 编写Mapper接口和XML文件 编写Mapper接口和对应的XML文件,这里以`UserMapper`为例: ``` @Mapper public interface UserMapper { User findById(Long id); } ``` ``` <?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.example.demo.mapper.UserMapper"> <select id="findById" parameterType="long" resultType="com.example.demo.entity.User"> select * from user where id = #{id} </select> </mapper> ``` 5. 使用注解扫描Mapper接口 在启动类上使用`@MapperScan`注解扫描Mapper接口所在的包: ``` @SpringBootApplication @MapperScan("com.example.demo.mapper") public class DemoApplication { public static void main(String[] args) { SpringApplication.run(DemoApplication.class, args); } } ``` 6. 测试 在Controller中注入Mapper接口,并调用方法测试是否能够正常访问数据库: ``` @RestController public class UserController { @Autowired private UserMapper userMapper; @GetMapping("/user/{id}") public User getUserById(@PathVariable Long id) { return userMapper.findById(id); } } ``` 访问`/user/1`可以获取到id为1的用户信息。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值