MyBatis 是一款优秀的持久层框架
https://mybatis.org/mybatis-3/zh/getting-started.html
概述mybatis是什么?有什么特点?
它是一款半自动的ORM持久层框架,具有较高的SQL灵活性,支持高级映射(一对一,一对多),动态SQL,延迟加载和缓存等特性,但它的数据库无关性较低
什么是ORM?Object Relation Mapping,对象关系映射。对象指的是Java对象,关系指的是数据库中的关系模型,对象关系映射,指的就是在Java对象和数据库的关系模型之间建立一种对应关系,比如用一个Java的Student类,去对应数据库中的一张student表,类中的属性和表中的列一一对应。Student类就对应student表,一个Student对象就对应student表中的一行数据
Mybatis的优点传统的JDBC代码太复杂了。
Mybatis:简化、框架、自动化。
优点:
简单易学
灵活
sql和代码的分离,提高了可维护性。
提供映射标签,支持对象与数据库的orm字段关系映射
提供对象关系映射标签,支持对象关系组建维护
提供xml标签,支持编写动态sql。
思路:搭建环境–>导入Mybatis–>编写代码–>测试!
搭建数据库(使用Navicat)
建库: create database mybatis;
建表:
新建项目- 新建一个普通的maven项目
- 删除src目录
- 导入maven依赖
mysql mysql-connector-java5.1.10 org.mybatis mybatis3.4.6 org.projectlombok lombok1.18.12 provided junit junit4.10 test
创建一个模块:编写mybatis的核心配置文件
编写代码
实体类
package entity;
public class UserInfo {
private int id;
private String name;
private String password;
private String address;
private double balance;
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 getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
public double getBalance() {
return balance;
}
public void setBalance(double balance) {
this.balance = balance;
}
Dao接口
接口文件
public interface IUserInfoDao{
int getCount();
}
Mapper映射文件
select Count(1) from userinfo;
编写测试类
//指定全局配置文件, 用流的方式解析配置文件方便读取
InputStream is = Resources.getResourceAsStream("mybatis-config.xml");
//将流信息进行编译,创建会话工厂
SqlSessionFactory ssf = new SqlSessionFactoryBuilder().build(is);
//获取session,创建一个会话达到访问数据库的目的
ss = ssf.openSession();
//通过接口的类信息得到一个代理对象,来实现数据库操作
IUserInfoDao iuid = ss.getMapper(IUserInfoDao.class);
//信息查询后的结果处理
int count = iuid.getCount();
可能遇到的问题
-
insert 中 获取不到主键名称 在定义id之后 userGeneratedKeys = true ,keyProperty = "主键字段名称";
-
如果数据库字段名和实体类属性名称不一样,则不能自动封装数据
-
起别名:(每次查询都要定义一次别名) as ...
-
sql 片段:(不灵活)
-
resultMap:最常用
-



