【MyBatis】1、MyBatis 核心配置文件、多表查询、实体映射文件 ......

这篇具有很好参考价值的文章主要介绍了【MyBatis】1、MyBatis 核心配置文件、多表查询、实体映射文件 ......。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、学习内容

  • SSM(Spring、SpringMVC、MyBatis)
  • Apache Shiro
  • SpringBoot

二、数据库事务

  • 事务:若将 N 个数据库操作(CRUD)放到同一个事务中,则这 N 个数据库操作最终要么全都生效,要么全都不生效

  • 🍀 开启事务【START TRANSACTION

  • 🍀 回滚事务:若事务中的某个数据库操作失败,其他所有数据库操作都需要回滚(恢复到开启事务之前的状态)【ROLLBACK

  • 🍀 提交事务:如果事务中的所有数据库操作都成功被执行,就提交事务(让这些操作正式生效)【COMMIT

【MyBatis】1、MyBatis 核心配置文件、多表查询、实体映射文件 ......

【MyBatis】1、MyBatis 核心配置文件、多表查询、实体映射文件 ......

三、JDBC 的事务管理

🍀 JDBC 中用 Connection 对象来管理事务
🍀 connection.setAutoCommit(false):开启事务(自己管理事务)
🍀 connection.rollback():回滚事务 (若执行某条语句的过程中出现异常,之前执行过的语句恢复到最初状态)
🍀 connection.commit()
提交事务 (若所有语句都被正常执行,没有出现异常,会正常提交事务,让所有语句的修改都生效)

四、事务的四大特性

① 原子性(Atomicity)
🍀 事务作为一个整体被执行,包含在其中的对数据库的操作要么全部被执行,要么都不执行

② 一致性(Consistency)
🍀 事务应确保数据库的状态从一个一致状态转变为另一个一致状态。一致状态的含义是:数据库中的数据应满足完整性约束

③ 隔离性(Isolation)
🍀 多个事务并发执行时,一个事务的执行不应影响其他事务的执行

④ 持久性(Durability)
🍀 已被提交的事务对数据库的修改应该永久保存在数据库中

五、MyBatis

  • MyBatis 是一款优秀的持久层(Dao层)的框架

【MyBatis】1、MyBatis 核心配置文件、多表查询、实体映射文件 ......

中文官网:https://mybatis.org/mybatis-3/zh/index.html

六、MyBatis 核心配置文件和基本使用

(1) 🍀 添加依赖(MyBatis 依赖喝 MySQL 数据库连接驱动包)

 <dependencies>
     <!-- 引入 JDBC, Java 连接 MySQL 的驱动包 -->
     <dependency>
         <groupId>mysql</groupId>
         <artifactId>mysql-connector-java</artifactId>
         <version>5.1.49</version>
     </dependency>

     <!-- MyBatis 依赖 -->
     <dependency>
         <groupId>org.mybatis</groupId>
         <artifactId>mybatis</artifactId>
         <version>3.5.5</version>
     </dependency>
 </dependencies>

(2) 🍀 创建 MyBatis 的核心配置文件(文件名:mybatis-config.xml

XML 配置文件中包含了对 MyBatis 系统的核心设置,包括获取数据库连接实例的数据源(DataSource)以及决定事务作用域和控制方式的事务管理器(TransactionManager)

官方核心配置文件:https://mybatis.org/mybatis-3/zh/getting-started.html

【MyBatis】1、MyBatis 核心配置文件、多表查询、实体映射文件 ......【MyBatis】1、MyBatis 核心配置文件、多表查询、实体映射文件 ......

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
        PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
    <!-- 环境 -->
    <!-- default:使用哪个环境下的数据库配置 -->
    <environments default="development">
        <!-- 开发环境(开发调试阶段)-->
        <environment id="development">
            <!-- 采用 JDBC 的事务管理方法 -->
            <transactionManager type="JDBC"/>
            <!-- POOLED:采取 MyBatis 的连接池管理数据库连接 -->
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://localhost:3306/study_mb"/>
                <property name="username" value="root"/>
                <property name="password" value="root"/>
            </dataSource>
        </environment>

        <!-- 生产环境(发布阶段)-->
        <environment id="production">
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://localhost:3306/test_mybatis"/>
                <property name="username" value="root"/>
                <property name="password" value="root"/>
            </dataSource>
        </environment>
    </environments>
</configuration>

🍀 transactionManager 的 type 为 JDBC【采用 JDBC 方式来管理事务】
🍀 dataSource 的 type 为 POOLED【采用连接池的方式管理数据库连接】

【MyBatis】1、MyBatis 核心配置文件、多表查询、实体映射文件 ......
【MyBatis】1、MyBatis 核心配置文件、多表查询、实体映射文件 ......


 CREATE TABLE `student` (
  `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
  `name` varchar(22) NOT NULL,
  `money` bigint(20) NOT NULL,
  `create_time` varchar(20) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8mb4
public class Student {
    private Long id;
    private String name;
    private Long money;
    private String createTime;

    public String getCreateTime() {
        return createTime;
    }


    public void setCreateTime(String createTime) {
        this.createTime = createTime;
    }

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Long getMoney() {
        return money;
    }

    public void setMoney(Long money) {
        this.money = money;
    }

    @Override
    public String toString() {
        return "Student{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", money=" + money +
                ", createTime='" + createTime + '\'' +
                '}';
    }
}

七、查询 student 表

(1) 实体映射文件 mapper

  • 实体映射文件
    ① 用于做实体类之间的映射
    ② 在 mapper 文件夹下创建
    【MyBatis】1、MyBatis 核心配置文件、多表查询、实体映射文件 ......

  • 把映射文件的路径配置到核心配置文件(mybatis-config.xml)中
    ① 在核心配置文件中可通过 <mappers></mappers> 标签配置多个实体映射文件路径
    ② 在 <mappers></mappers> 标签中可配置多个 <mapper/> 标签(每个 <mapper /> 标签对应一个实体映射文件)
    【MyBatis】1、MyBatis 核心配置文件、多表查询、实体映射文件 ......

【MyBatis】1、MyBatis 核心配置文件、多表查询、实体映射文件 ......
【MyBatis】1、MyBatis 核心配置文件、多表查询、实体映射文件 ......

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "https://mybatis.org/dtd/mybatis-3-mapper.dtd">

<mapper namespace="student">
    <!-- id="list":后面可通过 list 对应该条 SQL 语句并执行该条 SQL 语句 -->
    <!-- resultType: 该条 SQL 语句的结果对应的 Java Bean -->
    <!-- 会自动将结果集映射为 List<Student> -->
    <select id="list" resultType="com.pojo.po.Student">
        SELECT * FROM student
    </select>
</mapper>

(2) 读取核心配置文件, 拿到 SqlSession

public class TestStudent {
    @Test
    public void testSelect() throws Exception {
        // 读取 MyBatis 的核心配置文件
        Reader reader = Resources.getResourceAsReader("mybatis-config.xml");
        // 创建工厂构建器
        SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
        // 创建工厂
        SqlSessionFactory factory = builder.build(reader);
        // 创建 SqlSession
        SqlSession sqlSession = factory.openSession();

        // 通过 sqlSession 执行 SQL 语句
        // 参数是 <mapper> 标签中的 namespace 和 <select> 标签的 id
        List<Student> studentList = sqlSession.selectList("student.list");

        for (Student student : studentList) {
            System.out.println("student = " + student);
        }
        
        // 关闭 session
        sqlSession.close();
    }
}

八、字段和属性名映射

(1) mapUnderscoreToCamelCase

【MyBatis】1、MyBatis 核心配置文件、多表查询、实体映射文件 ......

是否开启驼峰命名自动映射,即从经典数据库列名 A_COLUMN 映射到经典 Java 属性名 aColumn

若不配置,数据库表中以下划线方式命名的字段查询出的结果是 null

【MyBatis】1、MyBatis 核心配置文件、多表查询、实体映射文件 ......

<configuration>
    <settings>
        <setting name="mapUnderscoreToCamelCase" value="true"/>
    </settings>
</configuration>

🍀 假如不设置驼峰下划线自动映射,也可在实体映射文件中通过 <resultMap> 进行 Java Bean 和表字段的映射

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "https://mybatis.org/dtd/mybatis-3-mapper.dtd">

<mapper namespace="student">
    <!-- id="list":后面可通过 list 对应该条 SQL 语句并执行该条 SQL 语句 -->
    <!-- resultType: 该条 SQL 语句的结果对应的 Java Bean -->
    <!-- 会自动将结果集映射为 List<Student> -->
    <!--    <select id="list" resultType="com.pojo.po.Student">-->
    <!--        SELECT * FROM student-->
    <!--    </select>-->

    <resultMap id="resultMapStudent" type="com.pojo.po.Student">
        <!-- 属性名和字段名完全一样可不进行设置 -->
        <id property="id" column="id"/>
        <!--        <result property="id" column="id"/>-->
        <!--        <result property="name" column="name"/>-->
        <!--        <result property="money" column="money"/>-->
        <result property="createTime" column="create_time"/>
    </resultMap>

    <select id="list" resultMap="resultMapStudent">
        SELECT * FROM student
    </select>
</mapper>

(2) 完整的 settings 标签配置

<settings>
  <setting name="cacheEnabled" value="true"/>
  <setting name="lazyLoadingEnabled" value="true"/>
  <setting name="aggressiveLazyLoading" value="true"/>
  <setting name="multipleResultSetsEnabled" value="true"/>
  <setting name="useColumnLabel" value="true"/>
  <setting name="useGeneratedKeys" value="false"/>
  <setting name="autoMappingBehavior" value="PARTIAL"/>
  <setting name="autoMappingUnknownColumnBehavior" value="WARNING"/>
  <setting name="defaultExecutorType" value="SIMPLE"/>
  <setting name="defaultStatementTimeout" value="25"/>
  <setting name="defaultFetchSize" value="100"/>
  <setting name="safeRowBoundsEnabled" value="false"/>
  <setting name="safeResultHandlerEnabled" value="true"/>
  <setting name="mapUnderscoreToCamelCase" value="false"/>
  <setting name="localCacheScope" value="SESSION"/>
  <setting name="jdbcTypeForNull" value="OTHER"/>
  <setting name="lazyLoadTriggerMethods" value="equals,clone,hashCode,toString"/>
  <setting name="defaultScriptingLanguage" value="org.apache.ibatis.scripting.xmltags.XMLLanguageDriver"/>
  <setting name="defaultEnumTypeHandler" value="org.apache.ibatis.type.EnumTypeHandler"/>
  <setting name="callSettersOnNulls" value="false"/>
  <setting name="returnInstanceForEmptyRow" value="false"/>
  <setting name="logPrefix" value="exampleLogPreFix_"/>
  <setting name="logImpl" value="SLF4J | LOG4J | LOG4J2 | JDK_LOGGING | COMMONS_LOGGING | STDOUT_LOGGING | NO_LOGGING"/>
  <setting name="proxyFactory" value="CGLIB | JAVASSIST"/>
  <setting name="vfsImpl" value="org.mybatis.example.YourselfVfsImpl"/>
  <setting name="useActualParamName" value="true"/>
  <setting name="configurationFactory" value="org.mybatis.example.ConfigurationFactory"/>
</settings>

九、SqlSessionFactory 细节

🍀 SqlSessionFactory 一旦被创建就应该在应用的运行期间一直存在,没有任何理由丢弃它或重新创建另一个实例。 使用 SqlSessionFactory 的最佳实践是在应用运行期间不要重复创建多次,多次重建 SqlSessionFactory 被视为一种代码“坏习惯”。因此 SqlSessionFactory 的最佳作用域是应用作用域。 有很多方法可以做到,最简单的就是使用单例模式或者静态单例模式

【MyBatis】1、MyBatis 核心配置文件、多表查询、实体映射文件 ......

【MyBatis】1、MyBatis 核心配置文件、多表查询、实体映射文件 ......

/**
 * @author Larry Meadors
 */
public class SqlSessionManager implements SqlSessionFactory, SqlSession { 
    private final SqlSessionFactory sqlSessionFactory;

    // 构造方法私有化
    private SqlSessionManager(SqlSessionFactory sqlSessionFactory) {
         
    }

    public static SqlSessionManager newInstance(Reader reader) {
        return new SqlSessionManager(new SqlSessionFactoryBuilder().build(reader, null, null));
    }

    public static SqlSessionManager newInstance(Reader reader, String environment) {
        return new SqlSessionManager(new SqlSessionFactoryBuilder().build(reader, environment, null));
    } 

    public static SqlSessionManager newInstance(SqlSessionFactory sqlSessionFactory) {
        return new SqlSessionManager(sqlSessionFactory);
    }

}

public class MyBatisUtil {
    // 保留一份即可
    private static SqlSessionFactory sqlSessionFactory;

    static {
        try (Reader reader = Resources.getResourceAsReader("mybatis-config.xml")) {
            sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    /**
     * 返回一个 SqlSession
     *
     * @param autoCommit 是否自动提交事务
     */
    public static SqlSession openSession(boolean autoCommit) {
        return sqlSessionFactory.openSession(autoCommit);
    }
}

静态代码块只会在类加载时被执行一次,与对象无关。静态代码块使用 static 修饰,与对象无关

十、参数传递

(1) 参数占位符

${}:直接文本替换
#{}:预编译传值,可防止 SQL 注入

(2) 代码测试

🍃 传递单个参数

    /**
     * 传递单个参数
     */
    @Test
    public void testParam0() {
        try (SqlSession sqlSession = MyBatisUtil.openSession(true)) {
            Student studentById = sqlSession.selectOne("student.getById", 3);
            System.out.println("testParam0 studentById = " + studentById);
        }
    }
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "https://mybatis.org/dtd/mybatis-3-mapper.dtd">

<mapper namespace="student"> 
    <select id="getById" resultType="com.pojo.po.Student">
        <!-- #{}: 参数占位符 -->
        SELECT * FROM student WHERE id = #{id}
    </select>
</mapper>

🍃 多个参数的传递

public class TestStudent {

    /**
     * 传递多个参数
     */
    @Test
    public void testParam1() {
        try (SqlSession sqlSession = MyBatisUtil.openSession(true)) {
            Map<String, String> paramMap = new HashMap<>();
            paramMap.put("id", "3");
            paramMap.put("money", "7009900");

            List<Student> studentList = sqlSession.selectList("student.listByIdAndMoney", paramMap);
            for (Student student : studentList) {
                System.out.println("testParam1 student = " + student);
            }
        }
    }

    @Test
    public void testParam2() {
        try (SqlSession sqlSession = MyBatisUtil.openSession(true)) {
            Student studentParams = new Student();
            studentParams.setId(3L);
            studentParams.setMoney(7009900L);

            List<Student> studentList = sqlSession.selectList("student.listByIdAndMoney", studentParams);
            for (Student student : studentList) {
                System.out.println("testParam2 student = " + student);
            }
        }
    }
    
}
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "https://mybatis.org/dtd/mybatis-3-mapper.dtd">

<mapper namespace="student">

    <select id="listByIdAndMoney" resultType="com.pojo.po.Student">
        <!-- &lt;【表示小于符号】 -->
        SELECT * FROM student WHERE id &lt; #{id} OR money >= #{money}
    </select>
    
</mapper>

【MyBatis】1、MyBatis 核心配置文件、多表查询、实体映射文件 ......


模糊查询

public class TestStudent {

    @Test
    public void testParam3() {
        try (SqlSession sqlSession = MyBatisUtil.openSession(true)) {

            List<Student> studentList = sqlSession.selectList("student.getByName", "%张%");
            for (Student student : studentList) {
                System.out.println("testParam3 student = " + student);
            }
        }
    }
    
}
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "https://mybatis.org/dtd/mybatis-3-mapper.dtd">

<mapper namespace="student">
    <select id="getByName" resultType="com.pojo.po.Student">
        SELECT * FROM student WHERE name LIKE #{name}
    </select>
</mapper>

假如中文模糊查询没有结果,需要配置数据库的字符编码

【MyBatis】1、MyBatis 核心配置文件、多表查询、实体映射文件 ......

十一、日志打印

🍀 (1) 在核心配置文件中配置打印日志

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
        PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>

    <settings>
        <!-- 打印日志信息 -->
        <setting name="logImpl" value="STDOUT_LOGGING"/>
    </settings>
    
</configuration>

🍀 (2) 第三方日志打印库

<dependency>
  <groupId>ch.qos.logback</groupId>
  <artifactId>logback-classic</artifactId>
  <version>1.2.3</version>
  <scope>test</scope>
</dependency>

使用该第三方库的话需要取消核心配置文件中的配置
【MyBatis】1、MyBatis 核心配置文件、多表查询、实体映射文件 ......

十二、多表查询

(1) 准备工作

--- 公司表
CREATE TABLE `company` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(20) NOT NULL,
  `intro` varchar(1000) DEFAULT NULL,
  `create_time` varchar(20) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8mb4

--- 工作经验表
CREATE TABLE `experience` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `job` varchar(20) NOT NULL,
  `intro` varchar(1000) DEFAULT NULL,
  `company_id` int(11) NOT NULL,
  `create_time` varchar(20) NOT NULL,
  PRIMARY KEY (`id`),
  KEY `company_id` (`company_id`),
  CONSTRAINT `experience_ibfk_1` FOREIGN KEY (`company_id`) REFERENCES `company` (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8mb4
public class Company {
    private Long id;
    private String name;
    private String intro;
    private String createTime;
 
    @Override
    public String toString() {
        return "Company{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", intro='" + intro + '\'' +
                '}';
    }
}
public class Experience {
    private Long id;
    private String job;
    private String intro;
    private Company company;
    private String createTime;

    @Override
    public String toString() {
        return "Experience{" +
                "id=" + id +
                ", job='" + job + '\'' +
                ", intro='" + intro + '\'' +
                ", company=" + company +
                ", createTime='" + createTime + '\'' +
                '}';
    }
}

(2) 多表查询

查询 experience 表,同时查询出对应的 company 信息

写法1:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "https://mybatis.org/dtd/mybatis-3-mapper.dtd">

<mapper namespace="experience">

    <resultMap id="rmExp" type="com.pojo.po.Experience">
        <!-- c_id 会和 Experience 的 company 属性的 id 属性进行映射 -->
        <!-- c_name 会和 Experience 的 company 属性的 name 属性进行映射 -->
        <result property="company.id" column="c_id"/>
        <result property="company.name" column="c_name"/>
    </resultMap>
    <select id="list" resultMap="rmExp">
        SELECT
        e.*,
        c.id c_id,
        c.NAME c_name
        FROM
        experience e
        JOIN company c ON c.id = e.company_id
    </select>

</mapper>

写法2文章来源地址https://www.toymoban.com/news/detail-474484.html

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "https://mybatis.org/dtd/mybatis-3-mapper.dtd">

<mapper namespace="experience">

    <select id="list" resultType="com.pojo.po.Experience">
        SELECT
        e.*,
        c.id `company.id`,
        c.NAME `company.name`,
        c.intro `company.intro`
        FROM
        experience e
        JOIN company c ON c.id = e.company_id
    </select>

</mapper>

到了这里,关于【MyBatis】1、MyBatis 核心配置文件、多表查询、实体映射文件 ......的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • MyBatis多表查询

    目录 1. 多表关系回顾 2. 一对一查询 2.1 一对一多表查询方式一:基于标签进行手动结果映射封装  2.2 一对一多表查询方式二 - 通过标签来封装属性中所关联的对象 3. 一对多查询 4. 多对多查询 在项目开发当中一对一关系的表不常见,因为一对一关系的两张表通常会合并为一

    2024年02月10日
    浏览(24)
  • Mybatis核心配置文件介绍

    核心配置文件包含了 MyBatis 最核心的设置和属性信息 properties标签引入外部文件 具体使用,如下配置   typeAliases:为全类名起别名的父标签。 typeAlias:为全类名起别名的子标签。 属性 type:指定全类名 alias:指定别名 package:为指定包下所有类起别名的子标签。(别名就是类名

    2024年02月17日
    浏览(39)
  • mybatis核心配置文件解读

    目录 标签具体含义  数据源dataSource  properties导入配置 配置文档的顶层结构如下(必须严格按照以下顺序): configuration(配置)     properties(属性)     settings(设置)     typeAliases(类型别名)     typeHandlers(类型处理器)     objectFactory(对象工厂)     plugins(插件

    2024年02月16日
    浏览(38)
  • MyBatis多表查询和注解开发

    一对一查询的模型 用户表和订单表的关系为, 一个用户有多个订单,一个订单只从属于一个用户 一对一查询的需求:查询一个订单,与此同时查询出该订单所属的用户 一对一查询的语句 对应的sql语句: 查询的结果如下: 创建Order和User实体 创建OrderMapper接口 配置OrderMappe

    2024年02月04日
    浏览(34)
  • MyBatis多表查询+动态sql

    在全局配置文件中中设置MyBatis执行日志 假设有一个用户表和文章表,实体类中一个关联关系。 用户实体类 文章实体类 如果想查询的结果包含UserInfo的信息就需要使用,⼀对⼀映射要使⽤ association 标签,因为一篇文章只能对应一个作者。 Controller控制器代码 Service服务层代码

    2023年04月19日
    浏览(29)
  • 三、MyBatis核心配置文件详解

    核心配置文件中的标签必须按照固定的顺序: properties?,settings?,typeAliases?,typeHandlers?,objectFactory?,objectWrapperFactory?,reflectorFactory?,plugins?,environments?,databaseIdProvider?,mappers? application.properties 详情请看mybatis-config.xml配置文件 注意点1: 问题:mybatis-config.xml中的属性标签是有顺序的,乱

    2024年02月01日
    浏览(27)
  • 【MyBatis框架】核心配置文件讲解

    14天阅读挑战赛 1. 引言 在MyBatis的核心配置中,包含了很多影响MyBatis行为的重要信息,这些信息通常在一个项目中只会在一个配置文件中编写,并且编写后也不会轻易改动。虽然在实际项目中需要开发人员编写或修改的配置文件不多,但是熟悉配置文件中各个元素的功能还是

    2023年04月09日
    浏览(80)
  • mybatis xml多表查询,子查询,连接查询,动态sql

    student_type 表 student 表 Student 类 一个学生只有一个年级 Type 类 一个年级有多个学生,所以用 list 下列代码中: 1 resultMap 里面property对应实体类属性,column对应数据库字段名 2 主键用 id 标签 其他用result 3 关联查询(子查询和连接查询) 连接查询查一次 4 一个年级多个学生,所以

    2024年01月21日
    浏览(47)
  • MyBatis(多表查询,动态SQL的使用)

    目录 多表查询  查询文章详情 查询一个用户底下的所有文章 动态SQL的使用 if 标签 trim 标签  where 标签 set 标签 foreach 标签 现在有俩张表,一张是 文章表 ,一张是 用户表 .如下: 我们现在想查询得到一张表,表里面的内容和文章表大多一致,只是要 在文章表的基础上添加用户表中

    2024年02月10日
    浏览(36)
  • mybatis学习笔记之核心配置文件详解

    environments/environments 表示的是里面能配置多个环境 environment /environment 表示其中的一个环境 而如上的核心配置文件中的那个唯一环境表示的是连接的数据库是demo,可以后面再配置一个文件去连接另一个数据库。(一个环境对应一个数据库,而一个数据库对应一个SqlSessionFacto

    2024年02月16日
    浏览(44)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包