目录
MyBatis
框架的简介
MyBatis的作用
MyBatis的基本使用步骤
MyBatis的动态代理
MyBatis中关于参数的问题
MyBatis中 # 和 $ 的区别
MyBatis中的返回结果
动态sql
PageHelper分页插件
MyBatis
框架的简介
三层架构
三层架构
页面层(视图层):完成和用户的交互,接收请求,显示请求的处理结果
业务逻辑层:计算数据,处理业务逻辑
数据访问层(持久层):数据库操作
三层架构对应的框架
界面层:SpringMVC
业务逻辑层:Spring
数据访问层:MyBatis
MyBatis的作用
MyBatis的作用
MyBatis的作用
增强的JDBC,访问数据库,执行增删改查等操作
MyBatis的基本使用步骤
基本步骤
基本步骤
1、加入依赖
org.mybatis mybatis3.5.7 src/main/java ***.xml false src/main/resources ***.xml
2、创建实体类
3、创建Dao接口:接口中定义操作数据的方法
public interface StudentDao {
public List selectAllStudents();
public int insertStudent(Student student);
}
4、创建mapper文件,也叫做sql映射文件
作用:写sql语句的,和接口中的方法对应的sql语句
5、创建mybatis的主配置文件
主配置文件的作用:配置连接数据的信息;指定mapper文件的位置(路径)
6、使用mybatis的对象SqlSession,通过这个对象的方法执行sql语句
public class TestMybatis {
@Test
public void testInsertStudent() throws IOException {
// 读取mybatis的主配置文件start
String config = "mybatis.xml";
InputStream in = Resources.getResourceAsStream(config);
// 读取mybatis的主配置文件end
// 创建sqlSession对象start
SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
SqlSessionFactory factory = builder.build(in);
SqlSession sqlSession = factory.openSession();
// 创建sqlSession对象end
// 通过mapper文件的namespace和sql标签的id找到对应的sql语句
String sqlId = "com.hgc.dao.StudentDao" + "." + "insertStudent";
Student student = new Student();
student.setId(1008);
student.setName("蓝月亮");
student.setEmail("lanyueliang@qq.com");
student.setAge(21);
// 调用sqlSession对象的方法执行sql语句
int nums = sqlSession.insert(sqlId, student);
// 在执行insert update delete之后要手动提交事务
sqlSession.commit();
System.out.println("nums = " + nums);
sqlSession.close();
}
}
MyBatis的动态代理
什么是动态代理
什么是动态代理
MyBatis帮助创建Dao接口的实现类,在实现类中调用SqlSession的方法执行sql语句
使用动态代理的基本步骤
1、加入依赖:MyBatis的依赖
2、创建实体类
3、创建Dao接口:接口中定义操作数据的方法
4、创建mapper文件:在文件中写与接口中方法对应的sql语句
5、创建MyBatis的主配置文件:指定连接数据库的信息,指定mapper文件的路径(从类路径开始的路径信息 类路径:target/classes)
6、获取SqlSession对象
7、使用getMapper方法获取某个接口的对象 SqlSession.getMapper(接口.class)
8、通过第七步获取的对象调用Dao接口的方法执行mapper文件中的sql语句
使用动态代理方式的要求
1、dao接口和mapper文件名称必须一样(大小写都要一样),只有后缀名可以不同
2、dao接口和mapper文件要放在同一个文件夹下(这个文件夹一般有两个名称:dao或mapper) 需要注意的是:当要在mybatis主配置文件中批量声明mapper文件的位置的时候,就需要在同一个包下 如果不用批量声明的话,可以不在同一个包下
3、mapper文件的namespace的值必须是dao接口的全限定名称
4、mapper文件中的sql标签中的id要和接口中的方法名称相同
5、dao接口中不要使用方法重载,不要使用同名的,不同参数的方法
MyBatis中关于参数的问题
从Java代码中把实际的值传入到mapper文件中
1、一个简单类型的参数:#{任意字符}
2、多个简单类型的参数:在接口方法的参数前面使用 @Param("自定义名称")
3、使用一个Java对象,对象的属性值作为mapper文件中的参数,#{Java对象的属性名称}。这个比较常用
4、使用参数的位置:#{arg0},#{arg1},MyBatis3.4之前的版本,使用的是:#{0},#{1},这个比较少用,了解就行
5、使用Map作为参数:#{map的key},比较少用
MyBatis中 # 和 $ 的区别
1、# 在sql语句中是使用 ? 来进行参数的占位的,而且底层使用的是 PrepareStatement来执行sql,效率高。
2、# 能够避免sql注入,更安全
3、$ 在sql语句中不使用 ? 来进行参数的占位,而是使用字符串拼接的方式来拼接sql语句,底层使用Statement执行sql语句,效率较低。
4、$有sql注入的风险,缺乏安全性
5、 $ 可以代替表明或者列名 ****不理解
MyBatis中的返回结果
resultType
resultType
resultType:表示sql语句的执行结果,转为的Java对象的类型有两种写法:
1、类型的全限定名称
2、别名
在mybatis的主配置文件中定义别名 使用
resultMap
当实体类中的属性名和数据库中的字段不同名的时候,可以使用resultMap来自定义属性名和字段名的对应关系
实体类中的属性名和数据库中的字段不同的解决方法
1、在sql语句中使用列别名的方法
2、使用resultMap自定属性名和字段名的对应关系
模糊查询
1、在java代码中指定like的内容。此方法方便,推荐使用
2、在mapper文件中拼接like。这种方法比较麻烦,容易出错
动态sql
动态sql的作用:能够根据条件动态的拼接sql语句。
标签:在标签中定义sql语句,实现复用
sql 语句
标签
进行条件判断的,当
标签
标签:循环数组,list集合
PageHelper分页插件
能够实现数据的分页操作
使用步骤
1、加入依赖
com.github.pagehelper pagehelper5.1.8
2、在mybatis主配置文件中加入PageHelper的插件声明
3、在查询方法之前,加入PageHelper的方法调用
@Test
public void testPageHelper() throws IOException {
String config = "mybatis.xml";
InputStream in = Resources.getResourceAsStream(config);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(in);
SqlSession sqlSession = sqlSessionFactory.openSession();
StudentDao dao = sqlSession.getMapper(StudentDao.class);
// 在调用dao方法之前,加入PageHelper的方法调用
PageHelper.startPage(1,2);
List students = dao.selectAllStudent();
students.forEach(System.out::println);
}
作者:晚枫2000
链接:MyBatis 学习笔记_q2570558854的博客-CSDN博客



