标签:update 自动 row 重载 传递 tty oci The 物理
什么是mybatis
? orm的半自动化框架,自己封装了jdbc,创建驱动,创建链接,创建statement等,采取mapper动态代理机制,使使用者只需要关注sql的编写。
? mybatis的sql是通过xm或者注解来进行对欲生成的sql进行配置,再通过配置的类路劲反射找到类的对象,从而找到要执行的方法,获取方法中的动态参数, 再将参数根据反射匹配#{}中字符串根据set方法写入到sql中,从而组装成完整的sql在进行执行。最后将执行的结果在映射成对象或者map集合返回回来。
mybatis优缺点:
优点:
缺点:
#{} ${} 区别
通常一个mapper.xml文件,都会对应一个Dao接口,这个Dao接口的工作原理是什么?Dao接口里的方法,参数不同时,方法能重载吗?
如何进行分页查询,分页插件原理是什么
Mybatis是否支持延迟加载?如果支持,它的实现原理是什么
Mybatis是如何将sql执行结果封装为目标对象并返回的?都有哪些映射形式
Mybatis动态sql有什么用?执行原理?有哪些动态sql?
Xml映射文件中,除了常见的select | insert | updae | delete标签之外,还有哪些标签?
使用MyBatis的mapper接口调用时有哪些要求
模糊查询like语句该怎么写
直接在sql中写入如下:
// 容易引发sql注入
<select id=”selectlike”>
select * from foo where bar like ‘%${}%‘
</select>
采取传参还有%%方式进行配置:
// 调用方法时直接传参含有%% 比较麻烦
sqlSession.selectList("类路径","%zht%");
<select id=”selectlike”>
select * from foo where bar like #{}
</select>
直接在sql中采取concat进行拼接处理
<select id=”selectlike”>
select * from foo where bar like concat(‘%‘,#{},‘%‘)
</select>
当实体类中的属性名和表中的字段名不一样 ,怎么办
如何获取自动生成的(主)键值
insert方法中总会返回一个值,代表插入的行数
获取自增主键值可以在标签中配置:usegeneratedkeys=”true”如下:
<insert id=”insertname” usegeneratedkeys=”true” keyproperty=”id”>
insert into names (name) values (#{name})
</insert>
int rows = mapper.insertname(name);
// 完成后,id已经被设置到对象中
system.out.println(“rows inserted = ” + rows);
system.out.println(“generated key value = ” + name.getid());
在mapper中如何传递多个参数
直接传递多个参数,sql语句写成#{0},#{1}进行匹配
//DAO层的函数
Public UserselectUser(String name,String area);
//对应的xml,#{0}代表接收的是dao层中的第一个参数,#{1}代表dao层中第二参数,更多参数一致往后加即可。
<select id="UserselectUser"resultMap="BaseResultMap">
select * fromuser_user_t whereuser_name = #{0} anduser_area=#{1}
</select>
直接传递参数,在参数前面协商注解
//DAO层的函数
Public UserselectUser(@param("name") String name, @param("area") String area);
//对应的xml,#{0}代表接收的是dao层中的第一个参数,#{1}代表dao层中第二参数,更多参数一致往后加即可。
<select id="UserselectUser"resultMap="BaseResultMap">
select * fromuser_user_t whereuser_name = #{name} anduser_area=#{area}
</select>
参数封装成map
Map<String, Object> map = new HashMap();
map.put("name", name);
map.put("area", area);
return sqlSession.selecOne("UserselectUser", map);
<select id="UserselectUser"resultMap="BaseResultMap">
select * fromuser_user_t whereuser_name = #{name} anduser_area=#{area}
</select>
一对一、一对多的关联查询
<mapper namespace="com.lcb.mapping.userMapper">
<!--association 一对一关联查询 -->
<select id="getClass" parameterType="int" resultMap="ClassesResultMap">
select * from class c,teacher t where c.teacher_id=t.t_id and c.c_id=#{id}
</select>
<resultMap type="com.lcb.user.Classes" id="ClassesResultMap">
<!-- 实体类的字段名和数据表的字段名映射 -->
<id property="id" column="c_id"/>
<result property="name" column="c_name"/>
<association property="teacher" javaType="com.lcb.user.Teacher">
<id property="id" column="t_id"/>
<result property="name" column="t_name"/>
</association>
</resultMap>
<!--collection 一对多关联查询 -->
<select id="getClass2" parameterType="int" resultMap="ClassesResultMap2">
select * from class c,teacher t,student s where c.teacher_id=t.t_id and c.c_id=s.class_id and c.c_id=#{id}
</select>
<resultMap type="com.lcb.user.Classes" id="ClassesResultMap2">
<id property="id" column="c_id"/>
<result property="name" column="c_name"/>
<association property="teacher" javaType="com.lcb.user.Teacher">
<id property="id" column="t_id"/>
<result property="name" column="t_name"/>
</association>
<collection property="student" ofType="com.lcb.user.Student">
<id property="id" column="s_id"/>
<result property="name" column="s_name"/>
</collection>
</resultMap>
</mapper>
MyBatis实现一对一/一对多有几种方式?具体怎么操作的
什么是MyBatis的接口绑定?有哪些实现方式
MyBatis与Hibernate有哪些不同
标签:update 自动 row 重载 传递 tty oci The 物理
原文地址:https://www.cnblogs.com/tar8087/p/14753574.html