SpringBoot入门之基于注解的Mybatis

今天学习下SpringBoot集成mybatis,集成mybatis一般有两种方式,一个是基于注解的一个是基于xml配置的。今天先了解下基于注解的mybatis集成。

一、引入依赖项

因为是mybatis嘛,肯定是要有mybatis相关的,同时用的是mysql,所以也需要引入mysql相关的。

        <!-- https://mvnrepository.com/artifact/org.mybatis.spring.boot/mybatis-spring-boot-starter -->
        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>1.3.2</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.11</version>
        </dependency>

二、创建model

这里创建了一个User的model,这样方便与数据库的表对照,这里在mysql中创建了一个名为mybatis的数据库,里面创建了一个user的表.同时创建了枚举类UserSexEnum.

CREATE TABLE `user` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(20) DEFAULT NULL,
  `age` int(11) DEFAULT NULL,
  `sex` varchar(20) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=9 DEFAULT CHARSET=utf8;

package com.example.model;

import java.io.Serializable;

public class User implements Serializable{
    @Override
    public String toString() {
        // TODO Auto-generated method stub
        return  "User [id=" + Id + ", name=" + Name + ", age=" + Age + "]";

    }

    public int getId() {
        return Id;
    }
    public void setId(int id) {
        Id = id;
    }
    public String getName() {
        return Name;
    }
    public void setName(String name) {
        Name = name;
    }
    public int getAge() {
        return Age;
    }
    public void setAge(int age) {
        Age = age;
    }
    private int Id;
    private String Name;
    private int Age; 

    private UserSexEnum Sex;

    public UserSexEnum getSex() {
        return Sex;
    }
    public void setSex(UserSexEnum sex) {
        Sex = sex;
    }

}

package com.example.model;

public enum UserSexEnum {
    MAN, WOMAN
}

三、创建Mapper

这里需要把model与操作数据库的sql对照起来,用什么对照呢?那就需要创建一个mapper.这里有增删改查。

package com.example.mapper;
import java.util.List;

import org.apache.ibatis.annotations.Delete;
import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.Result;
import org.apache.ibatis.annotations.Results;
import org.apache.ibatis.annotations.Select;
import org.apache.ibatis.annotations.Update;

import com.example.model.*;;

public interface  UserMapper {

    @Select("SELECT * FROM user")

    @Results({

        @Result(property = "Sex",  column = "sex", javaType = UserSexEnum.class),

        @Result(property = "Name", column = "name")

    })

    List<User> getAll();

    @Select("SELECT * FROM user WHERE id = #{id}")

    @Results({

        @Result(property = "Sex",  column = "sex", javaType = UserSexEnum.class),

        @Result(property = "Name", column = "name")

    })

    User getOne(int id);

    @Insert("INSERT INTO user(name,age,sex) VALUES(#{name}, #{age}, #{sex})")

    void insert(User user);

    @Update("UPDATE user SET name=#{userName},age=#{age} WHERE id =#{id}")

    void update(User user);

    @Delete("DELETE FROM user WHERE id =#{id}")

    void delete(int id);
}

四、配置扫描

上面配置了mapper,那怎么让系统知道mapper放在哪里呢?于是有了@MapperScan注解。

package com.example.demo;

import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
@MapperScan("com.example.mapper")
public class DemoApplication {

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

五、创建Controller

这里创建了UserController,一个是显示所有用户,一个是新增一个用户之后再显示所有用户。

package com.example.demo;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;

import com.example.mapper.UserMapper;
import com.example.model.User;
import com.example.model.UserSexEnum;

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

    @Autowired
    private UserMapper userMapper;

    @RequestMapping(value = "/alluser.do",method = RequestMethod.GET)
    public String getallusers(Model model) {
       List<User> users=userMapper.getAll();
       model.addAttribute("users", users);
       return "userlist";
    }
    @RequestMapping(value = "/insert.do",method = RequestMethod.GET)
    public String adduser(Model model) {
       User user=new User();
       user.setName("cuiyw");
       user.setAge(27);
       user.setSex(UserSexEnum.MAN);

       userMapper.insert(user);
       List<User> users=userMapper.getAll();
       model.addAttribute("users", users);
       return "userlist";
    }
}

六、数据库配置

上面mapper也设置了,model也设置了,那要与数据库交互,肯定要配置数据库地址这些信息吧。这里在运行的时候还报了一个错误.nested exception is java.sql.SQLException: The server time zone value ‘?D1ú±ê×?ê±??‘ is unrecognized or represents more than one time zone. You must configure either the server or JDBC driver (via the serverTimezone configuration property) to use a more specifc time zone value if you want to utilize time zone support.在mysql中设置了下时区:set global time_zone=‘+8:00‘;

spring.mvc.view.prefix=/view/

spring.mvc.view.suffix=.jsp
mybatis.type-aliases-package=com.example.model

spring.datasource.driverClassName = com.mysql.cj.jdbc.Driver
spring.datasource.url = jdbc:mysql://localhost:3306/mybatis
spring.datasource.username = root
spring.datasource.password = 123456

七、创建页面显示

这里还是按照上一博客用jsp显示数据。

<%@ page language="java" contentType="text/html; charset=utf-8"
    pageEncoding="utf-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Insert title here</title>
</head>
<body>
    <table>
    <tr><th>名字</th><th>年龄</th><th>性别</th></tr>
    <c:forEach items="${users}" var="item">
            <tr><td>${item.name}</td><td>${item.age}</td><td>${item.sex}</td></tr>
        </c:forEach>
     </table>
</body>
</html>

八、测试

这里先在浏览器打开http://localhost:8080/user/alluser.do,可以看到用户列表,然后输入http://localhost:8080/user/insert.do,就会看到列表显示多了一行数据。

九、小结

使用基于注解的集成mybatis比较省事方便,但有利有弊,对于多表相连的可能就不太方便,使用基于xml配置的可能就更会好些。

原文地址:https://www.cnblogs.com/5ishare/p/9292201.html

时间: 2024-08-27 14:15:14

SpringBoot入门之基于注解的Mybatis的相关文章

SpringBoot入门之基于Druid配置Mybatis多数据源

上一篇了解了Druid进行配置连接池的监控和慢sql处理,这篇了解下使用基于基于Druid配置Mybatis多数据源.SpringBoot默认配置数据库连接信息时只需设置url等属性信息就可以了,SpringBoot就会基于约定根据配置信息实例化对象,但是一般大型的项目都是有多个子系统或者多个数据源组成,那怎么使用SpringBoot进行Mybatis多数据源配置呢? 一.数据库准备 我们这里准备使用主从两个数据库来进行演示多数据源配置.一个主库用来写write,一个从库用来读read.至于两个

基于注解的Mybatis mapper 接口注意事项

基于注解的Mybatis mapper 接口功能没有mapper xml配置文件丰富,而且动态sql语句的灵活性不能和xml配置相比. 这里只说一下基于注解的动态sql注意事项: Mybatis提供注解 @InsertProvider, @UpdateProvider,@DeleteProvider和 @SelectProvider来提供动态sql功能. 提供动态sql的方法参数只有2种可能:无参数和一个参数.一个参数又分为2种情况:参数类型和mapper 接口方法参数相同,另一个就是Map<S

Spring boot 学习六 spring 继承 mybatis (基于注解)

MyBatis提供了多个注解如:@InsertProvider,@UpdateProvider,@DeleteProvider和@SelectProvider,这些都是建立动态语言和让MyBatis执行这些语言使用基于注解的mybatis的方法,还是比较好用的. 一 首先是定义mapper, @ SelectProvider去声明类(CitySqlProvide)和方法名(findByState), public interface CityMapper { @SelectProvider(ty

SpringBoot入门基础

SpringBoot入门 (一) HelloWorld 一 什么是springboot springboot是一个全新的框架,它设计的目的简化spring项目的初始环境的搭建和开发,主要有以下几个特点: 1.简化初始配置 ,可与主流框架集成: 2.内置Servlet容器,无需在打War包: 3.使用了Starter(启动器)管理依赖并版本控制: 4.大量的自动配置,简化开发,方便集成第三方: 5.提供准生产环境运行时的监控,如指标,健康,外部配置等: 6.无需XML配置,减少冗余代码 . 未使用

05_MyBatis基于注解的开发

 要想开发基于注解的MyBatis应用.需要先写一个带有注解的接口. PersonDao.java的写法如下: package com.rl.dao; import java.util.List; import java.util.Map; import org.apache.ibatis.annotations.Delete; import org.apache.ibatis.annotations.Insert; import org.apache.ibatis.annotations.

Mybatis(二)基于注解的入门实例

前言 上一篇简单的介绍了Mybatis的概念和基于XML来实现数据库的CRUD,这篇给大家实现基于注解的CRUD. 一.初始搭建 在基于注解当中前四步和上一篇基于XML是一样的,分别是: 1)创建数据库表 2)创建一个Java项目,并导入相应的jar包 3)项目中添加数据库配置文件 mybatis-configuration.xml 4)定义表对应的实体类 二.定义操作 user 表的注解接口 UserMapper.java package com.lance.mybatis.annocatio

【Mybatis】基于注解实现增删查改和多参数列表查询

林炳文Evankaka原创作品.转载请注明出处http://blog.csdn.net/evankaka 在[Mybatis]Mybatis入门概述及第一个Mybatis实例实现增删改查和[Mybatis]Mybatis接口编程方式实现增删改查演示了如何使用XML来操作Mybatis实现CRUD,但是大量的XML配置文件的编写是非常烦人的.因此Mybatis也提供了基于注解的配置方式,下面我们来演示一下使用接口加注解来实现CRUD的的例子. 一.创建数据库.数据表 use test; creat

SpringBoot入门四,添加MyBatis支持

项目基本配置参考SpringBoot入门一,使用myEclipse新建一个SpringBoot项目,使用myEclipse新建一个SpringBoot项目即可.现在来给项目添加一个MyBatis支持,添加方式非常简单,仅需两步即可,具体内容如下: 1. pom.xml添加以下配置信息 数据源采用最新的hikari,据说性能相当牛X,想了解的可以去百度一下 <!-- 引入默认连接池,SpringBoot2.x采用hikari连接池 --> <dependency> <group

SpringMVC详解(三)------基于注解的入门实例

前两篇博客我们讲解了基于XML 的入门实例,以及SpringMVC运行的详细流程.但是我们发现基于 XML 的配置还是比较麻烦的,而且,每个 Handler 类只能有一个方法,在实际开发中肯定是不可能这样来进行开发的.那么这篇博客我们就讲解实际开发中用的最多的基于注解配置的SpringMVC配置. 本篇博客源码下载 项目结构为: 1.在 web.xml 文件中配置前端处理器 <?xml version="1.0" encoding="UTF-8"?> &