博主的每篇博文的浪漫主义
【“水晶帘动微风起,满架蔷薇一院香”】 https://www.bilibili.com/video/BV11t4y1F7ut?share_source=copy_web&vd_source=385ba0043075be7c24c4aeb4aaa73352
“水晶帘动微风起,满架蔷薇一院香”
这篇博文的学习笔记来自于这里
MyBatis配置文件(mybatis-config.xml)
注意注意:
mybatis-config.xml 文件中的元素节点是有一定顺序的,节点位置必须按以上位置排序,否则会编译错误。
大家跟随我的脚步,熟知一下标签就好!不需要深刻记忆!
下面介绍 XML 配置文件中的重要元素(标签)。
configuration 元素是整个 XML 配置文件的根节点,其角色就相当于是 MyBatis 的总管,MyBatis 所有的配置信息都会存放在它里面。
properties 标签可以通过 resource 属性指定外部 properties 文件(database.properties),也可以通过 properties 子元素配置。
<properties resource="database.properties"/>
database.properties 用于描述数据库连接的相关配置,例如数据库驱动、连接数据库的 url、数据库用户名、数据库密码等。
<properties>
<property name="username" value="root"/>
<property name="password" value="root"/>
</properties>
在 environments 节点中引用 username 和 password 变量。
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="${driver}"/>
<property name="url" value="${url}"/>
<property name="username" value="${username}"/>
<property name="password" value="${password}"/>
</dataSource>
</environment>
</environments>
也可以不使用 properties 标签,直接将属性值写在 value 中。
mappers标签
mappers 标签用于指定 MyBatis SQL 映射文件的路径。
mapper 是 mappers 的子标签,mapper 中的 resource 属性用于指定 SQL 映射文件的路径(类资源路径)
映射器是 MyBatis 中最重要的文件,文件中包含一组 SQL 语句(例如查询、添加、删除、修改),这些语句称为映射语句或映射 SQL 语句。
映射器由 Java 接口和 XML 文件(或注解)共同组成,它的作用如下。
映射器有以下两种实现方式。
如果 SQL 语句存在动态 SQL 或者比较复杂,使用注解写在 Java 文件里可读性差,且增加了维护的成本。所以一般建议使用 XML 文件配置的方式,避免重复编写 SQL 语句。
XML 定义映射器分为两个部分:接口和XML。
下面先定义接口 WebsiteMapper
package net.biancheng.mapper;
import java.util.List;
import net.biancheng.po.Website;
public interface WebsiteMapper {
public List<Website> selectAllWebsite();
}
WebsiteMapper.xml 代码如下。
DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="net.biancheng.mapper.WebsiteMapper">
<select id="selectAllWebsite"
resultType="net.biancheng.po.Website">
select * from website
select>
mapper>
下面对上述 XML 文件进行讲解。
namespace 用来定义命名空间,该命名空间和定义接口的全限定名一致。
元素表明这是一条查询语句,属性 id 用来标识这条 SQL。resultType 表示返回的是一个 Website 类型的值。
在 MyBatis 配置文件中添加以下代码。
<mapper resource="net/biancheng/mapper/WebsiteMapper.xml" />
该语句用来引入 XML 文件,MyBatis 会读取 WebsiteMapper.xml 文件,生成映射器。
用 SqlSession 来获取 Mapper,Test 类代码如下
public class Test {
public static void main(String[] args) throws IOException {
InputStream config = Resources.getResourceAsStream("mybatis-config.xml");
SqlSessionFactory ssf = new SqlSessionFactoryBuilder().build(config);
SqlSession ss = ssf.openSession();
WebsiteMapper websiteMapper = ss.getMapper(WebsiteMapper.class);
List<Website> websitelist = websiteMapper.selectAllWebsite();
for (Website site : websitelist) {
System.out.println(site);
}
//提交事务
ss.commit();
//关闭
ss.close();
}
}
使用注解的方式实现映射器,只需要在接口中使用 Java 注解,注入 SQL 即可。
如果使用注解和 XML 文件两种方式同时定义,那么 XML 方式将覆盖掉注解方式。
那么我们该用哪一种尼?
虽然这里注解的方式看起来比 XML 简单,但是现实中我们遇到的 SQL 会比该例子复杂得多。如果 SQL 语句中有多个表的关联、多个查询条件、级联、条件分支等,显然这条 SQL 就会复杂的多,所以并不建议读者使用这种方式。
所以大多数情况下,我们用xml
XML 可以相互引入,而注解是不可以的,所以在一些比较复杂的场景下,使用 XML 方式会更加灵活和方便。所以接下来我们都以 XML 方式来创建映射器。当然在一些简单的表和应用中使用注解方式也会比较简单。
主要介绍 MyBatis 执行 SQL 语句的两种方式和它们的区别。
MyBatis 有两种执行 SQL 语句的方式,如下:
SqlSession发送SQL
有映射器之后就可以通过 SqlSession 发送 SQL 了。我们以 getWebsite 这条 SQL 为例看看如何发送 SQL。
Website website = (Website)sqlSession.selectOne("net.biancheng.mapper.WebsiteMapper.getWebsite",1);
MyBatis 常用的查询方法有 2 种,分别为 selectOne 和 selectList。
selectOne 方法表示使用查询并且只返回一个对象,必须指定查询条件。只能查询 0 或 1 条记录,大于 1 条记录则运行错误。常用格式如下(也有其它重载方法,根据需要选择)。
sqlSession.selectOne(String arg0, Object arg1)
selectList 方法表示使用查询并且返回一个列表。可以查询 0 或 N 条记录。常用格式如下。
sqlSession.selectOne(String arg0)
也可指定参数:
sqlSession.selectList(String arg0, Object arg1)
以上语法格式中,String 对象由一个命名空间加 SQL id 组合而成,它完全定位了一条 SQL,这样 MyBatis 就会找到对应的 SQL。Object 对象为需要传递的参数,也就是查询条件。
selectOne 实现的 selectList 都可以实现,即 list 中只有一个对象。但 selectList 能实现的,selectOne 不一定能实现。
SqlSession 还可以获取 Mapper 接口,通过 Mapper 接口发送 SQL,如下所示。
通过 SqlSession 的 getMapper 方法获取一个 Mapper 接口,然后就可以调用它的方法了。因为 XML 文件或者接口注解定义的 SQL 都可以通过“类的全限定名+方法名”查找,所以 MyBatis 会启用对应的 SQL 运行,并返回结果。
所以我们该用哪一种尼!!
一种用 SqlSession 直接发送,另外一种通过 SqlSession 获取 Mapper 接口再发送。
现在主流是Mapper 接口发送 SQL 的方式,你懂吧!!!!!理由如下:
救救就学到这里,博主的文章为什么没人看,虽然是抄作业吧,但我也是仔仔细细过了一遍的
提示:对于这篇学习笔记就暂时到这了,兄弟们加油
对于这篇学习笔记就暂时到这了,兄弟们加油
从现在做起,坚持下去,一天进步一小点,不久的将来,你会感谢曾经努力的你! |
如果又出错的,请各位友友指正。
新人报到,各位友友们,给我个三联(点赞,关注,收藏)