`
天之痕苏
  • 浏览: 18338 次
文章分类
社区版块
存档分类
最新评论

Mybatis用法

 
阅读更多

看到一篇关于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层。

对于以上的几点说明,可参见最上面的链接看一下博文中举的实例,还是很容易理解的。另外,在我们的项目中,稍微有点儿不同的,在于接口的变化。

下图是项目的结构图:

用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>  


分享到:
评论

相关推荐

    深入理解SpringBoot中关于Mybatis使用方法

    深入理解SpringBoot中关于Mybatis使用方法 Spring Boot是一款流行的Java框架,MyBatis是一款流行的ORM框架,两者结合使用可以简化数据库操作。下面将深入理解SpringBoot中关于Mybatis使用方法。 Orm框架的本质是...

    mybatis使用方法.doc

    mybatis使用方法.doc

    MyBatis用法

    MyBatis是一个优秀的Java持久层框架,它支持定制化SQL、存储过程以及高级映射。在本示例中,我们将深入探讨MyBatis的核心概念、基本操作和与Spring MVC的集成。...掌握MyBatis的用法对于提升Java后端开发能力至关重要。

    springboot集成mybatis的两种使用方式

    本文将详细介绍两种在Spring Boot中集成MyBatis的方法:一种是传统的XML配置方式,另一种是现代的注解方式。这两种方法各有优劣,开发者可以根据项目的实际需求选择合适的集成方式。 首先,我们来看看**XML配置方式...

    mybatis demo mybatis 实例

    4. README.md:项目说明文件,介绍项目的搭建、运行和使用方法。 通过这个实例项目,开发者可以从实践中学习MyBatis的使用,掌握如何配置MyBatis,如何编写Mapper接口和XML映射文件,以及如何在Java代码中调用...

    Mybatis批量foreach merge into的用法

    Mybatis批量foreach merge into的用法是通过Mybatis的动态SQL语法foreach循环插入实现的,这种方法可以批量插入时间价格表数据。如果某个套餐的某天的价格存在,则更新,不存在则插入。下面是该方法的详细介绍: ...

    MyBatis基本使用总结

    为了实现接口方法与映射文件中定义的SQL的关联,MyBatis使用了动态代理机制。在运行时,MyBatis会为每个Mapper接口生成一个实现了该接口的代理类,当调用接口方法时,实际上执行的是代理类中的方法,这个方法会解析...

    mybatis的中文api文档

    MyBatis的项目文档和项目信息包括了MyBatis的安装、配置、使用方法等内容。MyBatis的项目文档和项目信息包括了MyBatis的安装、配置、使用方法等内容。如果开发者发现MyBatis的文档有不足或者丢失对某一特性的描述,...

    mybatis使用jar包

    5. **JDBC事务**:JDBC提供对事务的支持,可以通过Connection对象的setAutoCommit方法来开启或关闭自动提交,并使用commit和rollback方法控制事务。 6. **连接池**:为了提高性能,通常会使用连接池(如C3P0, ...

    ibatis2mybatis-master

    可以帮你将 ibatis 2.x sqlmap 文件转换为 myBatis 3.x mapper 文件,该工具是使用了 Ant 构建任务进行 XSTL 转换和一些语法文字替换 该工具下载下来使用非常简单,把你要转换的所有 sqlmap 文件放到 source 文件夹...

    mybatis使用的jar包.zip

    在使用MyBatis时,你需要在项目中引入此jar包,并在Spring或者其他的初始化代码中配置MyBatis的SqlSessionFactory,它是MyBatis的主要入口点,用于创建SqlSession对象,进而执行SQL操作。 再来看`mysql-connector-...

    Mybatis通用DAO设计封装(mybatis)

    Mybatis使用`SqlSession`和`MapperFactoryBean`来创建Mapper对象的代理,调用DAO方法时,实际上执行的是动态生成的SQL。 5. **事务管理**: 在服务层(Service)处理事务,通过`TransactionTemplate`或者`...

    mybatis-3-mybatis-3.2.6

    Mapper接口是业务操作的接口,MyBatis通过动态代理机制将这些接口的方法转换为SQL执行。 在3.2.6版本中,MyBatis的源码包含以下几个关键模块: 1. **配置解析**:MyBatis的配置文件(mybatis-config.xml)被解析成...

    Mybatis使用(上

    映射文件是Mybatis的核心,它定义了SQL语句和Java方法的对应关系。其中,`&lt;insert&gt;`标签用于插入数据,例如: ```xml INSERT INTO user(name, age) VALUES (#{name}, #{age}) ``` 这里的`id`是Java方法名,`...

    mybatis使用注解方式简单实现的Demo

    这个"mybatis使用注解方式简单实现的Demo"旨在帮助初学者理解 MyBatis 注解的用法。 首先,我们需要在项目中引入 MyBatis 相关的依赖库。通常,这可以通过 Maven 或 Gradle 的依赖管理来完成。确保在你的 `pom.xml`...

    springMVC和mybatis整合,mybatis使用注解模式

    接下来,我们可以在SpringMVC的Controller层使用@Autowired注解注入Mapper接口的实现,这样就可以直接调用接口中的方法执行数据库操作。例如,我们可以定义一个UserMapper接口,包含获取用户信息的selectUser方法,...

    Spring mvc 和 mybatis 整合,mybatis使用注解模式

    在MyBatis的注解模式下,我们可以直接在DAO接口的方法上使用注解来指定SQL语句。例如,@Select用于查询,@Insert用于插入,@Update用于更新,@Delete用于删除。这种方式简化了XML配置,使得代码更易读、易维护。 ...

    mybatis-配套资源

    这些资源可以帮助我们更深入地理解MyBatis的核心概念、使用方法以及最佳实践。 首先,MyBatis 的核心是XML或注解形式的SQL映射,这使得我们可以将SQL语句与Java代码分离,提高了代码的可读性和可维护性。在配套笔记...

    Mybatis用到的资料

    Mybatis是中国著名的开源Java持久层框架,它支持定制...压缩包中的“res”文件可能包含了Mybatis的官方文档、示例代码、实战教程等多种资源,可以帮助学习者了解Mybatis的基本用法...

    mybatis学习-入门(1)-单独使用mybatis

    本部分主要关注如何单独使用MyBatis,不涉及与其他框架的集成。 1. **MyBatis简介** MyBatis消除了几乎所有的JDBC代码和手动设置参数以及获取结果集。它将SQL语句与Java代码分离,提供了一个更简洁、更易于维护的...

Global site tag (gtag.js) - Google Analytics