StringBoot—mybatis (一)

新建springBoot项目

在这里插入图片描述

创建目录结构

在这里插入图片描述

导入数据库

1.Navicat Premium里新建 home-lib 数据库
在这里插入图片描述
2.选择项目文档中home-lib.sql文件
在这里插入图片描述
3.Navicat Premium打开前面新建的数据库,右键点击运行sql文件
在这里插入图片描述
导入需要的包
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.lib</groupId>
    <artifactId>home-lib</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>jar</packaging>
 
    <name>home-lib</name>
    <description>Demo project for Spring Boot</description>
 
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.0.5.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>
 
        <mybatis.generator.version>1.3.2</mybatis.generator.version>
        <mysql.connector.java.version>6.0.6</mysql.connector.java.version>
 
 
        <!-- Used by MyBatis Generator to Generate Codes -->
        <!-- 运行命令: mvn mybatis-generator:generate -e -->
        <!--<classPathEntry.mysql.location>${basedir}/target/${project.artifactId}/WEB-INF/lib/mysql-connector-java-${mysql.connector.java.version}.jar</classPathEntry.mysql.location>-->
        <classPathEntry.mysql.location>/Users/14217/Downloads/mysql-connector-java-5.1.38.jar</classPathEntry.mysql.location>
        <javaModelGenerator.targetProject>${basedir}/src/main/java</javaModelGenerator.targetProject>
        <sqlMapGenerator.targetProject>${basedir}/src/main/resources</sqlMapGenerator.targetProject>
        <javaClientGenerator.targetProject>${basedir}/src/main/java</javaClientGenerator.targetProject>
        <mybatis.generator.configurationFile>${basedir}/src/main/resources/generator/generatorConfig.xml</mybatis.generator.configurationFile>
        <mybatis.generator.overwrite>true</mybatis.generator.overwrite>
 
    </properties>
 
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-jdbc</artifactId>
        </dependency>
        <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.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid</artifactId>
            <version>1.0.9</version>
        </dependency>
        <!-- 自动生成代码 mybatis-generator -->
        <dependency>
            <groupId>org.mybatis.generator</groupId>
            <artifactId>mybatis-generator</artifactId>
            <version>1.3.5</version>
            <type>pom</type>
        </dependency>
        <!-- https://mvnrepository.com/artifact/org.mybatis.generator/mybatis-generator-core -->
        <dependency>
            <groupId>org.mybatis.generator</groupId>
            <artifactId>mybatis-generator-core</artifactId>
            <version>1.3.5</version>
        </dependency>
        <!--避坑包-->
        <dependency>
            <groupId>net.sourceforge.nekohtml</groupId>
            <artifactId>nekohtml</artifactId>
            <version>1.9.22</version>
        </dependency>
        <!--解析html包-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-thymeleaf</artifactId>
        </dependency>
        <!--mybatis 自动生成插件-->
        <dependency>
            <groupId>org.mybatis.generator</groupId>
            <artifactId>mybatis-generator-core</artifactId>
            <version>1.3.5</version>
        </dependency>
        <!-- 热部署设置 optional=true,依赖不会传递,该项目依赖devtools;之后依赖myboot项目的项目如果想要使用devtools,需要重新引入 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
            <optional>true</optional>
        </dependency>
 
        <!-- http://mvnrepository.com/artifact/io.springfox/springfox-swagger2 -->
        <dependency>
            <groupId>io.springfox</groupId>
            <artifactId>springfox-swagger2</artifactId>
            <version>2.6.1</version>
        </dependency>
        <dependency>
            <groupId>io.springfox</groupId>
            <artifactId>springfox-swagger-ui</artifactId>
            <version>2.6.1</version>
        </dependency>
 
 
        <!-- log4j日志 -->
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-api</artifactId>
            <version>1.7.21</version>
        </dependency>
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-log4j12</artifactId>
            <version>1.7.21</version>
        </dependency>
 
        <!--lombok 用注解代替set Git方法-->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.16.10</version>
        </dependency>
 
    </dependencies>
 
    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <configuration>
                    <jvmArguments>-Dfile.encoding=UTF-8</jvmArguments>
                </configuration>
            </plugin>
            <!-- (1)  mybatis generator 自动生成代码插件 -->
            <plugin>
                <groupId>org.mybatis.generator</groupId>
                <artifactId>mybatis-generator-maven-plugin</artifactId>
                <version>1.3.6</version>
                <configuration>
                    <configurationFile>${basedir}/src/main/resources/generator/generatorConfig.xml</configurationFile>
                    <overwrite>true</overwrite>
                    <verbose>true</verbose>
                </configuration>
            </plugin>
            <!-- (2)  mybatis generator 自动生成代码插件 -->
            <!--         <plugin>
                            <groupId>org.mybatis.generator</groupId>
                            <artifactId>mybatis-generator-maven-plugin</artifactId>
                            <version>1.3.5</version>
                            <configuration>
                                <verbose>true</verbose>
                                <overwrite>true</overwrite>
                            </configuration>
                            <executions>
                                <execution>
                                    <id>Generate MyBatis Artifacts</id>
                                    <goals>
                                        <goal>generate</goal>
                                    </goals>
                                </execution>
                            </executions>
                            <dependencies>
                                <dependency>
                                    <groupId>org.mybatis.generator</groupId>
                                    <artifactId>mybatis-generator-core</artifactId>
                                    <version>1.3.5</version>
                                </dependency>
                            </dependencies>
                        </plugin>-->
        </plugins>
 
    </build>
 
 
</project>

配置自动生成代码
1.generator目录下

新建 generatorConfig.xml文件

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE generatorConfiguration
        PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN"
        "http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd">
<generatorConfiguration>
    <!-- 数据库驱动:选择你的本地硬盘上面的数据库驱动包-->
    <classPathEntry  location="C:\Users\P0114255\.m2\repository\mysql\mysql-connector-java\5.1.47\mysql-connector-java-5.1.47.jar" />
    <context id="DB2Tables"  targetRuntime="MyBatis3">
        <commentGenerator>
            <property name="suppressDate" value="true"/>
            <!-- 是否去除自动生成的注释 true:是 : false:否 -->
            <property name="suppressAllComments" value="true"/>
        </commentGenerator>
        <!--数据库链接URL,用户名、密码 -->
        <jdbcConnection driverClass="com.mysql.jdbc.Driver" connectionURL="jdbc:mysql://127.0.0.1:3306/cat" userId="root" password="root">
        </jdbcConnection>
        <javaTypeResolver>
            <property name="forceBigDecimals" value="false"/>
        </javaTypeResolver>
        <!-- 生成模型的包名和位置-->
        <javaModelGenerator targetPackage="com.lib.homelib.model" targetProject="${javaClientGenerator.targetProject}">
            <property name="enableSubPackages" value="true"/>
            <property name="trimStrings" value="true"/>
        </javaModelGenerator>
        <!-- 生成映射文件的包名和位置-->
        <sqlMapGenerator targetPackage="mapping"   targetProject="${sqlMapGenerator.targetProject}">
            <property name="enableSubPackages" value="true"/>
        </sqlMapGenerator>
        <!-- 生成DAO的包名和位置-->
        <javaClientGenerator type="XMLMAPPER" targetPackage="com.lib.homelib.mapper" targetProject="${javaClientGenerator.targetProject}">
            <property name="enableSubPackages" value="true"/>
        </javaClientGenerator>
        <!-- 要生成的表 tableName是数据库中的表名或视图名 domainObjectName是实体类名-->
        <table tableName="t_user" domainObjectName="TUser" enableCountByExample="false" enableUpdateByExample="false" enableDeleteByExample="false" enableSelectByExample="false" selectByExampleQueryId="false"></table>
    </context>
</generatorConfiguration>

其中

location对应的地址可以直接从maven里复制
在这里插入图片描述
2.用maven project编译
在这里插入图片描述
在这里插入图片描述
输入:mybatis-generator:generate -e
在这里插入图片描述
成功后,在这三个目录下生成三个文件,如果失败的话,检查下generatorConfig.xml里面的目录结
在这里插入图片描述
controller的几种调用方法

1.新建LoginController

package com.lib.homelib.controller;
 
 
import com.lib.homelib.mapper.DictMapper;
import com.lib.homelib.model.Dict;
import com.lib.homelib.service.DictService;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import javax.annotation.Resource;
import java.util.HashMap;
import java.util.Map;
@RequestMapping("/Login")
@Controller
public class LoginController {
 
    @Resource
    public DictMapper dictMapper;
    @Resource
    DictService dictService;
    /**
     * 直接使用Mapper
     * @return
     */
    @RequestMapping(value = "/index", produces = "text/html")
    public String routerListView() {
        Dict dict = dictMapper.selectByPrimaryKey(Long.valueOf(1));
        System.out.println(dict.getId());
        return "index";
    }
    /**
     * 直接使用Mapper
     * @return
     */
    @RequestMapping(value = "/getAllUser")
    @ResponseBody
    public Map<String,Object> getAllUser() {
        Map<String,Object> resutl = new HashMap<>();
        resutl.put("code","100");
        resutl.put("user",dictMapper.findAllUser());
        return resutl;
    }
    /**
     * Service中用Mapper
     * @return
     */
    @RequestMapping("/getAllUserService")
    @ResponseBody
    public Map<String,Object> getAllUserService(){
        Map<String,Object> resutl = new HashMap<>();
        resutl.put("code","100");
        resutl.put("user",dictService.findAllUser());
        return resutl;
    }
 
    /**
     * Service中调用Dao方法,dao通过构造方法注入
     * @return
     */
    @RequestMapping("/getAllUserServiceDao")
    @ResponseBody
    public Map<String,Object> getAllUserServiceDao(){
        Map<String,Object> resutl = new HashMap<>();
        resutl.put("code","100");
        resutl.put("user",dictService.findAllUserDao());
        return resutl;
    }
 
}

2.service包中新建DictService文件

package com.lib.homelib.service;
 
import com.lib.homelib.model.Dict;
 
import java.util.List;
 
public interface DictService {
 
    Dict findUserById(Long id);
 
    List<Dict> findAllUser();
 
    List<Dict> findAllUserDao();
}
 

3.service包中新建Impl包,Impl包中创建DictServiceImpl文件

package com.lib.homelib.service.imp;
 
 
import com.lib.homelib.dao.DictDao;
import com.lib.homelib.mapper.DictMapper;
import com.lib.homelib.model.Dict;
import com.lib.homelib.service.DictService;
import org.springframework.stereotype.Service;
 
import javax.annotation.Resource;
import java.util.List;
 
@Service
public class DictServiceImpl implements DictService {
 
    @Resource
    DictMapper dictMapper;
 
    @Resource
    DictDao dictDao;
 
    @Override
    public Dict findUserById(Long id) {
        Dict dict = new Dict();
        try {
            dict  = dictMapper.selectByPrimaryKey(id);
        }catch (Exception e){
            e.printStackTrace();
        }
        return dict;
    }
 
    @Override
    public List<Dict> findAllUser() {
        List<Dict> userList = dictMapper.findAllUser();
        System.out.println("数组长度为:"+userList.size());
        return userList;
    }
    @Override
    public List<Dict> findAllUserDao() {
        List<Dict> userList = dictMapper.findAllUser();
        System.out.println("数组长度为:"+userList.size());
        return userList;
    }
}
 

4.dao包中创建DictDao文件

package com.lib.homelib.dao;
 
 
 
import com.lib.homelib.model.Dict;
 
import java.util.List;
 
public interface DictDao {
 
    List<Dict> findAllUser();
}

5.dao包中创建Impl包,包中创建DictDaoImpl文件

package com.lib.homelib.dao.imp;
 
 
import com.lib.homelib.dao.DictDao;
import com.lib.homelib.model.Dict;
import org.mybatis.spring.SqlSessionTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;
 
import java.util.List;
 
@Repository
public class DictDaoImpl implements DictDao {
 
    @Autowired
    private SqlSessionTemplate mySessionTemplate;
    //在这里用构造方法注入
    public DictDaoImpl(SqlSessionTemplate sqlSessionTemplate){
        this.mySessionTemplate = sqlSessionTemplate;
    }
 
    @Override
    public List<Dict> findAllUser() {
 
        return mySessionTemplate.selectList("Dict.findAllUser");
    }
}

6.resources目录下的mapping目录中,加入新的方法

<select id="findAllUser" parameterType="java.lang.Long"  resultMap="BaseResultMap">
    select
    <include refid="Base_Column_List" />
    from dict
  </select>

加完后的内容为

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.bootmy.mapper.DictMapper">
  <resultMap id="BaseResultMap" type="com.bootmy.model.Dict">
    <id column="id" jdbcType="BIGINT" property="id" />
    <result column="dict_name" jdbcType="VARCHAR" property="dictName" />
    <result column="dict_key" jdbcType="VARCHAR" property="dictKey" />
    <result column="dict_code" jdbcType="VARCHAR" property="dictCode" />
    <result column="dict_delete_directly" jdbcType="INTEGER" property="dictDeleteDirectly" />
    <result column="dict_note" jdbcType="VARCHAR" property="dictNote" />
    <result column="dict_status" jdbcType="INTEGER" property="dictStatus" />
  </resultMap>
  <sql id="Base_Column_List">
    id, dict_name, dict_key, dict_code, dict_delete_directly, dict_note, dict_status
  </sql>
  <select id="findAllUser" parameterType="java.lang.Long"  resultMap="BaseResultMap">
    select
    <include refid="Base_Column_List" />
    from dict
  </select>
  <select id="selectByPrimaryKey" parameterType="java.lang.Long" resultMap="BaseResultMap">
    select 
    <include refid="Base_Column_List" />
    from dict
    where id = #{id,jdbcType=BIGINT}
  </select>
  <delete id="deleteByPrimaryKey" parameterType="java.lang.Long">
    delete from dict
    where id = #{id,jdbcType=BIGINT}
  </delete>
  <insert id="insert" parameterType="com.bootmy.model.Dict">
    insert into dict (id, dict_name, dict_key, 
      dict_code, dict_delete_directly, dict_note, 
      dict_status)
    values (#{id,jdbcType=BIGINT}, #{dictName,jdbcType=VARCHAR}, #{dictKey,jdbcType=VARCHAR}, 
      #{dictCode,jdbcType=VARCHAR}, #{dictDeleteDirectly,jdbcType=INTEGER}, #{dictNote,jdbcType=VARCHAR}, 
      #{dictStatus,jdbcType=INTEGER})
  </insert>
  <insert id="insertSelective" parameterType="com.bootmy.model.Dict">
    insert into dict
    <trim prefix="(" suffix=")" suffixOverrides=",">
      <if test="id != null">
        id,
      </if>
      <if test="dictName != null">
        dict_name,
      </if>
      <if test="dictKey != null">
        dict_key,
      </if>
      <if test="dictCode != null">
        dict_code,
      </if>
      <if test="dictDeleteDirectly != null">
        dict_delete_directly,
      </if>
      <if test="dictNote != null">
        dict_note,
      </if>
      <if test="dictStatus != null">
        dict_status,
      </if>
    </trim>
    <trim prefix="values (" suffix=")" suffixOverrides=",">
      <if test="id != null">
        #{id,jdbcType=BIGINT},
      </if>
      <if test="dictName != null">
        #{dictName,jdbcType=VARCHAR},
      </if>
      <if test="dictKey != null">
        #{dictKey,jdbcType=VARCHAR},
      </if>
      <if test="dictCode != null">
        #{dictCode,jdbcType=VARCHAR},
      </if>
      <if test="dictDeleteDirectly != null">
        #{dictDeleteDirectly,jdbcType=INTEGER},
      </if>
      <if test="dictNote != null">
        #{dictNote,jdbcType=VARCHAR},
      </if>
      <if test="dictStatus != null">
        #{dictStatus,jdbcType=INTEGER},
      </if>
    </trim>
  </insert>
  <update id="updateByPrimaryKeySelective" parameterType="com.bootmy.model.Dict">
    update dict
    <set>
      <if test="dictName != null">
        dict_name = #{dictName,jdbcType=VARCHAR},
      </if>
      <if test="dictKey != null">
        dict_key = #{dictKey,jdbcType=VARCHAR},
      </if>
      <if test="dictCode != null">
        dict_code = #{dictCode,jdbcType=VARCHAR},
      </if>
      <if test="dictDeleteDirectly != null">
        dict_delete_directly = #{dictDeleteDirectly,jdbcType=INTEGER},
      </if>
      <if test="dictNote != null">
        dict_note = #{dictNote,jdbcType=VARCHAR},
      </if>
      <if test="dictStatus != null">
        dict_status = #{dictStatus,jdbcType=INTEGER},
      </if>
    </set>
    where id = #{id,jdbcType=BIGINT}
  </update>
  <update id="updateByPrimaryKey" parameterType="com.bootmy.model.Dict">
    update dict
    set dict_name = #{dictName,jdbcType=VARCHAR},
      dict_key = #{dictKey,jdbcType=VARCHAR},
      dict_code = #{dictCode,jdbcType=VARCHAR},
      dict_delete_directly = #{dictDeleteDirectly,jdbcType=INTEGER},
      dict_note = #{dictNote,jdbcType=VARCHAR},
      dict_status = #{dictStatus,jdbcType=INTEGER}
    where id = #{id,jdbcType=BIGINT}
  </update>
</mapper>

7.mapper包下存在的DictMapper里加入自对应的List findAllUser();方法

在这里插入图片描述

8.springboot启动类SpringBootMybatisApplication 中加注解

@MapperScan(value = "com.bootmy.mapper")
@ComponentScan(basePackages = "com.bootmy")

SpringBootMybatisApplication中内容为

package com.lib.homelib;
 
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.ComponentScan;
import springfox.documentation.swagger2.annotations.EnableSwagger2;
 
@SpringBootApplication
@MapperScan(value = "com.lib.homelib.mapper")
@ComponentScan(basePackages = "com.lib.homelib")
@EnableSwagger2
public class HomeLibApplication {
 
    public static void main(String[] args) {
        SpringApplication.run(HomeLibApplication.class, args);
    }
}

9.配置文件application.properties中内容

server.port=<span class="hljs-number">8080</span>
<span class="hljs-comment">#设定ftl文件路径</span>
spring.freemarker.template-loader-path=classpath:<span class="hljs-regexp">/templates
spring.freemarker.cache=false
spring.freemarker.suffix=.html
#设定静态文件路径,js,css等
#spring.mvc.static-path-pattern=/static</span><span class="hljs-regexp">/**

#热部署生效
spring.devtools.restart.enabled:true
#设置重启的目录
spring.devtools.restart.additional-paths:src/main</span><span class="hljs-regexp">/java 
#classpath目录下的WEB-INF文件夹内容修改不重启
spring.devtools.restart.exclude:WEB-INF/</span>** 
<span class="hljs-comment">#端口后加</span>
<span class="hljs-comment">#server.servlet.context-path=/caisexiaochou</span>

spring.datasource.username=root
spring.datasource.password=root
spring.datasource.url=jdbc:mysql:<span class="hljs-regexp">//</span><span class="hljs-number">127.0</span>.<span class="hljs-number">0</span>.<span class="hljs-number">1</span>:<span class="hljs-number">3306</span>/cat?characterEncoding=UTF-<span class="hljs-number">8</span>&useUnicode=true
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
spring.datasource.minIdle=<span class="hljs-number">3</span>
spring.datasource.maxWait=<span class="hljs-number">600000</span>
spring.datasource.removeAbandoned=true
spring.datasource.removeAbandonedTimeout=<span class="hljs-number">180</span>
spring.datasource.timeBetweenEvictionRunsMillis=<span class="hljs-number">600000</span>
spring.datasource.minEvictableIdleTimeMillis=<span class="hljs-number">300000</span>
spring.datasource.validationQuery=SELECT <span class="hljs-number">1</span> FROM DUAL
spring.datasource.testWhileIdle=true
spring.datasource.testOnBorrow=false
spring.datasource.testOnReturn=false
spring.datasource.poolPreparedStatements=true
spring.datasource.maxPoolPreparedStatementPerConnectionSize=<span class="hljs-number">50</span>
spring.datasource.filters=<span class="hljs-keyword">stat</span>

mybatis.mapper-locations=classpath*:mapping/*Mapper.xml
<span class="hljs-comment">#mybatis.type-aliases-package=com.bootMy.model.*</span>

<span class="hljs-comment">#日志显示SQL</span>
logging.level.com.lib.homelib.mapper = debug

关于热部署的,可以看我另外一篇博客

https://blog.csdn.net/tangcv/article/details/80480542

如果IDEA中设置过的,这里不需要做别的配置,可以直接用,修改完java文件,发现不能重启项目的,可以百度下IDEA设置热部署

10.resources下templates目录下新建 index.html

在这里插入图片描述

启动 SpringBootMybatisApplication文件

在这里插入图片描述

访问 http://127.0.0.1:8080/Login/index 显示下面内容,成功!

在这里插入图片描述

控制台打印

在这里插入图片描述

通过dictMapper中生成的方法,传入id 查询对应的一条数据

访问 http://127.0.0.1:8080/Login/getAllUserServiceDao 显示

在这里插入图片描述

在Spring Boot中使用MyBatis实现一对多关系,可以通过在实体类中定义关联关系,以及在Mapper.xml文件中编写SQL语句来实现。以下是一个简单的示例: 假设我们有两个实体类:Order和OrderItem,一个订单可以包含多个订单项。Order类中包含一个List<OrderItem>类型的属性,表示该订单包含的所有订单项。我们可以在Order类中定义一个方法,使用MyBatis的@Select注解来查询该订单的所有订单项: ```java public class Order { private Long id; private String orderNo; private List<OrderItem> orderItems; // getter和setter方法省略 @Select("SELECT * FROM order_item WHERE order_id = #{id}") public List<OrderItem> getOrderItems() { return orderItems; } } ``` 在Mapper.xml文件中,我们可以编写一个查询订单及其所有订单项的SQL语句: ```xml <select id="getOrderById" resultType="Order"> SELECT * FROM orders WHERE id = #{id}; <collection property="orderItems" ofType="OrderItem"> SELECT * FROM order_item WHERE order_id = #{id} </collection> </select> ``` 在这个SQL语句中,我们使用了MyBatis的collection元素来定义订单项的集合属性。当MyBatis执行这个SQL语句时,它会自动将查询结果映射到Order对象中,并将所有查询到的订单项添加到Order对象的orderItems属性中。 在Spring Boot中使用MyBatis实现一对多关系,需要在pom.xml文件中添加MyBatisMyBatis-Spring的依赖,以及配置MyBatis的SqlSessionFactory和MapperScannerConfigurer。具体的配置方法可以参考官方文档或其他教程。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值