给小孩做辅食的网站,网站标题作弊详解,南京企业自助建站,定制型网站建设服务1、什么是MyBatis
Mybatis是一个半ORM#xff08;对象关系映射#xff09;框架#xff0c;它内部封装了JDBC#xff0c;开发时只需要关注SQL语句本身#xff0c;不需要花费精力去处理加载驱动、创建连接、创建statement等繁杂的过程。程序员直接编写原生态sql#xff0c…1、什么是MyBatis
Mybatis是一个半ORM对象关系映射框架它内部封装了JDBC开发时只需要关注SQL语句本身不需要花费精力去处理加载驱动、创建连接、创建statement等繁杂的过程。程序员直接编写原生态sql可以严格控制sql执行性能灵活度高。MyBatis 可以使用 XML 或注解来配置和映射原生信息将 POJO映射成数据库中的记录避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。通过xml 文件或注解的方式将要执行的各种 statement 配置起来并通过java对象和statement中sql的动态参数进行映射生成最终执行的sql语句最后由mybatis框架执行sql并将结果映射为java对象并返回。从执行sql到返回result的过程。
2、说说MyBatis的优点和缺点
优点 1基于SQL语句编程相当灵活不会对应用程序或者数据库的现有设计造成任何影响SQL写在XML里解除sql与程序代码的耦合便于统一管理提供XML标签支持编写动态SQL语句并可重用。2与JDBC相比减少了50%以上的代码量消除了JDBC大量冗余的代码不需要手动开关连接3很好的与各种数据库兼容因为MyBatis使用JDBC来连接数据库所以只要JDBC支持的数据库MyBatis都支持。4能够与Spring很好的集成5提供映射标签支持对象与数据库的ORM字段关系映射提供对象关系映射标签支持对象关系组件维护。 缺点 1SQL语句的编写工作量较大尤其当字段多、关联表多时对开发人员编写SQL语句的功底有一定要求。2SQL语句依赖于数据库导致数据库移植性差不能随意更换数据库。
3、#{}和${}的区别是什么
#{}是预编译处理${}是字符串替换。
Mybatis在处理#{}时会将sql中的#{}替换为?号调用PreparedStatement的set方法来赋值
Mybatis在处理${}时就是把${}替换成变量的值。
使用#{}可以有效的防止SQL注入提高系统安全性。
4、当实体类中的属性名和表中的字段名不一样 怎么办
第1种 通过在查询的sql语句中定义字段名的别名让字段名的别名和实体类的属性名一致。
select idselectAll resultTypebrand!–brand是对象类型表示传入的是一个实体类对象– select id , brand_name as brandName, company_name as companyName, ordered,description,status from tb_brand;
/select第2种 通过来映射字段名和实体类属性名的一一对应的关系。 步骤 在标签中定义resultMap标签 在标签中使用resultMap属性替换resultType属性
select idselectAll resultMapbrandResultMapselect * from tb_brand/selectresultMap idbrandResultMap typebrand!--id:完成主键字段的映射result:完成一般字段的映射column: 该字段在数据库中的列名property: 该字段在实体类pojo的属性名id columnbrand_name propertybrandName///主键字段的映射--result columnbrand_name propertybrandName/result columncompany_name propertycompanyName//resultMap5、Mybatis是如何进行分页的分页插件的原理是什么
Mybatis使用RowBounds对象进行分页它是针对ResultSet结果集执行的内存分页而非物理分页。可以在sql内直接拼写带有物理分页的参数来完成物理分页功能也可以使用分页插件来完成物理分页比如MySQL数据的时候在原有SQL后面拼写limit。分页插件的基本原理是使用Mybatis提供的插件接口实现自定义插件在插件的拦截方法内拦截待执行的sql然后重写sql根据dialect方言添加对应的物理分页语句和物理分页参数。
6、Mybatis是如何将sql执行结果封装为目标对象并返回的都有哪些映射形式
第一种是使用用 《resultMap》 标签逐一定义数据库列名和对象属性名之间的映射关系。第二种是使用sql列的别名功能将列的别名书写为对象属性名。有了列名与属性名的映射关系后Mybatis通过反射创建对象同时使用反射给对象的属性逐一赋值并返回那些找不到映射关系的属性是无法完成赋值的。
7、 mybatis如何执行批量插入
首先,创建一个简单的insert语句: insert id”insertname” insert into names (name) values (#{value}) /insert 然后在java代码中像下面这样执行批处理插入: liststring names new arraylist(); names.add(“fred”); names.add(“barney”); names.add(“betty”); names.add(“wilma”); //
注意这里 executortype.batch sqlsession sqlsession sqlsessionfactory.opensession(executortype.batch); try { namemapper mapper sqlsession.getmapper(namemapper.class); for (string name : names) { mapper.insertname(name); } sqlsession.commit(); }catch(Exception e){ e.printStackTrace(); sqlSession.rollback(); throw e; } finally { sqlsession.close(); }8、模糊查询like语句该怎么写?
第1种在Java代码中添加sql通配符。
stringwildcardname“%smi%”;listnamenamesmapper.selectlike(wildcardname);
select id”selectlike”select * from foo where bar like #{value}/select第 2种在sql语句中拼接通配符会引起sql注入:
string wildcardname “smi”;listname names mapper.selectlike(wildcardname); select id”selectlike”select * from foo where bar like %#{value}%/select9、MyBatis实现一对一有几种方式?具体怎么操作的
MyBatis实现一对一有联合查询和嵌套查询。 联合查询是几个表联合查询,只查询一次, 通过在resultMap里面配置association节点配置一对一的类就可以完成嵌套查询是先查一个表根据这个表里面的结果的 外键id去再另外一个表里面查询数据,也是通过association配置但另外一个表的查询通过select属性配置。
10、Mybatis是否支持延迟加载如果支持它的实现原理是什么
Mybatis仅支持association关联对象和collection关联集合对象的延迟加载 association指的就是一对一collection指的就是一对多查询。在Mybatis配置文件中可以配置是否启用延迟加载lazyLoadingEnabledtrue|false。 它的原理是使用CGLIB创建目标对象的代理对象当调用目标方法时进入拦截器方法比如调用a.getB().getName()拦截器invoke()方法发现a.getB()是null值那么就会单独发送事先保存好的查询关联B对象的sql把B查询上来然后调用a.setB(b)于是a的对象b属性就有值了接着完成a.getB().getName()方法的调用。这就是延迟加载的基本原理。当然了不光是Mybatis几乎所有的包括Hibernate支持延迟加载的原理都是一样的。