springboot学习笔记(七)——整合mybatis(注解方式)

目录

前言:

开发环境:

项目结构:

项目完整案例:

配置文件:

        pom.xml文件:

        application.properties文件:

          数据库表:

开始开发:

            Mapper层:     

            Controller层:

            vo层:(实体)

测试:

总结:

 


前言:

          这一篇博文的延续上一篇的。只是使用mybatis的注解形式。相对来说注解形式和xml形式是有一些不同的。在之前学习的时候就遇到了一个小坑。   

开发环境:

         win10+IntelliJ IDEA +JDK1.8  

         springboot版本:springboot 1.5.14 ——2.0后的springboot增加了挺多新特性,暂时先不做了解

项目结构:

                             

项目完整案例:

            https://github.com/LuckToMeet-Dian-N/springboot_Learn_7

配置文件:

        pom.xml文件:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
	<modelVersion>4.0.0</modelVersion>

	<groupId>com.wen</groupId>
	<artifactId>demo</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<packaging>jar</packaging>

	<name>demo</name>
	<description>Demo project for Spring Boot</description>

	<parent>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-parent</artifactId>
		<version>2.0.3.RELEASE</version>
		<relativePath/> <!-- lookup parent from repository -->
	</parent>

	<properties>
		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
		<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
		<java.version>1.8</java.version>
	</properties>

	<dependencies>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-web</artifactId>
		</dependency>
		<dependency>
			<groupId>org.mybatis.spring.boot</groupId>
			<artifactId>mybatis-spring-boot-starter</artifactId>
			<version>1.3.2</version>
		</dependency>

		<dependency>
			<groupId>mysql</groupId>
			<artifactId>mysql-connector-java</artifactId>
			<scope>runtime</scope>
		</dependency>
		<dependency>
			<groupId>org.projectlombok</groupId>
			<artifactId>lombok</artifactId>
			<optional>true</optional>
		</dependency>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-test</artifactId>
			<scope>test</scope>
		</dependency>
	</dependencies>

	<build>
		<plugins>
			<plugin>
				<groupId>org.springframework.boot</groupId>
				<artifactId>spring-boot-maven-plugin</artifactId>
			</plugin>
		</plugins>
	</build>


</project>

        application.properties文件:

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

#日期期时格式设置置
#Format setting for date time
spring.jackson.date-format=yyyy-MM-dd HH:mm:ss

          数据库表:

                      用户表:

         

                       用于一对多的list表

           

开始开发:

            Mapper层:     

package com.wen.test.mapper;

import com.wen.test.vo.Lists;
import com.wen.test.vo.Users;
import org.apache.ibatis.annotations.*;

import java.util.List;

public interface UserMapper {
    /**
     * 最低级的使用。保持实体属性名和数据库列名一致
     *
     * @return
     */

    @Select("select * from user")
    List<Users> findAllUsers();

    /**
     * 高级一点的操作,
     * 实体的属性名可以与数据库列名不一致进行映射
     *
     * @return
     */

    @Results({@Result(id = true, property = "user_id", column = "user_id", javaType = Integer.class),
            @Result(property = "phone", column = "phone", javaType = String.class),
            @Result(property = "password", column = "password", javaType = String.class)
    })
    @Select("select * from user")
    List<Users> findAllUsers1();

    /**
     * 注解形式一对多
     *
     * @param user_id
     * @return
     */

    @Results({
            @Result(id = true, column = "user_id", property = "user_id"),
            @Result(column = "phone", property = "phone"),
            @Result(column = "password", property = "password"),
            @Result(column = "user_id", property = "lists", javaType = List.class,
                    many = @Many(
                            select = "com.wen.test.mapper.UserMapper.selectAllByUserId"
                    )
            )
    })
    @Select("select user.user_id,user.phone,user.password from user where  user.user_id=#{user_id}")
    Users getUsersAndLists(@Param("user_id") Integer user_id);


    /**
     * 被引用查询多个对象的方法
     *
     * @param user_id
     * @return
     */
    @Select("select list.lists,list.ids from list where list.user_id=#{user_id}")
    @Results({
            @Result(id = true, column = "ids", property = "id"),
            @Result(column = "lists", property = "lists")
    })
    List<Lists> selectAllByUserId(@Param("user_id") Integer user_id);

    /**
     * 一对一的话,用的是one =@One()这个注解。。
     * 在写一个查询单个的接口。就可以了。。这里就不写了。。持续懒惰中。。。。
     */


}

            Controller层:

package com.wen.test.mapper;

import com.wen.test.vo.Lists;
import com.wen.test.vo.Users;
import org.apache.ibatis.annotations.*;

import java.util.List;

public interface UserMapper {
    /**
     * 最低级的使用。保持实体属性名和数据库列名一致
     *
     * @return
     */

    @Select("select * from user")
    List<Users> findAllUsers();

    /**
     * 高级一点的操作,
     * 实体的属性名可以与数据库列名不一致进行映射
     *
     * @return
     */

    @Results({@Result(id = true, property = "user_id", column = "user_id", javaType = Integer.class),
            @Result(property = "phone", column = "phone", javaType = String.class),
            @Result(property = "password", column = "password", javaType = String.class)
    })
    @Select("select * from user")
    List<Users> findAllUsers1();

    /**
     * 注解形式一对多
     *
     * @param user_id
     * @return
     */

    @Results({
            @Result(id = true, column = "user_id", property = "user_id"),
            @Result(column = "phone", property = "phone"),
            @Result(column = "password", property = "password"),
            @Result(column = "user_id", property = "lists", javaType = List.class,
                    many = @Many(
                            select = "com.wen.test.mapper.UserMapper.selectAllByUserId"
                    )
            )
    })
    @Select("select user.user_id,user.phone,user.password from user where  user.user_id=#{user_id}")
    Users getUsersAndLists(@Param("user_id") Integer user_id);


    /**
     * 被引用查询多个对象的方法
     *
     * @param user_id
     * @return
     */
    @Select("select list.lists,list.ids from list where list.user_id=#{user_id}")
    @Results({
            @Result(id = true, column = "ids", property = "id"),
            @Result(column = "lists", property = "lists")
    })
    List<Lists> selectAllByUserId(@Param("user_id") Integer user_id);

    /**
     * 一对一的话,用的是one =@One()这个注解。。
     * 在写一个查询单个的接口。就可以了。。这里就不写了。。持续懒惰中。。。。
     */


}

            vo层:(实体)

package com.wen.test.vo;

import lombok.Data;

import java.util.List;

@Data
public class Users  {

    private Integer user_id;
    private String phone;
    private String password;
    /**
     * 一对多
     */
    private  List<Lists> lists;


}
package com.wen.test.vo;

import lombok.Data;

@Data
public class Lists {
    private Integer id;
    private String lists;
}

测试:

        测试一对多:(显示部分,太多不完全截图)

       测试列名与实体属性名不一致的方法:

        测试列名与实体属性名一致的方法:

总结:

            注解形式的开发和jpa等ORM框架都很类似,只是一些注解不同。相信对jpa等orm有经验的同学一下子就可以直接编写了。本次入门案例简化了很多。但是依旧有很多知识点要注意的,当然,最重要的是自己的学习能力。如果实在不了解Mybatis的话,可以去找找学习的博客。最后,注大家学习进步,步步高升。                                                           — —谢谢

程序人生,与君共勉~!

猜你喜欢

转载自blog.csdn.net/weixin_41622183/article/details/81141169