标签:语句 15 07 映射 day6 sql SQL Mybatis id
今天谈谈Mybatis Chapter1
想起大二的时候,学习WEB架构,学习的是较早的SSH,其中H代表的是Hibernate,相较于现在爆火的Mybatis,Hibernate使用起来不是特别的方便,所以逐渐被遗弃,来到项目中我需要尽快熟悉Mybatis的使用方法和一些常见问题,带着问题去读书更有效率。
1.什么是Mybatis?
答:Mybatis是一款优秀的持久层框架,它支持定制化SQL、存储过程以及高级映射。Mybatis避免了几乎所有的JDBC代码和手动设置参数以及获取结果集。Mybatis可以使用简单的XML或是注解来配置和映射原生类型、接口和Java的POJO为数据库中的记录
2.Mybatis的优点:
- 与JDBC相比,减少了50%以上的代码量。
- MyBatis是最简单的持久化框架,小巧并且简单易学。
- MyBatis灵活,不会对应用程序或者数据库的现有设计强加任何影响,SQL写在XML里,从程序代码中彻底分离,降低耦合度,便于统一管理和优化,可重用。
- 提供XML标签,支持编写动态SQL语句(XML中使用if, else)。
- 提供映射标签,支持对象与数据库的ORM字段关系映射(在XML中配置映射关系,也可以使用注解)。
3.Mybatis框架的缺点:
- SQL语句的编写工作量较大,尤其是字段多、关联表多时,更是如此,对开发人员编写SQL语句的功底有一定要求。
- SQL语句依赖于数据库,导致数据库移植性差,不能随意更换数据库。
4.Mybatis框架的适用场合:
MyBatis专注于SQL本身,是一个足够灵活的DAO层解决方案。对性能的要求很高,或者需求变化较多的项目,如互联网项目,MyBatis将是不错的选择。
当需求明确时需,业务也固定的项目,例如OA项目、ERP项目等,可以尝试使用hibernate
5.# 和 $的区别是什么?
-
#是将传入的值当做字符串的形式,例如:
select id,name,age from student where id =#{id},
当前端把id值1,传入到后台的时候,就相当于
select id,name,age from student where id =‘1’. -
$ 是将传入的数据直接显示生成sql语句,例如:
select id,name,age from student where id =${id},
当前端把id值1,传入到后台的时候,就相当于
select id,name,age from student where id = 1.
6.当实物类中的属性名和表中的字段名不一样怎么办?
共有三种解决办法:
- 起别名:
<select id="getEmployeeById" resultType="com.atguigu.mybatis.entities.Employee">
select id,first_name firstName,email,salary,dept_id deptID from employees where id = #{id}
</select>
在该代码片段中,first_name后跟有firstName,同理dept_id后跟驼峰命名deptID
- 方法二:在MyBatis的全局配置文件中开启驼峰命名规则
<!--是否启用下划线与驼峰式命名规则的映射(如first_name => firstName)-->
<configuration>
<settings>
<setting name="mapUnderscoreToCamelCase" value="true" />
</settings>
</configuration>
- 方法三:在Mapper映射文件中使用resultMap来自定义映射规则
<select id="getEmployeeById" resultMap="myMap">
select * from employees where id = #{id}
</select>
<!-- 自定义高级映射 -->
<resultMap type="com.atguigu.mybatis.entities.Employee" id="myMap">
<!-- 映射主键 -->
<id column="id" property="id"/>
<!-- 映射其他列 -->
<result column="last_name" property="lastName"/>
<result column="email" property="email"/>
<result column="salary" property="salary"/>
<result column="dept_id" property="deptId"/>
</resultMap>
7.模糊查询的Like语句应该怎么写?
首先是SQL语言中模糊查询
SELECT * FROM TABLLE WHERE ID LIKE "%715"
8.Hibernate和Mybatis有哪些不同?
答:
- Mybatis和hibernate不同,它不完全是一个ORM框架,因为MyBatis需要程序员自己编写Sql语句,不过mybatis可以通过XML或注解方式灵活配置要运行的sql语句,并将java对象和sql语句映射生成最终执行的sql,最后将sql执行的结果再映射生成java对象。
- Mybatis学习门槛低,简单易学,程序员直接编写原生态sql,可严格控制sql执行性能,灵活度高,非常适合对关系数据模型要求不高的软件开发,例如互联网软件、企业运营类软件等,因为这类软件需求变化频繁,一但需求变化要求成果输出迅速。但是灵活的前提是mybatis无法做到数据库无关性,如果需要实现支持多种数据库的软件则需要自定义多套sql映射文件,工作量大。
- Hibernate对象/关系映射能力强,数据库无关性好,对于关系模型要求高的软件(例如需求固定的定制化软件)如果用hibernate开发可以节省很多代码,提高效率。但是Hibernate的缺点是学习门槛高,要精通门槛更高,而且怎么设计O/R映射,在性能和对象模型之间如何权衡,以及怎样用好Hibernate需要具有很强的经验和能力才行。
标签:语句,15,07,映射,day6,sql,SQL,Mybatis,id 来源: https://blog.csdn.net/qq_43285863/article/details/118783911
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。