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;
    }


}
View Code
package com.example.model;

public enum UserSexEnum {
    MAN, WOMAN
}
View Code

三、創建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 'Öйú±ê׼ʱ¼ä' 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配置的可能就更會好些。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM