当前位置:首页 » 编程语言 » mybatissql文件后缀
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

mybatissql文件后缀

发布时间: 2023-02-26 13:40:15

‘壹’ MyBatis sql映射文件疑问

其实没有什么区别,只不过是取值的方式不一样罢了,
<resultMap id="wpResult" class="wp">

</resultMap>
配了一次就可以反复用,
Alias 需要在查询语句里一个一个的as,你不觉得麻烦也可以用。
Alias最大的作用是联表查询的时候返回多个相同ID的时候可以改下名。不致于冲突报错

‘贰’ 如何解析Mybatis xml文件中配置的sql

首先抽象一个SQL语句类:

[java] view plain
public abstract class AbstractSQLStatementNode implements ISQLStatement {

protected List<ISQLStatement> sqlStatements = new ArrayList<>();

@Override
public void appendSQL(ISQLStatement sql) {
sqlStatements.add(sql);
}

@Override
public String getSQL(Object object) {
StringBuilder sb = new StringBuilder();
for (ISQLStatement stmt : sqlStatements) {
sb.append(stmt.getSQL(object));
}
return sb.toString().trim();
}

}

然后是文本SQL:

[java] view plain
public class PlainSQLNode extends AbstractSQLStatementNode {

private final String sql;

public PlainSQLNode(String sql) {
this.sql = sql;
}

@Override
public String getSQL(Object object) {
return sql;
}

@Override
public String toString() {
return sql;
}

}

以Mybatis xml中<if test="...">...</if>为例

[java] view plain
public class IfSQLNode extends AbstractSQLStatementNode {

private final String test;

public IfSQLNode(String test) {
this.test = test;
}

public String getTest() {
return test;
}

@Override
public String getSQL(Object object) {
try {
Boolean b = (Boolean) Ognl.getValue(test, object, Boolean.TYPE);
return b ? super.getSQL(object) : "";
}
catch (OgnlException e) {
throw new SQLSyntaxException(e);
}
}

}

再增加一个Include标签例

[java] view plain
public class IncludeSQLNode extends AbstractSQLStatementNode {

private final TableNode node;
private final String refid;

public IncludeSQLNode(TableNode node, String refid) {
this.node = node;
this.refid = refid;
}

@Override
public String getSQL(Object object) {
SQLNode sqlnode = node.getSQLNode(refid);
return sqlnode.getSQL(object);
}

}

其它的xml标签类似,完成最终的sql

调用AbstractSQLStatementNode.getSQL方法,参数为客户端传入参数

XML例子如下:

[html] view plain
<select id="findPage" parameterType="java.util.Map" resultMap="ORG">
SELECT * FROM XT_ORG WHERE BDELETE<>1 <if test="name != null"> AND NAME=#{name}</if> LIMIT #{OFFSET}, #{ROWS}
</select>

根据是否传入了name,即可成功执行出最终的sql

SELECT * FROM XT_ORG WHERE BDELETE<>1 AND NAME=#{name} LIMIT #{OFFSET}, #{ROWS}

再解析SQL得到,并提出参数

SELECT * FROM XT_ORG WHERE BDELETE<>1 AND NAME=? LIMIT ?,?
即可生成最终的PrepareStatement

‘叁’ mybatis sql映射文件和hibernate映射文件有什么不同

1.1 Hibernate 简介
Hibernate对数据库结构提供了较为完整的封装,Hibernate的O/R Mapping实现了POJO 和数据库表之间的映射,以及SQL 的自动生成和执行。程序员往往只需定义好了POJO 到数据库表的映射关系,即可通过Hibernate 提供的方法完成持久层操作。程序员甚至不需要对SQL 的熟练掌握, Hibernate/OJB 会根据制定的存储逻辑,自动生成对应的SQL 并调用JDBC接口加以执行。
1.2 MyBatis简介
iBATIS 的着力点,则在于POJO 与SQL之间的映射关系。然后通过映射配置文件,将SQL所需的参数,以及返回的结果字段映射到指定POJO。相对Hibernate“O/R”而言,iBATIS 是一种“Sql Mapping”的ORM实现。
第二章开发对比
开发速度
Hibernate的真正掌握要比Mybatis来得难些。Mybatis框架相对简单很容易上手,但也相对简陋些。个人觉得要用好Mybatis还是首先要先理解好Hibernate。
开发社区
Hibernate 与Mybatis都是流行的持久层开发框架,但Hibernate开发社区相对多热闹些,支持的工具也多,更新也快,当前最高版本4.1.8。而Mybatis相对平静,工具较少,当前最高版本3.2。
开发工作量
Hibernate和MyBatis都有相应的代码生成工具。可以生成简单基本的DAO层方法。
针对高级查询,Mybatis需要手动编写SQL语句,以及ResultMap。而Hibernate有良好的映射机制,开发者无需关心SQL的生成与结果映射,可以更专注于业务流程。

‘肆’ mybatis基本配置详解

中间步骤自行设置

MySQL驱动版本根据自己安装的MySQL选择

我把AppTest改成了MybatisTest,不该也无妨;
其中Student类暂时只设置四个字段:

mapper接口暂时为空

在resources目录下新建File命名为db.peoperties,配置如下内容:

提示:以上配置适用于MySQL8.X版本,5.X版本按照如下配置:

1、transactionManager:事务管理器;
type 事务管理类型:
JDBC(JdbcTransactionFactory);
MANAGED(ManagedTransactionFactory)
自定义事务管理器:实现TransactionFactory接口.type指定为全类名

2、dataSource:数据源;
type :数据源类型;
UNPOOLED(UnpooledDataSourceFactory); POOLED(PooledDataSourceFactory);
JNDI(JndiDataSourceFactory)
自定义数据源:实现DataSourceFactory接口,type是全类名

<mapper>:注册一个sql映射文件
1、注册映射文件
resource:引用类路径下的sql映射文件
mybatis/StudentMapperpper.xml
url:引用网路路径或者磁盘路径下的sql映射文件
file:///var/mappers/AuthorMapper.xml
2、注册接口
class:引用(注册)接口,
① 有sql映射文件,映射文件名必须和接口同名,并且放在与接口同一目录下;
② 没有sql映射文件,所有的sql都是利用注解写在接口上;
推荐:
比较重要的,复杂的Dao接口我们来写sql映射文件
不重要,简单的Dao接口为了开发快速可以使用注解;
批量注册
需要在资源路径下(resources)建立和一样的文件目录来存放想xml映射文件,如:com.example.StudentMapperpper.xml

StudentMapper

在resources的mybatis目录下新建文件夹mapper,新建xml文件StudentMapper.xml

namespace :名称空间;指定为接口的全类名
id :唯一标识
resultType :返回值类型
#{id} :从传递过来的参数中取出id值
resources目录(MajorMapper.xml暂时不用创建)如下: