mybatis配置文件的头部信息
configure配置文件头
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
mapper映射文件头
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
原始JDBC开发中存在的问题:
List<Emp> empList = new ArrayList<>();
//注册驱动
Class.forName("com.mysql.cj.jdbc.Driver");
//获取连接对象
Connection connection = DriverManager.getConnection(url,username,password);
//预编译SQL语句
String sql = "select ..... where eno=? and ename=?";
PreparedStatement statement = connection.prepareStatement(sql);
//设置参数
ps.setInt(1,16);
ps.setString(2,"haha");
//执行SQL
ResultSet resultSet = ps.executeQuery();
//处理结果集
while(resultSet.next()){
Emp emp = new Emp();
emp.setInt(resultSet.getInt(1));
...
empList.add(emp);
}
//关闭连接对象
close(connection,statement,resultSet);
1.频繁打开及关闭数据库操作,影响数据的性能
解决方案:使用数据库连接池进行管理
2.硬编码(固定的数字或字符等)过多,影响后期的维护
例如:if(1>2){},int a=1,b=2;if(a>b){}
解决方案:直接将相关的常量,用一个统一的文件(xml)进行管理
3.关系映射比较麻烦,编码冗余,不利于后期的维护
解决方案:提前指定映射关系(xml)
4.对SQL相关的操作,一旦改动之后,整个java项目都需要重新编译,影响系统性能
解决方案:把数据库相关的操作抽离出来(xml)
Mapper代理开发
dao层开发存在的问题:
通过dao层及其实现类的方式在进行Mybatis的增删改查时存在的问题(参考dao实现类代码进行分析)
1.仍然存在硬编码的问题(指定查询的statementid【test.queryEmpById】)
2.功能实现的过程中,对于输入的参数类型以及返回值类型都是Object类型,不严谨
3.代码实现时存在大量的重复书写的问题
Mapper代理开发规范:
1.要求接口和映射文件在同一个路径下
2.要求接口名与映射文件名保持一致
3.要求接口中的方法名与映射文件中的id名保持一致
4.要求接口中的参数类型与映射文件中的参数类型保持一致
5.要求接口中的方法返回值类型与映射文件中的返回值类型保持一致
6.要求映射文件中的namespace的值要与接口的类签名(包名+类名)保持一致