SpringBoot整合Mybatis

SpringBoot 整合Mybatis

步骤一:

在pom.xml文件中添加mybatis的依赖

        <!--mybatis依赖-->
        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>1.3.2</version>
        </dependency>

步骤二:

创建数据库:

CREATE TABLE `User` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键',
  `userName` varchar(255) DEFAULT NULL COMMENT '真实姓名',
  `userAccount` varchar(255) DEFAULT NULL COMMENT '登录帐号',
  `userPassword` varchar(255) NULL COMMENT '登录密码',
  `createTime` datetime DEFAULT NULL COMMENT '创建时间',
  `modifyTime` datetime DEFAULT NULL COMMENT '修改时间',
  `telNum` varchar(255) DEFAULT NULL COMMENT '手机号码',
  `gender` varchar(255) DEFAULT NULL COMMENT '性别;0:女;1:男',
  `birthday` datetime DEFAULT NULL COMMENT '生日',
  `email` varchar(255) DEFAULT NULL COMMENT '邮箱',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8;

为数据库表初始化数据:

INSERT INTO `spb`.`user` (`userName`, `userAccount`, `userPassword`, `createTime`, `modifyTime`, `telNum`, `gender`, `birthday`, `email`) 
VALUES 
('悟空', 'wukong', '123123', NOW(), NOW(), '18764472970', 1, 1992-05-21, 'wukong@163.com');

INSERT INTO `spb`.`user` (`userName`, `userAccount`, `userPassword`, `createTime`, `modifyTime`, `telNum`, `gender`, `birthday`, `email`) 
VALUES 
('唐僧', 'tangseng', '123123', NOW(), NOW(), '18764472970', 1, 1992-05-21, 'tangseng@163.com');

INSERT INTO `spb`.`user` (`userName`, `userAccount`, `userPassword`, `createTime`, `modifyTime`, `telNum`, `gender`, `birthday`, `email`) 
VALUES 
('八戒', 'bajie', '123123', NOW(), NOW(), '18764472970', 1, 1992-05-21, 'bajie@163.com');

INSERT INTO `spb`.`user` (`userName`, `userAccount`, `userPassword`, `createTime`, `modifyTime`, `telNum`, `gender`, `birthday`, `email`) 
VALUES 
('沙僧', 'shaseng', '123123', NOW(), NOW(), '18764472970', 1, 1992-05-21, 'shaseng@163.com');

INSERT INTO `spb`.`user` (`userName`, `userAccount`, `userPassword`, `createTime`, `modifyTime`, `telNum`, `gender`, `birthday`, `email`) 
VALUES 
('白龙马', 'bailongma', '123123', NOW(), NOW(), '18764472970', 1, 1992-05-21, 'bailongma@163.com');

步骤三:

创建User实体:

/**
 * @Data 注在类上,提供类的get、set、equals、hashCode、canEqual、toString方法(很多公司不使用lombok插件,虽然简化了代码,但不够灵活)
 * 优点:1、提高了一定的开发效率
 *       2、让代码变得简洁,不用过多的去关注相应的方法
 *       3、属性做修改时,也简化了维护为这些属性所生成的getter/setter方法等
 * 缺点:1、不支持多种参数构造器的重载
 *       2、虽然省去了手动创建getter/setter方法的麻烦,但大大降低了源代码的可读性和完整性,降低了阅读源代码的舒适度
 *
 * Lombok插件它在编译器编译时通过操作AST(抽象语法树)改变字节码生成,变相的说它就是在改变java语法,它改变了你编写源码的方式,
 * 它不像 spring 的依赖注入一样是运行时的特性,而是编译时的特性。(我不建议使用,主要还是看在实际开发中,看项目要求吧)
 */
@Data
@NoArgsConstructor //无参构造函数
@AllArgsConstructor//有参构造(全字段)
@Accessors(chain = true)//链式; 存取器。通过该注解可以控制getter和setter方法的形式。
public class User {
    private Long id;//主键
    private String userName;//真实姓名
    private String userAccount;//登录帐号
    private String userPassword;//登录密码
    private Date createTime;//创建时间
    private Date modifyTime;//修改时间
    private String telNum;//手机号码
    private Integer gender;//性别;0:女;1:男
    private Date birthday;//生日
    private String email;//邮箱
}

步骤四:

创建mapper包并创建接口UserMapper.java

/**
 * 持久层
 */
@Mapper
@Repository
public interface UserMapper {
    // 新增用户信息
    Long insert(User user);

    //更新用户信息
    boolean update(User user);

    //删除用户信息
    boolean delete(Long id);

    //通过id查询用户信息
    User getUserById(Long id);

    //查询用户列表
    List<User> getUsers(Map<String, Object> queryMap);
}

步骤五:

在resource下分别创建 mybatis目录、mapper目录并创建mybatis配置文件和用户的映射文件

1)在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>
    <settings>
        <!-- 开启二级缓存 -->
        <setting name="cacheEnabled" value="true"/>
    </settings>

</configuration>

2)在mybatis目录中创建mapper目录,并创建用户的映射文件UserMapper.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.java.spb.mapper.UserMapper">

    <!-- 新增 -->
    <insert id="insert" parameterType="user">
        INSERT INTO User (`userName`, `userAccount`, `userPassword`, `createTime`, `modifyTime`, `telNum`, `gender`, `birthday`, `email`)
        VALUES
        (#{userName},#{userAccount},#{userPassword},#{createTime},#{modifyTime},#{telNum},#{gender},#{birthday})
    </insert>

    <!--修改-->
    <update id="update" parameterType="user">
        UPDATE User
        <set>
            <if test="userName !=null and userName !=''">
                User.userName=#{userName},
            </if>
            <if test="userAccount !=null and userAccount !=''">
                User.userAccount=#{userAccount},
            </if>
            <if test="userPassword !=null and userPassword !=''">
                User.userPassword=#{userPassword},
            </if>
            <if test="createTime !=null and createTime !=''">
                User.createTime=#{createTime},
            </if>
            <if test="modifyTime !=null and modifyTime !=''">
                User.modifyTime=#{modifyTime},
            </if>
            <if test="telNum !=null and telNum !=''">
                User.telNum=#{telNum},
            </if>
            <if test="gender !=null and gender !=''">
                User.gender=#{gender},
            </if>
            <if test="birthday !=null and birthday !=''">
                User.birthday=#{birthday},
            </if>
            <if test="email !=null and email !=''">
                User.email=#{email},
            </if>

        </set>
        WHERE id=#{id}
    </update>

    <!--删除-->
    <delete id="delete" parameterType="Long">
        delete from User where id=#{id}
    </delete>

    <!--根据id查询-->
    <select id="getUserById" parameterType="Long" resultType="user">
        select * from User where id=#{id}
    </select>

    <!--查询用户列表-->
    <select id="getUsers" parameterType="Map" resultType="user">
        select * from User
        <where>
            1=1
            <if test="userName != null and userName !=''">
                AND User.userName=#{userName}
            </if>
            <if test="userAccount != null and userAccount !=''">
                AND User.userAccount=#{userAccount}
            </if>
        </where>
    </select>
</mapper>

步骤六:

application.yml配置mybatis信息

server:
  port: 80 #设置端口

#数据源配置
spring:
  datasource:
    type: com.alibaba.druid.pool.DruidDataSource #指定要使用的数据源类型
    driver-class-name: com.mysql.cj.jdbc.Driver #数据库驱动
    url: jdbc:mysql://localhost:3306/spb?useUnicode=true&characterEncoding=utf-8 #数据库连接url
    username: root #数据库用户名
    password: root #数据库密码

#mybatis配置
mybatis:
  config-location:classpath: mybatis/mybatis-config.xml
  type-aliases-package: com.java.spb.bean
  mapper-locations: classpath:mybatis/mapper/*.xml

步骤七:

1)创建service包,并创建UserService.java


/**
 * 用户服务接口
 */
public interface UserService {
    //方法省略,请参考UserMapper.java中的方法
}

2)在service包下创建impl包,并创建UserServiceImpl.java

/**
 * 用户服务实现类
 */
@Service
public class UserServiceImpl implements UserService {
    //注入持久层
    @Autowired
    private UserMapper userMapper;

    @Override
    public Long insert(User user) {
        Date date = new Date();//新增时创建时间和修改时间应该是一样的
        user.setCreateTime(date);//创建时间
        user.setModifyTime(date);//修改时间
        return userMapper.insert(user);
    }

    @Override
    public boolean update(User user) {
        user.setModifyTime(new Date());//修改时间
        return userMapper.update(user);
    }

    @Override
    public boolean delete(Long id) {
        return userMapper.delete(id);
    }

    @Override
    public User getUserById(Long id) {
        return userMapper.getUserById(id);
    }

    @Override
    public List<User> getUsers(Map<String, Object> queryMap) {
        return userMapper.getUsers(queryMap);
    }
}

步骤八:创建controller包,并创建UserController.java


/**
 * 控制层
 */
@RestController //@RestController = @Controller + @ResponseBody
public class UserController {
    /**
     * @Autowired和@Resource区别(面试时可能会问到):
     * 相同点:@Resource的作用相当于@Autowired,均可标注在字段或属性的setter方法上。
     * 不同点:
     * 1)提供方:
     *          @Autowired是由org.springframework.beans.factory.annotation.Autowired提供,换句话说就是由Spring提供;
     *          @Resource是由javax.annotation.Resource提供,即J2EE提供,需要JDK1.6及以上。
     * 2)注入方式:
     *          @Autowired只按照byType 注入;
     *          @Resource默认按byName自动注入,也提供按照byType 注入;
     * 3)属性:
     *          @Autowired按类型装配依赖对象,默认情况下它要求依赖对象必须存在,如果允许null值,可以设置它required属性为false。
     *          如果我们想使用按名称装配,可以结合@Qualifier注解一起使用。
     *          @Resource有两个中重要的属性:name和type。name属性指定byName,如果没有指定name属性,当注解标注在字段上,
     *          即默认取字段的名称作为bean名称寻找依赖对象,当注解标注在属性的setter方法上,即默认取属性名作为bean名称寻找依赖对象。
     *          需要注意的是,@Resource如果没有指定name属性,并且按照默认的名称仍然找不到依赖对象时,
     *          @Resource注解会回退到按类型装配。但一旦指定了name属性,就只能按名称装配了。
     */
    //注入用户服务层
    @Autowired
    private UserService userService;

    /**
     * Spring4.3中引进了{@GetMapping、@PostMapping、@PutMapping、@DeleteMapping、@PatchMapping}
     * 来帮助简化常用的HTTP方法的映射 并更好地表达被注解方法的语义
     *
     * @GetMapping: 处理get请求,传统的RequestMapping来编写应该是@RequestMapping(value = “/get/{id}”, method = RequestMethod.GET)
     *              新方法可以简写为: @GetMapping("/get/{id}")
     * @PostMapping: 处理post请求,传统的RequestMapping来编写应该是@RequestMapping(value = “/get/{id}”,method = RequestMethod.POST)
     *              新方法可以简写为: @PostMapping("/get/{id}")
     * @PutMapping: 和PostMapping作用等同,都是用来向服务器提交信息。如果是添加信息,倾向于用@PostMapping,
     *                如果是更新信息,倾向于用@PutMapping。两者差别不是很明显。
     *  @DeleteMapping 删除URL映射,具体没有再实践中用过,不知道好在什么地方
     *
     *  get请求特点:
     *      a. 请求参数会添加到请求资源路径的后面,只能添加少量参数(因为请求行只有一行,大约只能存放2K左右的数据)
     *      b. 请求参数会显示在浏览器地址栏,路由器会记录请求地址 (极为的不安全)
     *      c.如果传输中文,必定会乱码(原因:get请求默认编码格式为:IIO-8859-1,后台编码格式一般为:GBK或者UTF-8)
     *  post请求的特点:
     *      a. 请求参数添加到实体内容里面,可以添加大量的参数(也解释了为什么浏览器地址栏不能发送post请求,在地址栏里我们只能填写URL,并不能进入到Http包的实体当中)
     *      b. 相对安全,但是,post请求不会对请求参数进行加密处理(可以使用https协议来保证数据安全)
     */

    /**
     * 获取用户列表
     */
    @GetMapping("/getUsers")
    public List<User> getUsers(Map<String, Object> queryMap){
        List<User> users = userService.getUsers(queryMap);
        return users;
    }

    /**
     * 新增用户信息
     */
    @PostMapping("/insert")
    public String insertUser(@RequestBody User user){
        Long insert = userService.insert(user);
        return insert>0?"新增成功"+insert:"新增失败" + insert;
    }

    /**
     * 根据用户id查询信息
     * 传参形式使用Restful
     */
    @GetMapping("/getUser/{id}")
    public User getUserById(@PathVariable("id") Long id){
        User userInfo = userService.getUserById(id);
        return userInfo;
    }

    /**
     * 根据id删除用户信息
     */
    @DeleteMapping("/delete/{id}")
    public String deleteById(@PathVariable("id") Long id){
        boolean delete = userService.delete(id);
        return delete==true?"删除成功":"删除失败";
    }
}

步骤九:

下面介绍一个接口测试工具Postman,使用Postman挑一个接口来测试一下:

测试获取用户列表,路径:http://localhost/getUsers

 

关于SpringBoot 整合Mybatis,以及测试就到这里完事了。

如有疑问或问题,请批评指正。

源码传送

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值