设为首页 收藏本站
查看: 920|回复: 0

[经验分享] Mybatis用法

[复制链接]

尚未签到

发表于 2016-11-24 03:34:30 | 显示全部楼层 |阅读模式
  看到一篇关于Mybatis的博文,http://blog.csdn.net/fuxingdaima/article/details/10527399有详细的用法介绍。
  现在做的项目中,用到了Mybatis框架。刚一开始,并不懂如何使用,都是另一个哥们带着我做到了现在。上午的时候被问到Mybatis的原理,竟无言以对……所以,下午翻看了下Mybatis的介绍,感觉还是只知道些基本用法,但对于实现原理,还是无法理解。趁现在这个机会,就具体的说一下我的认识。
  Mybatis是一个基于Java的持久层框架,包括两个部分:一是SQL maps;二是DAO。
  Mybatis支持普通的SQL查询和高级映射。Mybatis消除了所有的JDBC代码和参数设置,统一的用xml进行配置管理,即Mybatis的配置文件,包含了
  ①给POJO类的长路径起个别名;
  ②配置数据库的用户名和密码等参数;
  ③指明关系表的配置文件(即POJO对应的xml文件)
  等内容。
  综上,Mybatis应该包括以下几块内容:
  1、Mybatis的配置文件mybatis-config.xml文件;
  2、对应的POJO类;
  3、和POJO类对应的xml关系表配置文件(包含有对该POJO类在数据库中对应记录的增/删/改/查操作等);
  4、Mybatis应用程序中需要用到sqlSessionFactory实例,所避免重复创建,可封装一个sqlSessionFactory实例。
  5、和3中的xml配置文件对应的接口;
  其中,在最后一块内容中,接口也就相当于DAO层了,通过将接口实例化,也就得到了一个POJO的实例,可直接提供给上面的service层。
  对于以上的几点说明,可参见最上面的链接看一下博文中举的实例,还是很容易理解的。另外,在我们的项目中,稍微有点儿不同的,在于接口的变化。
  下图是项目的结构图:
   DSC0000.jpg
  用DAO层取代了接口,相应的,获取结果集的方式也有了变化,下面给出在DAO中得到结果集的Java代码:
  插入样例:

<span style="white-space:pre"></span>public void addParticipants(Patent patent, List<Integer> list) {
SqlSession session = SqlSessionUtil.getSqlSession();
try {
for (Integer id : list) {
Map<String, Object> params = new HashMap<String, Object>();
params.put("patentId", patent.getPatentId());
params.put("id", id);
session.insert("insertPatentParticipant", params);
}
session.commit();
} catch (Exception e) {
session.rollback();
e.printStackTrace();
<span style="white-space:pre"></span>}查询样例:public List<Patent> getPatentByProj(Integer id) {
SqlSession session = SqlSessionUtil.getSqlSession();
List<Patent> list = session.selectList("selectPatentByProjId", id);
session.close();
return list;
}多对一、一对多关联的处理:  1、多对一:association
  例如,学生和班级的关系就是多个学生对应一个班级的关系。这时候在学生的xml文件中,要用association进行关联。
  

<!--StudentMapper.xml--->  
<?xml version="1.0" encoding="gbk"?>  
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"   
"mybatis-3-mapper.dtd">  
<mapper namespace="org.phf.mapping.StudentMapper">  
<!--开启缓存-->  
<cache />   
<!--resultMap标签将column属性(数据库表中的列名) 映射到 property属性(Student对象中的字段)-->  
<resultMap id="clazzResult" type="Clazz">  
<id column="id" property="id"/>  
<result column="code" property="code"/>  
</resultMap>  
<resultMap id="studentResult" type="Student">  
<id column="id" property="id"/>  
<result column="name" property="name"/>  
<result column="sex" property="sex"/>  
<result column="age" property="age"/>  
<!--<association>标签体现的是多对一关联关系,-->  
<association property="clazz" javaType="Clazz" resultMap="clazzResult"/>  
</resultMap>  
<select id="find" parameterType="Integer" resultMap="studentResult">  
SELECT * FROM tb_student s,tb_clazz c  
WHERE s.clazz_id=c.id AND s.id = #{id}  
</select>  
</mapper>  

2、一对多:collection  

<!---ClazzMapper.xml---->  
<?xml version="1.0" encoding="gbk"?>  
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"   
"mybatis-3-mapper.dtd">  
<mapper namespace="org.phf.mapping.ClazzMapper">  
<!--开启缓存-->  
<cache />   
<resultMap id="clazzResult" type="Clazz">  
<id column="id" property="id"/>  
<result column="code" property="code"/>  
<collection property="studentList" ofType="Student"   
column="id" select="findStudentById"/>  
</resultMap>  
<resultMap id="studentResult" type="Student">  
<association property="clazz" javaType="Clazz" column="class_id" select="find"/>  
</resultMap>  
<select id="findStudentById" parameterType="Integer" resultMap="studentResult">  
select * from tb_student where clazz_id=#{class_id}  
</select>  
<select id="find" parameterType="Integer" resultMap="clazzResult">  
select * from tb_clazz where id=#{id}   
</select>  
</mapper>

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-304497-1-1.html 上篇帖子: mybatis生成工具MyBatis Generator 下篇帖子: Mybatis技术(二) MyBatis-Spring
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表