框架
框架是一个应用程序的半成品,提供可重用的公共结构(比如之前的BaseDao)。
作用:
- 加快开发效率,重用代码可以节省开发者的时间和精力。
- 结构统一,易于维护
- 专心在业务实现上
Mybatis
Mybatis中文文档:https://mybatis.org/mybatis-3/zh/index.html
什么是Mybatis
原本是Apache的一个开源项目IBatis,2010年改名为MyBatis。
- MyBatis 是一款优秀的持久层框架
- 它支持自定义 SQL、存储过程以及高级映射。
- MyBatis免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作。
- MyBatis可以通过简单的 XML 或注解来配置和映射原始类型、接口和 Java POJO(Plain Old Java Objects,普通老式 Java 对象)为数据库中的记录。
其实Mybatis就是一个数据库访问的框架,能够帮助简化数据库的操作。
持久层
持久层可以将业务数据存储到磁盘,具备长期存储能力,只要磁盘不损坏,在断电或其他情况下,重启仍然可以读取到这些数据。持久层的缺点就是比较慢。
MyBatis环境搭建
用一个mybatis的具体案例来搭建环境。
1,下载jar包 打开GitHub官网,搜索Mybatis
选择:
版本下载:
其中下载zip:
解压后使用:
mybatis-3.4.6.jar
:这个是mybatis的核心包
2,导包,需要导入mybatis核心包和mysql驱动包
3,创建一个实体类,跟数据库中的列名保持一致
package com.xl.pojo;
public class User {
private int userId;
private String loginName;
private String loginPwd;
private String userName;
private char sex;
private String bornDate;
public User() {
super();
}
public User(int userId, String loginName, String loginPwd, String userName, char sex, String bornDate) {
super();
this.userId = userId;
this.loginName = loginName;
this.loginPwd = loginPwd;
this.userName = userName;
this.sex = sex;
this.bornDate = bornDate;
}
public int getUserId() {
return userId;
}
public void setUserId(int userId) {
this.userId = userId;
}
public String getLoginName() {
return loginName;
}
public void setLoginName(String loginName) {
this.loginName = loginName;
}
public String getLoginPwd() {
return loginPwd;
}
public void setLoginPwd(String loginPwd) {
this.loginPwd = loginPwd;
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public char getSex() {
return sex;
}
public void setSex(char sex) {
this.sex = sex;
}
public String getBornDate() {
return bornDate;
}
public void setBornDate(String bornDate) {
this.bornDate = bornDate;
}
@Override
public String toString() {
return "User [userId=" + userId + ", loginName=" + loginName + ", loginPwd=" + loginPwd + ", userName="
+ userName + ", sex=" + sex + ", bornDate=" + bornDate + "]";
}
}
4,创建mybatis核心配置文件:mybatis-config.xml
? 包含对mybatis系统的核心设置
? 包含获取数据库连接的数据源 ---> <dataSource type="POOLED">
? 决定事务范围和控制的事物管理器 ---> <transactionManager type="JDBC"/>
<configuration>
<!--多个运行环境:默认为开发环境-->
<environments default="development">
<!--单个运行环境-->
<environment id="development">
<!--事务管理机制-->
<transactionManager type="JDBC"/>
<!--数据源 mybatis自带的数据源POOLED-->
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/数据库名"/>
<property name="username" value="root"/>
<property name="password" value="root"/>
</dataSource>
</environment>
</environments>
</configuration>
5,创建映射文件:
<mapper namespace="a"> <!--namespace:命名空间,通过这个名字找到映射文件-->
<!--select:查询 id:唯一标识 resultType:返回类型-->
<select id="getAll" resultType="com.xl.pojo.User">
select * from `user`
</select>
</mapper>
注:创建好映射文件后,在mybatis核心配置文件中指定
<mappers>
<mapper resource="映射文件所在位置,以/分开"/>
</mappers>
6,测试:
SqlSession session = null;
try{
//1,读取配置文件,将数据放入输入流中
InputStream is = Resources.getResourceAsStream("mybatis-config.xml");
//2,创建SqlSessionFactory对象,为了生成SqlSession对象
SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(is);
//3,创建SqlSession对象 = (JDBC中的Connection对象)
session = factory.openSession();
//4,调用mapper文件中的方法 参数为:命名空间名称+sql映射的id
List<User> list = session.selectList("a.getAll"); //这里的调用方法其实比较麻烦,后面用接口解决这个问题
for(User user : list) {
System.out.println(user.toString());
}
}catch (IOException e) {
e.printStackTrace();
}finally {
//5,关闭session对象
session.close();
}
Mybatis映射接口
基于mapper接口实现
1,创建接口,这个接口相当于之前的UserDao
public interface UserMapper{
/**
* 查询所有User
* @return
*/
List<User> getAllUser();
}
2,修改映射文件mapper.xml
中的namespace
<mapper namespace="com.xl.UserMapper"> <!--必须跟相对应的接口全路径同名-->
<!--select:查询 id:接口中的方法名 resultType:泛型类型-->
<select id="getAll" resultType="com.xl.pojo.User">
select * from `user`
</select>
</mapper>
3,测试类:调用getMapper(接口名.class)
方法,执行接口中的方法来实现对数据库的操作
List<User> list = session.getMapper(UserMapper.class).getAllUser();
最后的包结构如下: