zoukankan      html  css  js  c++  java
  • 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配置的可能就更会好些。

  • 相关阅读:
    CSS3 3D Transform
    js关闭当前页面(窗口)的几种方式总结
    JavaScript书籍阅读
    使用@media screen解决移动web开发的多分辨率问题
    ie678 兼容问题
    JS动态引入js,CSS——动态创建script/link/style标签
    扁平化设计的流行配色方案
    最简单的jquery轮播图
    ie7 z-index 失效问题
    js正则表达式手机号(邮箱)验证
  • 原文地址:https://www.cnblogs.com/5ishare/p/9292201.html
Copyright © 2011-2022 走看看