MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以使用简单的 XML 或注解来配置和映射原生信息,将接口和 Java 的 POJOs(Plain Old Java Objects,普通的 Java对象)映射成数据库中的记录。
能看到这篇文章的人,相信大家对(Java DataBase Connect jdbc)已经熟练掌握了,SpringJdbc也应该熟悉。spring整合了java的JDBC东西,封装成了一个组件,就是我们常说的持久层dao组件。大大的减少了开发人员的工作量,而MyBatis框架和SpringJDBC差不多,也是一个和数据库交互的持久层组件(这里说组件其实不合适,MyBatis不是某个东西的一部分,应该说是一种技术,一种框架)但实现原理不是封装JDBC,到底怎么实现,笔者现在也不知道,我们先来学会它,会使用它,再想它的实现原理。
接下来我们先搭建一个MyBatis项目,项目名称是:mybatis_demo1。
我们先来看看搭建一个MyBatis的主要步骤:
1.新建一个web项目
在eclipsp中新建一个web项目,mybatis_demo1,如下图:
2.编写主配置文件
在src目录下先编写主配置文件SqlMapConfig.xml,如下图:
代码如下:
注意:在xml文件中&符号用“&"表示
3.引入相关jar包
这里我们要引入的jar包有:
mybatis包:mybatis-3.2.5.jar
数据库连接包:mysql-connector-java-5.1.39-bin.jar ,这里我们用的是mysql数据库
在WEB-INF/lib目录下引入jar包,如下图:
4.编写对应的实体类
这里我们要操作时的是用户表user,先来看看该表的结构:
在src目录下新建com.cdd.entity包,在该包下新建实体类:User,代码如下:
package com.cdd.entity;
import java.io.Serializable;
public class User implements Serializable {
private Integer id; //用户id
private String username; //登录名称
private String pwd; //密码
private String name; //昵称
private String gender; //性别,1-男;0-女
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 getPwd() {
return pwd;
}
public void setPwd(String pwd) {
this.pwd = pwd;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getGender() {
return gender;
}
public void setGender(String gender) {
this.gender = gender;
}
public String toString() {
return "User [id=" + id + ", username=" + username + ", pwd=" + pwd + ", name=" + name + ", gender=" + gender
+ "]";
}
}
5.编写对应实体类的sql操作文件
在com.cdd包下新建一个包sql,在com.cdd.sql包下新建对应User的sql操作文件UserMapper.xml,先写一个查询所有用户信息的sql,代码如下:
注:
当只需要传一个参数的时,通常拼在sql语句里的参数可以随便写,不必与字段名相同,例如:#{ name},这里面的参数不必 是id(表字段名称相同)。
当传过来多个参数的时候,通常情况下用一个实体类对象或Map集合来接收,拼在sql 的参数要和对应的字段名称相同。
拼接sql语句时,parameterType、reslutType对应的类型可以是Java中数据类型也可以是myBatis带数据类型,通常情况下 myBatis带的数据类型是java数据类型的小写。例如: java.Lang.String 对应 string。
要加载该sql操作文件,还得在主配置文件中,把这个文件配置进去,配置好的主配置文件SqlMapConfig.xml代码如下:
这个主配置文件里,增加的是这部分内容,如下图:
6.获取SqlSession
在com.cdd包下新建test包,在com.cdd.util包下创建一个类MyBatisUtil,代码如下:
package com.cdd.util;
import java.io.IOException;
import java.io.Reader;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
public class MyBatisUtil {
public static SqlSession getSqlSession() throws IOException{
//实例化一个SqlSession工厂构建器
SqlSessionFactoryBuilder ssfb = new SqlSessionFactoryBuilder();
//主配置文件路径
String conf = "SqlMapConfig.xml";
//获取主配置文件的流
//方式1:用字节流
//InputStream is = MyBatisUtil.class.getClassLoader().getResourceAsStream(conf);
//方式2:用字符流
Reader reader = Resources.getResourceAsReader(conf);
//获取SqlSessionFactory实例
SqlSessionFactory ssf = ssfb.build(reader);
//获取SqlSession
SqlSession session = ssf.openSession();
return session;
}
}
7.测试
在com.cdd包新建包test包,在com.cdd.test包下新建Test1类,代码如下:
注:
SqlSession用完要记得关闭。
当执行DML语句时, myBatis默认把数据库提交关闭了,要显式调用commit()方法。
package com.cdd.test;
import java.io.IOException;
import java.util.List;
import org.apache.ibatis.session.SqlSession;
import com.cdd.entity.User;
import com.cdd.util.MyBatisUtil;
public class Test1 {
public static void main(String[] args) throws IOException{
//获取SqlSession
SqlSession session = MyBatisUtil.getSqlSession();
//调用findAll方法
List userList = session.selectList("findAll");
//循环输出
for(User user : userList){
System.out.println(user);
}
session.close(); //关闭session
}
}
运行后,查看控制台,如下图:
注意:我刚才在实体类User类中重写了toString()方法,所有才会打印出每个用户的全部信息。
到这里一个MyBatis项目就搭建好了,接下来补充一些东西
返回数据类型:
1.类对象
(1).属性名与字段一致,使用resultType来设置放回数据类型
(2).属性名和与字段不一致
a.给字段使用别名,使它与属性名一致
b.使用resultMap替代resultType定义如何装载数据
这里通过sql查到的cost_id与实体类CostBean1的id属性相对应。
注:
resultType默认按名称匹配装载数据;
resultMap按指定一定匹配规则装载数据;
在用实体类对象去装载查询回来的数据时,当实体类对象的属性和表字段不一致时,则装载到数据后,实体类对象的这个属性 值为null,接不到数据
2.Map集合
3.基本类型
参考资料:
http://www.mybatis.org/mybatis-3/zh/index.html