- 持久层框架,它支持自定义SQL、存储过程以及高级映射。
- 免除了几乎所有JDBC代码以及设置参数和获取结果集的工作(底层实现是JDBC)
- 可通过简单的XML或注解来配置和映射原始类型、接口和Java POJO(普通老式 Java 对象)记录在数据库中
分层代码web层(controller层) -- 处理请求
service层 -- 业务处理
dao层(持久层) -- 与数据库交互
不同层代码放在不同的包
controller层 --- com.xxx.controller
service 层 --- com.xxx.service
dao层 --- com.xxx.dao
实体层 --- com.xxx.model
工具类 --- com.xxx.utils
持久层持久化软件中用于持久化的代码
将数据保存到可掉电式设备中:txt、图片、数据库
环境搭建ORM框架:(object relation mapping) -- 实体关系映射
1、建表(数据库) 2、编写对应表的实体类(Java) 3、编写dao层接口public interface StudentDao {
// 返回值 方法名
// 查询所有学生对象
List getAllStu();
}
4、导入myBatis核心包和JDBC实现包(lib文件夹内,Bulid Path)
5、每个dao层接口对应一个xml配置文件(文件名与接口类名称必须一致)
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
6、每个myBatis应用,都有一个myBatis的全局配置文件(.xml在src文件下)
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
7、启动MyBatis
// 默认在src下读取文件
InputStream inputStream = Resources.getResourceAsStream("mybatis-config.xml");
// 工厂模式:解析InputStream,生产sqlSession对象
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
// SqlSession对象,放所有myBaits生成的DAO层接口的实现
SqlSession session = sqlSessionFactory.openSession();
// 获取指定的接口实现
StudentDao studentDao = session.getMapper(StudentDao.class);
// 多态调用方法
int count = studentDao.deleteStuByID();
// 更新类需要提交事务
session.commit();
// sqlSessoin是个资源,使用完毕后必须进行关闭
session.close();
可能会遇到的问题:
接口没注册mapper,全局配置文件中没引入mapper配置
参数传递 @paramType interface com.woniuxy.dao.StudentDao is not known to the MapperRegistry
在接口形参上@param("参数的别名") 参数类型 形参
在XML配置文件中通过 #{别名} 取值
接口类
// 添加学生
int addStudent(@Param("student")Student student);
// 通过姓名和描述查找学生
List getStuByNameAndByDesc(@Param("name")String name,@Param("desc")String desc);
xml配置文件
INSERT INTO student VALUES (DEFAULT,#{student.sname},#{student.sdesc});
传递Map
在接口写map @param对参数取别名
List getStuByNameAndByDesc2(@Param("condition")Map condition);
在xml配置文件中通过 #{map.k} 取值
在调用方法的时候传递map
Map map = new HashMap();
map.put("name", "JERRY");
map.put("desc", "JERRY 是谁");
List stuByNameAndByDesc2 = studentDao.getStuByNameAndByDesc2(map);
for (Student student : stuByNameAndByDesc2) {
System.out.println(student);
}
session.commit();
session.close();
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)