spring boot 集成 mybatis 入门级学习

与mybatis的初次会面

接触springboot也不过月余,由于工作需要,jdbctemplate冗杂的sql拼接已经不再符合接下来的深入学习。我迫切地意识到,倘若不用
spring-data-jpa操纵数据库,那就用mybatis吧。作为当前最流行的持久层框架之一,不学习它的方法,相当于与时代脱轨了。
首先,得知道集成mybatis的方法有哪些。其实大致也就两种:1、基于注解;2、基于xml配置文件。
不管使用哪种方法,引入mybatis的pom依赖都是必不可少的步骤。

a.在pom文件中添加mybatis-spring-boot-starter依赖以及mysql数据库驱动依赖:

<dependency>
    <groupId>org.mybatis.spring.boot</groupId>
    <artifactId>mybatis-spring-boot-starter</artifactId>
    <version>1.1.1</version>
</dependency>
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>5.1.21</version>
</dependency>

b. 然后,在数据库中新建一张user表:

user表的属性及长度

c.在application.properties中添加mysql数据源:

spring.datasource.url=jdbc:mysql://localhost:3306/test
spring.datasource.username=root
spring.datasource.password=root
spring.datasource.driver-class-name=com.mysql.jdbc.Driver

使用基于注解的方式

1.表建好后,在domain文件夹下新建一个User实体类,实体类的属性与数据库属性名称与数据类型一一对应。

public class User {

    private Long id;
    private String name;
    private Integer age;

    //省略get和set方法

}

2.在mapper文件夹下创建UserMapper接口:

import com.liqiaoqi.domain.User;
import org.apache.ibatis.annotations.*;
import org.springframework.stereotype.Component;

@Mapper
//该注解是解决IDEA mapper注入时显示could not autowire的问题
@Component(value = "userMapper")
public interface UserMapper {

    @Select("SELECT * FROM user WHERE name = #{name}")
    User findByName(@Param("name") String name);

    @Insert("INSERT INTO user(name, age) VALUES(#{name}, #{age})")
    int insert(@Param("name") String name, @Param("age") Integer age);

}
注意:@Mapper注解必须加上。如果Mapper接口很多,可以直接在Application类前添加@MapperScan("mapper所在包名")注解。
@Component注解也可以不加,前提是在用@Autowired注解注入mapper时不提示“could not autowired”错误。

3.在service文件夹下添加UserService类:

@Service
public class UserService {
    @Autowired
    private UserMapper userMapper;

    public String findByName(){
        userMapper.insert("pinky",20);
        User u =  userMapper.findByName("pinky");
        return u.getName();
    }
}

4.然后在controller文件夹下添加UserController类:

@RestController
public class UserController {
    @Autowired
    private UserService userService;

    @RequestMapping("/test")
    public String findByName(){
        return userService.findByName();
    }
}

然后运行项目访问路径查看即可。

使用xml配置文件的方式

与基于注解方法不同,使用xml配置文件方法时,sql语句不在mapper接口中定义,而是剥离出来,在xml文件中单独定义。
这样做的好处是能够使得sql语句更为灵活也更利于维护。  
但两种集成方法大致是一样的,主要有以下区别:

1.UserMapper中不写@Select注解。

import com.liqiaoqi.domain.User;
import org.apache.ibatis.annotations.*;
import org.springframework.stereotype.Component;

@Mapper
//该注解是解决IDEA mapper注入时显示could not autowire的问题
@Component(value = "userMapper")
public interface UserMapper {

    User findByName(@Param("name") String name);

    int insert(@Param("name") String name, @Param("age") Integer age);

}

2.在application.properties文件中添加mybatis的配置信息:

mybatis.config-locations=classpath:mybatis/mybatis-config.xml
mybatis.mapper-locations=classpath:mybatis/mapper/*.xml
mybatis.typeAliasesPackage=com.liqiaoqi.domain

3.添加UserMapper.xml。实现UserMapper映射的方法(即sql语句)将全部定义在该文件中。

<?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.liqiaoqi.mapper.UserMapper" >
    <resultMap id="UserResultMap" type="com.liqiaoqi.domain.User">
        <id property="id" column="id" />
        <result property="name" column="name" />
        <result property="age" column="age" />
    </resultMap>

    <insert id="insert">
        INSERT INTO
        user
        (name,age)
        VALUES
        (#{name},#{age})
    </insert>

    <select id="findByName" resultType="com.liqiaoqi.domain.User" >
        SELECT *
        FROM user
        WHERE name = #{name}
    </select>
</mapper>

除以上三点与基于注解方法稍有不同外,其余部分全部不作改变。两种方法结果相同。

以下是项目的完整结构:
项目的结构

以上源码:示例代码

参考资料

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值