Mybatis入门

本文详细介绍使用MyBatis框架连接MySQL数据库的过程,包括配置文件、POJO类编写、XML映射文件及DAO层实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

终于算是把Mybatis的入门做完了,做的时候各种bug,接下来我会一次讲解。

首先呢,我先大致讲解下过程吧(笔者以MySQL为例):

1.引入Mybatis和Mysql-connection的jar包。

2.编写通过Mybatis连接数据库的XML配置文件,这里两种方法,我会在后面一次介绍。

3.编写需要操作的Pojo类。

4.编写3步中的pojo与数据链接的XML配置文件。

5.编写DAO层。

然后给大家看一下整个目录结构,会有利于理解接下来的内容,因为很多人都会困惑这个或者那个文件应该放在那里:

好的,我来详细解释吧:第一步就略过了,看第二步,Mybatis连接数据库的XML配置文件的名字是任意起的,也可以放在任何地方,因为Mybatis是在客户端需要的时候来加载这个配置文件,所以你之需要能让客户端找到你的XML配置文件就好了,看一下它的俩面详细代码:

<?xml version="1.0" encoding="UTF-8"?>
<!-- !DOCTYPE指定文件使用DTD进行校验 <!DOCTYPE 根元素 PUBLIC "注册//组织//类型 标签//定义 语言" "文档类型定义位置" -->
<!DOCTYPE sqlMapConfig PUBLIC "-//ibatis.apache.org//DTD SQL Map Config 2.0//EN"
"http://localhost:8080/IBatisDemo/sql-map-config.dtd">
<sqlMapConfig>
<properties resource="com/saymagic/config/SqlMap.properties"/>
<transactionManager type="JDBC">
<dataSource type="SIMPLE">
<property name="JDBC.Driver" value="${driver}" />
<property name="JDBC.ConnectionURL" value="${url}" />
<property name="JDBC.Username" value="${username}" />
<property name="JDBC.Password" value="${password}" />
</dataSource>
</transactionManager>
<sqlMap resource="com/saymagic/config/character.xml"/>
</sqlMapConfig>

这里面需要注意的几点:
1.我们这个xml文件的dtd引入的是工程自己的,因此会有localhost--什么的,详细方法大家可以查看上一篇教程

2 .<properties resource="com/saymagic/config/SqlMap.properties"/>这句话的意思是引入另外的配置文件SqlMap.properties,这就是我说为什么Mybatis连接数据库的XML配置文件有两种方法的原因,在引入了SqlMap.properties以后,我们就可以通过<propertyname="JDBC.Driver"value="${driver}" />的方法拿到SqlMap.properties里面driver对应的值,这样就把和数据库有关的信息封装到另外的配置文件里,起到数据隔离的作用,SqlMap.properties里面的内容如下,读者可根据自己的实际情况自行更改。

driver=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/ibatissql
username=root
password=magic

第三步也很简单,我就直接略过了,只是简单便也一个bean,我这里写的是一个Character类(意思是三国杀游戏里的人物),里面有name,blood,skill等属性,贴一下代码吧:

package com.saymagic.pojo;

public class Character {

private String name;
private int blood;
private String skill;
private String country;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getBlood() {
return blood;
}
public void setBlood(int blood) {
this.blood = blood;
}
public String getSkill() {
return skill;
}
public void setSkill(String skill) {
this.skill = skill;
}
public String getCountry() {
return country;
}
public void setCountry(String country) {
this.country = country;
}
}

第四步是要编写3步中的pojo与数据链接的XML配置文件,这都是一些规定性的东西,不这么配置就不行,所以先直接看内容吧,我起它的名字为:character.xml

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE sqlMap PUBLIC "-//iBATIS.com//DTD SQL Map 2.0//EN" "http://localhost/sql-map-2.dtd">
<sqlMap>
<typeAlias alias="Character" type="com.saymagic.pojo.Character"/>
<insert id="addCharacter" parameterClass="Character">
INSERT INTO `character`(`blood`, `name`, `state`, `skill`) VALUES (#blood#,#name#,#country#,#skill#)
</insert>
<select id="selectCharacterByName" parameterClass="String" resultClass="Character">
select * from `character` where name=#name#
</select>
<delete id="deleteCharacterByName" parameterClass="String">
<!-- #id#里的id可以随意取,但是上面的insert则会有影响,因为上面的name会从Character里的属性里去查找 -->
<!-- 我们也可以这样理解,如果有#占位符,则ibatis会调用parameterClass里的属性去赋值 -->
delete from `character` where name=#name#
</delete>

<update id="updateCharacter" parameterClass="Character">
update `character` set
blood=#blood#,state=#country#,skill=#country# where name=#name#
</update>
</sqlMap>
解释几个词的意思吧:

1.insert,update等就是说你要对数据库进行操作的是插入还是更新等指令。

2id是一定要有的,这个是在客户端调用时候的依据。

3.parameterClass代表你要传给这个sql语句的参数类型,从这里我们也可以看出mybatis只能传递一个参数,这也就是它很不足的一个地方,

4.resultClass代表你要返回的类型。

5.#name# 、#country#这些#包起来的代表站位符,也就是你在客户端可以对他们赋值。

6.笔者数据库的原因,在执行select * from `character` where name=#name#等等sql语句的时候,表名必须要加`符号,读者可根据自己情况进行修改。

讲了这几点,这个配置文件就应该没什么问题了吧,最后看客户端是怎么调用的吧。

看dao文件:

private static SqlMapClient sqlMapClient = null;
static{
try {
Reader reader = Resources.getResourceAsReader("com/saymagic/config/SqlMapConfig.xml");
sqlMapClient = SqlMapClientBuilder.buildSqlMapClient(reader);
reader.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}

这些的意思就是在读取配置文件,并将它转换为Mybatis里面的SqlMapClient对象,接下来我们以插入为例:看一下它的具体方法:

public void addCharacter(Character character) {
//Object object =null;
boolean flag = false;
try {
sqlMapClient.insert("addCharacter",character);

} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

}

核心代码只有一句

sqlMapClient.insert("addCharacter",character);

这里的insert就是对应刚才配置文件里的<insert>标签,addCharacter对应insert标签下的id,character也是对应insert标签下的parameterClass="Character"的数据类型。
最后呢,在主函数里之需要执行addCharacter(Character character)方法,就会把character插入进数据库啦!
好的,这就是Mybatis实现起来的所需步骤,至于为什么,怎么实现这种里面的东西 ,还是需要花功夫研究的,这家里就不多讲了。看一下 源码吧,自己运行一下,这样会更好理解。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值