MyBatis源自Apache的iBatis开源项目, 从iBatis3.x开始正式更名为MyBatis。它是一个优秀的持久层框架。
在以往我们在使用JDBC与数据库进行交互时,无论是使用DBUtil工具类,还是Spring的JDBCTemplate对象,其中所有的SQL代码都与Java语句耦合在了一起,这对后期维护修改程序带来了很大麻烦,而MyBatis能够帮助我们将SQL语句和Java代码分离,方便了后期因需求变动而对SQL语句进行修改。
实例背景:
a.创建数据库表
create table user_info(
id int(6) primary key,
name varchar(15) unique,
mobile varchar(11) not null,
address varchar(30) not null
)
insert into user_info (id,name,mobile,address)
values (1, 'walylz', '12345678910','北京');
insert into user_info (id,name,mobile,address)
values (2, 'Tom', '01987654321','上海');
b.自定义类
public class UserInfo {
private int id;
private String name;
private String mobile;
private String address;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getMobile() {
return mobile;
}
public void setMobile(String mobile) {
this.mobile = mobile;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
1)添加所需jar包
Github项目地址:https://github.com/mybatis/mybatis-3/releases
2)创建接口
public interface IUserInfoDao {
String getById(@Param("id")int id);//使用param注解限定xml文件中sql语句中传值名称
UserInfo selectById(@Param("id")int id);
List select(@Param("name")String name);
boolean delete(@Param("id")int id);//若为boolean则返回true/false;若为int 则返回受影响行数
}
3)创建user_info.xml配置文件添加sql语句
namespace必须为接口的全类名(获取全类名:Copy Qualified Name)
delete from user_inf where id = ${id}
4)创建MyBatis配置文件mybatis-config.xml
5)创建测试类调用接口中方法
public class Test {
public static void main(String[] args) {
try {
InputStream inputStream = Resources.getResourceAsStream("mybatis-config.xml");
//获取SqlSessionFactory对象
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);//此处是检查时异常需要try-catch
//获取SqlSession对象,代表与数据库的一次会话,用完需要关闭。注意:由于SqlSession为非线程安全的,所以该变量应定义为局部变量,不要定义成全局变量
SqlSession sqlSession = sqlSessionFactory.openSession();//openSession()无参则默认不提交事务(false),true则自动提交
//获取IUserInfo接口实现类对象
IUserInfoDao userInfoDao = sqlSession.getMapper(IUserInfoDao.class);//获得代理对象
验 证//
//验证代理类
System.out.println(userInfoDao.getClass().getName());
//验证getById方法
System.out.println(userInfoDao.getById(1));
//验证selectById方法
UserInfo userInfo = userInfoDao.selectById(1);
System.out.println(userInfo.getName());
//验证select方法
for (UserInfo ui : userInfoDao.select("%admin%")) {
System.out.println(ui.getName());
}
//验证delete方法,此处需要手动提交事务
System.out.println(userInfoDao.delete(9));
sqlSession.commit();
//释放资源
sqlSession.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}