MyBatis简单入门
1.mybatis架构(简单介绍mybatis的流程)
接下来简单介绍一下这张图:首先明确我们的目的就是要创建sqlsession然后利用这个对象去执行sql 完成crud。创建sqlsession的前提就是用session工厂去创建,利用工厂创建需要原材料啊,所以最顶端的mybatis配置文件就是所需要的原材料。至于最下面的exector(执行者)就是sqlsession中的对象,具体是由它去执行sql语句,而mappedstatement对象再executor中是一个存sql的对象,它把sql给exectuor(执行者),执行者去执行。由于写的sql肯定有占位符啊,所以最左边的输入映射就是去替换里面的占位符。执行完sql,比如查询,必然会返回结果,那么输出映射就是把结果返回来。
2.mybatis下载
mybaits的代码由github.com管理
下载地址:https://github.com/mybatis/mybatis-3/releases
3.项目
3.1 环境搭建
3.11 创建一个java project
3.12 导包
首先在project创建一个lib文件夹
把下载好的mybatis中的jar包和lib目录下的jar包复制到lib文件夹下
这里涉及到数据库 本人使用的是mysql 所以 把连接mysql的jar也导入,大家可以自己百度下载jar包
bulid to path
3.12 开始入门
首先在数据库中创建一张表 这里我起名为user 并加点数据
在项目中创建user的pojo对象
package com.dy;
import java.util.date;
public class user {
private integer id;
private string username;
private string sex;
private date birthday;
private string address;
public user() {
super();
}
public user(integer id, string username, string sex, date birthday, string address) {
super();
this.id = id;
this.username = username;
this.sex = sex;
this.birthday = birthday;
this.address = address;
}
public integer getid() {
return id;
}
public void setid(integer id) {
this.id = id;
}
public string getusername() {
return username;
}
public void setusername(string username) {
this.username = username;
}
public string getsex() {
return sex;
}
public void setsex(string sex) {
this.sex = sex;
}
public date getbirthday() {
return birthday;
}
public void setbirthday(date birthday) {
this.birthday = birthday;
}
public string getaddress() {
return address;
}
public void setaddress(string address) {
this.address = address;
}
@override
public string tostring() {
return "user [id=" + id + ", username=" + username + ", sex=" + sex + ", birthday=" + birthday + ", address="
+ address + "]";
}
}
根据最开始的架构图 第一步就是准备我们的原材料,所以开始写我们的核心配置文件sqlmapconfig.xml,既然涉及到了数据库我们肯定要告诉mybatis使用什么数据库和连接字符串,让它可以去执行我们想要的sql。
<?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> <environments default="development"> <environment id="development"> <!-- 使用jdbc事务管理 --> <transactionmanager type="jdbc" /> <!-- 数据库连接池 --> <datasource type="pooled"> <!-- 驱动 --> <property name="driver" value="com.mysql.jdbc.driver" /> <!-- 连接字符串 --> <property name="url" value="jdbc:mysql://localhost:3306/mybatis?characterencoding=utf-8" /> <property name="username" value="root" /> <property name="password" value="hjf" /> </datasource> </environment> </environments> </configuration>
还是第一张图,可以看到除了核心配置文件,下面还有个mapper.xml,这个xml文件就是我们用来写sql的地方,这样说可能比较抽象,看到代码大家应该能懂,所以我们来构建usermap.xml,先把基础的头部完成。
<?xml version="1.0" encoding="utf-8" ?> <!doctype mapper public "-//mybatis.org//dtd mapper 3.0//en" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
由于mybatis只会加载核心配置文件,所以我们要在核心文件中配置,告诉mybatis去这个文件找sql。resource就是你的map的名字,这里是相对路径,大家可以用ctrl加左键点一下,看能不能进去,点的进应该就没写错。
还是回到架构图,我们准备好了原材料,就要把原材料输送给工厂,所以我们创建一个单元测试,和创建普通类一样,就是要在你写的测试方法加上@test,然后快捷键导包。
首先我们要获得原材料,加载核心配置文件,有多种方法,这里就简单的用一种。
把材料输送给工厂,获得工厂对象
工厂有了材料,就可以造产品啦
有了sqlsession就代表有了executor对象,那么就可以去执行sql啦,执行的sql是放在之前的usermap,xml文件中,那么我们就去这个xml写sql吧,这里先写个简单的查询
sql是写在mapping标签下,具体怎么写可以看下面的注释
<?xml version="1.0" encoding="utf-8" ?> <!doctype mapper public "-//mybatis.org//dtd mapper 3.0//en" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <!-- 这里的namespace表示命名空间,防止和其他的map里得id重复 --> <mapper namespace="user"> <!-- id表示这个select的名字,只能唯一,以后就是通过这个id去找到这个select和下面的sql --> <!-- #{}是占位符,里面的值可以是任意的 你可以写#{v}和这里的#{id}作用一样,我们需要告诉框架这个占位符是什么类型的,
我这里的id是integer类型,所以parametertype="integer" --> <!-- 大家可以看到框架最右边是可以返回pojo类型的数据,所以我们配置返回的类型是user型,所以resulttype是user型,要写全类名哦 --> <select id="getuser" parametertype="integer" resulttype="com.dy.user"> select * from user where id = #{id} </select> </mapper>
写好sql后,自然是执行sql啦,因为我们只查一个所以用下面这个方法
还记得上面我们写了个占位符嘛,这里的1 就是去替换占位符的。执行 结果:
同理 如果你的paramtertype是pojo类型,如下面的inseruser的select中,给入的参数是user类型,如果你的占位符中写的内容和你的类的字段相同,那么它就会默认用那个值,比如你要插入一个user,给一个user,那个user有一个username字段而且值为admin,那么你插入的时候如果写的是#{username}那么它就会用user类的username也就是admin去替换。