MyBatis学习笔记(三)

本文介绍了如何使用MyBatis进行select查询,包括查找单个对象和多个对象的方法,强调了mapper.xml中resultType的使用和占位符的注意事项。此外,还讨论了mapper配置文件中namespace的作用,确保在相同id时避免冲突。同时,文章详细阐述了MyBatis的环境配置项,包括如何配置多个数据库环境以及如何指定特定环境。最后,提到了数据源配置的不同类型及其相关属性。
摘要由CSDN通过智能技术生成

MyBatis学习笔记(三)

MyBatis实现select查询

MyBatis查找单个对象

mapper.xml文件如下:
resultType参数是映射的类,需要使用全类名

<select id="selectCar" resultType="org.example.Car">
    select * from t_car where id = #{id};
</select>

注意:当占位符只有一个的时候,里面可以填任意字符,但不能不填

Java代码如下:
因为只返回一条记录,所以我们这里使用selectOne方法。
第一个参数是语句id
第二个参数是占位符所需要的值

 Object selectcar = sqlSession.selectOne("selectCar",2);
 System.out.println(selectcar);

在这里插入图片描述
如果有属性出现null,是由于查询的列名和类的属性名不一致所导致的,这时我们需要修改任意一方使其一致,或者在编写sql语句的时候使用 as

假设我的Car类其中一个属性是这个:

 private String carnum;

那么我们需要修改我们的sql语句如下:

    <select id="selectCar" resultType="org.example.Car">
        select id, car_num as carnum ... from t_car  where id = #{}
    </select>

MyBatis查找多个对象

我们的查询语句如下:

    <select id="selectCar" resultType="org.example.Car">
        select * from t_car;
    </select>

JAVA代码:
因为我们返回的不只有一个对象,所以我们使用selectlist方法让他返回一个List集合

  List<Object> selectCar = sqlSession.selectList("selectCar");
  selectCar.forEach( car -> System.out.println(car));

在这里插入图片描述

mapper配置文件中namespace的作用

namespace中文翻译就是命名空间
当我们两个mapper中的查询id都一样的时候,Mybatis不知道使用哪一个,这时候我们需要在填入id的前面加上 命名空间.id
例如:
mapper1.xml

<mapper namespace="test1">

    <select id="selectCar" resultType="org.example.Car">
        select * from t_car;
    </select>
</mapper>

mapper2.xml

<mapper namespace="test2">

    <select id="selectCar" resultType="org.example.Car">
        select id from t_car;
    </select>
</mapper>

如果我们需要使用test1中的select语句我们可以这么写:

sqlSession.selectList("test1.selectCar");

MyBatis中的环境配置项

在我们的mybatis-config.xml配置文件中 有一个environments配置项

 <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.cj.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://127.0.0.1:3306/test"/>
                <property name="username" value="root"/>
                <property name="password" value="123456"/>
            </dataSource>
        </environment>
    </environments>

在environments标签对中,我们可以配置多个数据库环境,例如:

 <environments default="development2">
        <environment id="development">
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.cj.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://127.0.0.1:3306/test"/>
                <property name="username" value="root"/>
                <property name="password" value="123456"/>
            </dataSource>
        </environment>
        
 		<environment id="development2">
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.cj.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://192.168.1.1:3306/test"/>
                <property name="username" value="root"/>
                <property name="password" value="123456"/>
            </dataSource>
        </environment>
    </environments>

在environment标签里的id属性是环境的名字
在environments标签内default属性是指定Mybatis默认的数据库环境。
那么依据我现在的配置文件,Mybatis默认加载第二个。

Mybatis指定环境

在SqlSessionFactoryBuilder.build()方法中有一个方法重载:

public SqlSessionFactory build(Reader reader, String environment) {
        return this.build((Reader)reader, environment, (Properties)null);
    }

第二个参数就是传入环境的id

builder.build(Resources.getResourceAsStream("mybatis-config.xml"),"test2");

这样之后我们从工厂出来的类实例就是以test2这个环境下的connetcion对象

MyBatis中的数据源配置项

 <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.cj.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://127.0.0.1:3306/test"/>
                <property name="username" value="root"/>
                <property name="password" value="123456"/>
            </dataSource>
        </environment>
    </environments>

在这里有一个数据源配置项,我们在这里可以配置我们的数据源
type属性有三种取值 UNPOOLED,POOLED,JNDI
分别是:不使用数据库连接池,使用自带的数据库连接池,使用第三方数据库连接池。
三种属性需要配置的属性个数也不一样:

UNPOOLED:

driver – 这是 JDBC 驱动的 Java 类全限定名
url – 这是数据库的 JDBC URL 地址。
username – 登录数据库的用户名。
password – 登录数据库的密码。
defaultTransactionIsolationLevel – 默认的连接事务隔离级别。
defaultNetworkTimeout – 等待数据库操作完成的默认网络超时时间(单位:毫秒)。

POOLED:
包含UNPOOLED的属性:

poolMaximumActiveConnections – 在任意时间可存在的活动(正在使用)连接数量,默认值:10
poolMaximumIdleConnections – 任意时间可能存在的空闲连接数。
poolMaximumCheckoutTime – 在被强制返回之前,池中连接被检出(checked out)时间,默认值:20000 毫秒(即 20 秒)
poolTimeToWait – 这是一个底层设置,如果获取连接花费了相当长的时间,连接池会打印状态日志并重新尝试获取一个连接(避免在误配置的情况下一直失败且不打印日志),默认值:20000 毫秒(即 20 秒)。
poolMaximumLocalBadConnectionTolerance – 这是一个关于坏连接容忍度的底层设置, 作用于每一个尝试从缓存池获取连接的线程。 如果这个线程获取到的是一个坏的连接,那么这个数据源允许这个线程尝试重新获取一个新的连接,但是这个重新尝试的次数不应该超过 poolMaximumIdleConnections 与 poolMaximumLocalBadConnectionTolerance 之和。 默认值:3(新增于 3.4.5)
poolPingQuery – 发送到数据库的侦测查询,用来检验连接是否正常工作并准备接受请求。默认是“NO PING QUERY SET”,这会导致多数数据库驱动出错时返回恰当的错误消息。
poolPingEnabled – 是否启用侦测查询。若开启,需要设置 poolPingQuery 属性为一个可执行的 SQL 语句(最好是一个速度非常快的 SQL 语句),默认值:false。
poolPingConnectionsNotUsedFor – 配置 poolPingQuery 的频率。可以被设置为和数据库连接超时时间一样,来避免不必要的侦测,默认值:0(即所有连接每一时刻都被侦测 — 当然仅当 poolPingEnabled 为 true 时适用)。

/***********************基本描述**********************************/ 0、根据表可以单独生成javaBean后缀可以自定义 1、工具本身是非常简单的,每个人都能做就是使用模板替换生成相应文件 2、工具主要针对SpringMvc+Mybatis注解+Mysql生成对象,dao、sqlDao、interface、实现接口 3、根据表生成Excel 4、生成成功后倒入到自己对应的项目中,然后Ctrl+Shipt+O(Eclipse快速倒入包)实现 5、里面因为运用的是注解,所以很多包我就没有提供了因为这些都是很基础的东西,不会的同学可以去网上查看搭建Mybatis的注解 6、生成了些什么,具体主要是对单表的增、删、改、查(分页) /********************************/ /********************************/ /*************完全免费***********/ /********************************/ /********************************/ 如果大家喜欢可以再给我提其他功能,有时间我加上 /*********************************************************************************/ 模板介绍: MySql.Data.dll :连接Mysql基本dl我们的的驱动。 foxjava.exe :直接运行程序 xml : Excel文件夹 ##### TemplateXml.xml 根据数据库对应表生成字段描述,生成后最好用WPS打开,然后重新另存为office认识的Excel template : 文件生成模板(非常重要的不能修改) ##### BasePojo.template 所有基础表对象都要继承,方便序列化(系统自动生成) ##### Pager.template 分页对象 (系统自动生成) ##### dao.template 数据库接口Dao(mybatis接口方式,在方法上写sql,复杂的使用sqlProvider) ##### daoSqlProvider.template 复杂sql提供者 ##### service.template 对外开放的接口 ##### serviceImpl.template 实现开放接口,基本数据操作逻辑 /*********************************************************************************/
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

黄大大ovo

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值