y2第一章 初始mybatis的上机3_第一章 初识 MyBatis

概念:优秀持久层框架:实体类和SQL语句之间建立映射关系

与hibernate区别    :自动生成sql语句,并且建立实体类和数据表的映射。

MyBatis基本要素:核心对象   核心配置文件  SQL映射文件

特点:

基于SQL语法

,简单易学

能了解底层封装过程 SQL语句封装在配置文件中,

便于统一管理与维护,降低程序的耦合度

方便程序代码调试

什么是ORM? 对象关系映射

ORM(Object Relational Mapping) 编写程序的时候,

以面向对象的方式处理数据 保存数据的时候,却以关系型数据库的方式存储

ORM解决方案包含下面四个部分

在持久化对象上执行基本的增、删、改、查操作

对持久化对象提供一种查询语言或者API 对象关系映射工具

提供与事务对象交互、执行检查、延迟加载以及其他优化功能

搭建MyBatis 开发环境

1.创建java工程

1.编写MyBatis核心配置文件(mybatis-cofig.xml)

2.创建实体类—POJO

3.DAO层- SQL映射文件

4.创建测试类

如下图:

核心配置文件注意事项:

注意编写头部声明以及未联网状态下的配置

注意节点的编写顺序

代码如下:

/p>

PUBLIC "-//mybatis.org//DTD Config 3.0//EN"

"http://mybatis.org/dtd/mybatis-3-config.dtd">

如图:

编写接口 和 SQL配置文件

测试类:

SqlSession sqlSession = null;

// 1.加载mybatis_config配置文件

try {

Reader rs = Resources.getResourceAsReader("mybatis_config.xml");

// 2.创建sqlSessionFactoryBuilder对象

SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();

// 3.创建sqlSessionFactory

SqlSessionFactory sqlSessionFactory = sqlSessionFactoryBuilder.build(rs);

// 4.获取sqlSession对象

sqlSession = sqlSessionFactory.openSession();

// 5. sqlsession的两种使用方式:

//a.实例操作 参数:SQL映射文件里面要调用的ID

//Object count = sqlSession.selectOne("getCount");

//b.基于mapper接口的操作

StudentMapper mapper = sqlSession.getMapper(StudentMapper.class);

//int count = mapper.getCount();

//System.out.println(count);

//获取属性的集合

Student student2 = new Student();

student2.setSname("李珊");

List studentList = mapper.getStudentList(student2);

for (Student student : studentList) {

System.out.println(student.getSname());

}

Student s = mapper.getStudentById(44);

System.out.println(s.getSname());

} catch (Exception e) {

e.printStackTrace();

} finally {

if (sqlSession != null) {

// 6.关闭资源

sqlSession.close();

}

}

简单介绍Mybatis的框架的优缺点?

一、MyBatis框架的优点:

1. 与JDBC相比,减少了50%以上的代码量

2. MyBatis是最简单的持久化框架,小巧并且简单易学。

3. MyBatis相当灵活,不会对应用程序或者数据库的现有设计强加任何影响,SQL写在XML里,从程序代码中彻底分离,降低耦合度,便于统一管理和优化,并可重用。

4. 提供XML标签,支持编写动态SQL语句

5. 提供映射标签,支持对象与数据库的ORM字段关系映射。

二、MyBatis框架的缺点:

1. SQL语句的编写工作量较大,尤其是字段多、关联表多时,更是如此,对开发人员编写SQL语句的功底有一定要求。

2. SQL语句依赖于数据库,导致数据库移植性差,不能随意更换数据库。

Mybatis的核心对象有哪些,对象之间的关系?

1、SqlSessionFactoryBuilding

这个类可以被实例化、使用和丢弃。一但创建了SqlSessionFactory后,这个类就不需要存在 了,因此sqlsessionfactorybuilder实例的最佳作用域是方法范围(即作为方法的变量)

2、SqlSessionFactory

SqlSessionFactory,顾名思义就是获取SqlSession对象的工厂,功能类似于jdbc中加载数据库驱动。所以sqlsessionfactory对象一但被创建,应该在应用执行期间都存在,因此sqlsessionfactory的最佳作用域是应用范围,建议定义为静态变量。

3、sqlsession

sqlsession类似于jdbc的connection对象,每个线程都因该有自己的sqlsession实例。sqlsesion的实例,sqlsession的实例不能共享,他是 线程不安全的,因此最佳作用域是请求或方法范围,sqlsession对象能够执行数据库的增删改查操作,因此在使用后应该关闭,并保存使用finally快来关闭。

Mybatis中#{}和${}的区别?

1. #将传入的数据都当成一个字符串,会对自动传入的数据加一个双引号。如:order by #user_id#,如果传入的值是111,那么解析成sql时的值为order by "111",如果传入的值是id,则解析成的sql为order by "id".

2. $将传入的数据直接显示生成在sql中。如:order by $user_id$,如果传入的值是111,那么解析成sql时的值为order by user_id,如果传入的值是id,则解析成的sql为order by id.

3. #方式能够很大程度防止sql注入。

4.$方式无法防止Sql注入。

5.$方式一般用于传入数据库对象,例如传入表名.

6.一般能用#的就别用$.

MyBatis排序时使用order by动态参数时需要注意,用$而不是#

Mybatis当实体类的属性名和表中的字段名不一样,怎么办?

1、取别名 2、使用resultMap

Mybatis的模糊查询的实现方式(两种以上)?

1、在调用的方法中把参数使用%拼接好

2、在SQL映射文件中使用$符号

3、使用concat拼接参数

4、使用bind标签创建拼接参数变量

Mybatis Mapper代理的开发方式规范?

1.创建接口与映射文件同名,并在相同包下。

2.映射文件的namespace的值必须等于接口的全限定名。

3.标签中的id值必须与接口中方法同名。

4.上述标签的parameterType属性值的类型与接口中方法的参数相同。

5.上述标签的resultType的属性值得类型与接口方法的返回值类型相同。

Mybatis中如何传递多个参数?

一、使用注解@Param 二、使用map集合封装多个参数 三、使用对象属性绑定多个参数

Mapper映射器的配置方式有哪些?

一、通过resource指定 二、通过url指定三、通过class指定 四、通过指定包路径

mybatis中实体类取别名的方式有哪些?

一、通过resource指定 二、通过包路径指定 三、通过实体类注解@Alises

Mybatis的映射文件中,都有哪些常用的标签?

insert、update、delete、selete、sql、resultMap

Mybatis中配置properties元素的两种方式及优先级?

1、通过外部指定的方式(database.properties),实现动态配置

2、直接配置为xml子节点,实现动态配置  外部指定的方式优先级高

Mybatis中配置事务管理的类别有几种?分别是什么?

两种 1、JDBC 2、MANAGED

Mybatis中数据源的配置类型有几种?分别是什么?

三种 1、POOLED 2、UNPOOLED 3、JNDI

Mybatis中autoMappingBehavior的匹配级别有几种,分别是什么??

三种 1、NONE 2、PARTIAL默认3、FULL

weixin073智慧旅游平台开发微信小程序+ssm后端毕业源码案例设计 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值