GVKun编程网logo

mybatis映射文件深入(mybatis 映射文件)

14

本文将为您提供关于mybatis映射文件深入的详细介绍,我们还将为您解释mybatis映射文件的相关知识,同时,我们还将为您提供关于eclipse中mybatisgenerator插件生成mybati

本文将为您提供关于mybatis映射文件深入的详细介绍,我们还将为您解释mybatis 映射文件的相关知识,同时,我们还将为您提供关于eclipse中mybatis generator插件生成mybatis映射文件、ibatis映射文件、Java-MyBatis-MyBatis3-XML映射文件:select、Java-MyBatis-MyBatis3-XML映射文件:XML映射文件的实用信息。

本文目录一览:

mybatis映射文件深入(mybatis 映射文件)

mybatis映射文件深入(mybatis 映射文件)

1、动态 sql 之 if

我们根据实体类的不同取值,使用不同的 sql语句来进行查询。比如在 id如果不为空时可以根据id查询,如果username 不同空时还要加入用户名作为条件。这种情况在我们的多条件组合查询中经常会碰到。

if具体的示例:

<select id="findByCondition" parameterType="user" resultType="user">
    select * from User
    <where>
      <!--满足条件拼接-->
        <if test="id!=0">
            and id=#{id}
        </if>
        <if test="username!=null">
            and username=#{username}
        </if>
    </where>
</select>

当查询条件id和username都存在时,控制台打印的sql语句如下:

 … … …
     //获得MyBatis框架生成的UserMapper接口的实现类
  UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
    User condition = new User();
    condition.setId(1);
    condition.setUsername("lucy");
    User user = userMapper.findByCondition(condition);
    … … …


当查询条件只有d时:

2、动态 sql 之<foreach> 循环拼接

循环执行sql的拼接操作,例如:SELECT * FROM USER WHERE id IN (1,2,5)。

<select id="findByIds" parameterType="list" resultType="user">
    select * from User
    <where>
        <foreach collection="array" open="id in(" close=")" item="id" separator=",">
            #{id}
        </foreach>
    </where>
</select>

标签用于遍历集合,它的属性:

•collection:代表要遍历的集合元素,注意编写时不要写#{}

•open:代表语句的开始部分

•close:代表结束部分

•item:代表遍历集合的每个元素,生成的变量名

•sperator:代表分隔符

3、sql片段抽取

sql 中可将重复的 sql 提取出来,使用时用 include 引用即可,最终达到 sql 重用的目的

<!--抽取sql片段简化编写-->
<sql id="selectUser" select * from User</sql>
<select id="findById" parameterType="int" resultType="user">
    <include refid="selectUser"></include> where id=#{id}
</select>
<select id="findByIds" parameterType="list" resultType="user">
    <include refid="selectUser"></include>
    <where>
        <foreach collection="array" open="id in(" close=")" item="id" separator=",">
            #{id}
        </foreach>
    </where>
</select>

eclipse中mybatis generator插件生成mybatis映射文件

eclipse中mybatis generator插件生成mybatis映射文件

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE generatorConfiguration
 PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN"
 "http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd">
<generatorConfiguration>
	<!-- 数据库驱动包位置 -->
	<classPathEntry location="F:\Maven\mysql\mysql-connector-java\5.1.20\mysql-connector-java-5.1.20.jar"/>
	<context id="context1" targetRuntime="MyBatis3" defaultModelType="flat">
		<commentGenerator>
			<property name="suppressDate" value="true" />
			<!-- 是否去除自动生成的注释 true:是 : false:否 -->
			<property name="suppressAllComments" value="true" />
		</commentGenerator>

	<jdbcConnection connectionURL="jdbc:mysql://localhost:3306/xxxx" driverpassword="root" userId="root" />
	<!-- 实体Bean -->
	<javaModelGenerator targetPackage="pers.aidenj.ostrich.model" targetProject="Ostrich/src/test/java" >
		<property name="constructorBased" value="false"/>
		<property name="useActualColumnNames" value="true" />
		<property name="enableSubPackages" value="false"/>
		<property name="immutable" value="false"/>
		<property name="trimStrings" value="true"/>
	</javaModelGenerator>
	
	<!-- XML文件 -->
	<sqlMapGenerator targetPackage="pers.aidenj.ostrich.mapping" targetProject="Ostrich/src/test/java" >
		<property name="constructorBased" value="false"/>
		<property name="useActualColumnNames" value="true" />
		<property name="enableSubPackages" value="false"/>
		<property name="immutable" value="false"/>
		<property name="trimStrings" value="true"/>
	</sqlMapGenerator>
	
	<!-- 接口 -->
	<javaClientGenerator targetPackage="pers.aidenj.ostrich.mapper" targetProject="Ostrich/src/test/java" type="XMLMAPPER" >
		<property name="constructorBased" value="false"/>
		<property name="useActualColumnNames" value="true" />
		<property name="enableSubPackages" value="false"/>
		<property name="immutable" value="false"/>
		<property name="trimStrings" value="true"/>
	</javaClientGenerator>
	
	<!-- 表 -->

	<table  tableName="admin_information" enableCountByExample="false" enableUpdateByExample="false"
			enableDeleteByExample="false" enableSelectByExample="false"
			selectByExampleQueryId="false">
		<!-- <columnOverride column="???" property="???" /> -->
	</table>
	</context>
</generatorConfiguration>

<!-- 

	jdbcConnection		 数据库链接URL、用户名、密码
	javaModelGenerator		生成模型的包名和位置,就是mybatis 里面用的一些entity 类的存放路径配置
	sqlMapGenerator		生成的映射文件报名和位置,就是对应mybatis 的写sql 语句的xml文件的存放路径配置
	javaClientGenerator		生成DAO的包名和位置,就是mybatis 里面dao 接口的存放路径
	table	这个配置项是配置在项目中操作的数据库表

 -->

*最简单的事例,如有不对望指正

ibatis映射文件

ibatis映射文件

<p>3. 映射文件 <br />与Hibernate 不同。因为需要人工编写SQL 代码,ibatis 的映射文件一般采 <br />用手动编写(通过Copy/Paste,手工编写映射文件也并没想象中的麻烦)。 <br />针对上面POJO 的映射代码如下: <br />&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt; <br />&lt;!DOCTYPE sqlMap <br />PUBLIC &quot;-//iBATIS.com//DTD SQL Map 2.0//EN&quot; <br />&quot;<a href="http://www.ibatis.com/dtd/sql-map-2.dtd">http://www.ibatis.com/dtd/sql-map-2.dtd</a>&quot;&gt; <br />&lt;sqlMap namespace=&quot;User&quot;&gt; <br />&lt;typeAlias alias=&quot;user&quot; type=&quot;com.ibatis.sample.User&quot;/&gt; <br />&lt;select id=&quot;getUser&quot; <br />parameterClass=&quot;java.lang.String&quot;</p> <p>resultClass=&quot;user&quot;&gt; <br />&lt;![CDATA[ <br />select <br />name, <br />sex <br />from t_user</p> <p>where name = #name# <br />]]&gt; <br />&lt;/select&gt; <br />&lt;update id=&quot;updateUser&quot; <br />parameterClass=&quot;user&quot;&gt; <br />&lt;![CDATA[ <br />UPDATE t_user <br />SET <br />name=#name#, <br />sex=#sex# <br />WHERE id = #id# <br />]]&gt; <br />&lt;/update&gt; <br />&lt;insert id=&quot;insertUser&quot; <br />parameterClass=&quot;user&quot; <br />&gt; <br />INSERT INTO t_user ( <br />name, <br />sex) <br />VALUES ( <br />#name#, <br />#sex# <br />) <br />&lt;/insert&gt; <br />&lt;delete id=&quot;deleteUser&quot; <br />parameterClass=&quot;java.lang.String&quot;&gt; <br />delete from t_user <br />where id = #value# <br />&lt;/delete&gt; <br />&lt;/sqlMap&gt; <br />从上面的映射文件可以看出,通过&lt;insert&gt;、&lt;delete&gt;、&lt;update&gt;、 <br />&lt;select&gt;四个节点,我们分别定义了针对TUser 对象的增删改查操作。在这 <br />四个节点中,我们指定了对应的SQL 语句,以update 节点为例: <br />…… <br />&lt;update id=&quot;updateUser&quot; ⑴ <br />parameterClass=&quot;user&quot;&gt; ⑵ <br />&lt;![CDATA[ ⑶</p> <p>UPDATE t_user ⑷ <br />SET (</p> <p>IBATIS Developer’s Guide Version 1.0 <br />name=#name#, ⑸ <br />sex=#sex# ⑹ <br />) <br />WHERE id = #id# ⑺ <br />]]&gt; <br />&lt;/update&gt; <br />…… <br />⑴ ID <br />指定了操作ID,之后我们可以在代码中通过指定操作id 来执行此节点所定 <br />义的操作,如: <br />sqlMap.update(&quot;updateUser&quot;,user); <br />ID 设定使得在一个配置文件中定义两个同名节点成为可能(两个update 节 <br />点,以不同id 区分) <br />⑵ parameterClass <br />指定了操作所需的参数类型,此例中update 操作以 <br />com.ibatis.sample.User 类型的对象作为参数,目标是将提供的User <br />实例更新到数据库。 <br />parameterClass=&quot;user&quot;中,user 为“com.ibatis.sample.User” <br />类的别名,别名可通过typeAlias 节点指定,如示例配置文件中的: <br />&lt;typeAlias alias=&quot;user&quot; type=&quot;com.ibatis.sample.User&quot;/&gt; <br />⑶ &lt;![CDATA[……]]&gt; <br />通过&lt;![CDATA[……]]&gt;节点,可以避免SQL 中与XML 规范相冲突的字符对 <br />XML 映射文件的合法性造成影响。 <br />⑷ 执行更新操作的SQL,这里的SQL 即实际数据库支持的SQL 语句, 将由</p> <p>ibatis 填入参数后交给数据库执行。 <br />⑸ SQL 中所需的用户名参数, <br />“#name#”在运行期会由传入的user 对象的name <br />属性填充。 <br />⑹ SQL 中所需的用户性别参数“#sex#”, 将在运行期由传入的user 对象的 <br />sex 属性填充。 <br />⑺ SQL 中所需的条件参数“#id#”, 将在运行期由传入的user 对象的id 属性 <br />填充。 <br />对于这个示例,ibatis 在运行期会读取id 为“updateUser”的update 节点 <br />的SQL 定义,并调用指定的user 对象的对应getter 方法获取属性值,并用此 <br />属性值,对SQL 中的参数进行填充后提交数据库执行。 <br />此例对应的应用级代码如下,其中演示了的基本使用方法: <br />String resource =&quot;com/ibatis/sample/SqlMapConfig.xml&quot;; <br />Reader reader; <br />ibatis SQLMap</p> <p>reader = Resources.getResourceAsReader(resource); <br />XmlSqlMapClientBuilder xmlBuilder = <br />new XmlSqlMapClientBuilder(); <br />SqlMapClient sqlMap = xmlBuilder.buildSqlMap(reader); <br />//sqlMap系统初始化完毕,开始执行update操作 <br />try{ <br />sqlMap.startTransaction(); <br />User user = new User(); <br />user.setId(new Integer(1)); <br />user.setName(&quot;Erica&quot;); <br />user.setSex(new Integer(1)); <br />sqlMap.update(&quot;updateUser&quot;,user); <br />sqlMap.commitTransaction(); <br />finally{ <br />sqlMap.endTransaction(); <br />} <br />其中,SqlMapClient 是ibatis 运作的核心,所有操作均通过SqlMapClient <br />实例完成。 <br />可以看出,对于应用层而言,程序员面对的是传统意义上的数据对象,而非JDBC <br />中烦杂的ResultSet,这使得上层逻辑开发人员的工作量大大减轻,同时代码更 <br />加清晰简洁。 <br />数据库操作在映射文件中加以定义,从而将数据存储逻辑从上层逻辑代码中独立 <br />出来。 <br />而底层数据操作的SQL 可配置化,使得我们可以控制最终的数据操作方式,通过 <br />SQL 的优化获得最佳的数据库执行效能,这在依赖SQL 自动生成的“全自动”ORM</p> <p>机制中是所难以实现的。</p>

Java-MyBatis-MyBatis3-XML映射文件:select

Java-MyBatis-MyBatis3-XML映射文件:select

ylbtech-Java-MyBatis-MyBatis3-XML映射文件:select

 

1.返回顶部
1、

select

查询语句是 MyBatis 中最常用的元素之一,光能把数据存到数据库中价值并不大,只有还能重新取出来才有用,多数应用也都是查询比修改要频繁。对每个插入、更新或删除操作,通常间隔多个查询操作。这是 MyBatis 的基本原则之一,也是将焦点和努力放在查询和结果映射的原因。简单查询的 select 元素是非常简单的。比如:

<select id="selectPerson" parameterType="int" resultType="hashmap">
  SELECT * FROM PERSON WHERE ID = #{id}
</select>

这个语句被称作 selectPerson,接受一个 int(或 Integer)类型的参数,并返回一个 HashMap 类型的对象,其中的键是列名,值便是结果行中的对应值。

注意参数符号:

#{id}

这就告诉 MyBatis 创建一个预处理语句(PreparedStatement)参数,在 JDBC 中,这样的一个参数在 SQL 中会由一个“?”来标识,并被传递到一个新的预处理语句中,就像这样:

// 近似的 JDBC 代码,非 MyBatis 代码...
String selectPerson = "SELECT * FROM PERSON WHERE ID=?";
PreparedStatement ps = conn.prepareStatement(selectPerson);
ps.setInt(1,id);

当然,使用 JDBC 意味着需要更多的代码来提取结果并将它们映射到对象实例中,而这就是 MyBatis 节省你时间的地方。参数和结果映射还有更深入的细节。这些细节会分别在后面单独的小节中呈现。

select 元素允许你配置很多属性来配置每条语句的作用细节。

<select
  id="selectPerson"
  parameterType="int"
  parameterMap="deprecated"
  resultType="hashmap"
  resultMap="personResultMap"
  flushCache="false"
  useCache="true"
  timeout="10"
  fetchSize="256"
  statementType="PREPARED"
  resultSetType="FORWARD_ONLY">

 

Select &#x5143;&#x7d20;&#x7684;&#x5c5e;&#x6027;
属性 描述
id 在命名空间中唯一的标识符,可以被用来引用这条语句。
parameterType 将会传入这条语句的参数类完全限定名或别名。这个属性是可选的,因为 MyBatis 可以通过类型处理器(TypeHandler) 推断出具体传入语句的参数,默认值为未设置(unset)。
parameterMap 这是引用外部 parameterMap 的已经被废弃的方法。请使用内联参数映射和 parameterType 属性。
resultType 从这条语句中返回的期望类型的类的完全限定名或别名。 注意如果返回的是集合,那应该设置为集合包含的类型,而不是集合本身。可以使用 resultType 或 resultMap,但不能同时使用。
resultMap 外部 resultMap 的命名引用。结果集的映射是 MyBatis 最强大的特性,如果你对其理解透彻,许多复杂映射的情形都能迎刃而解。可以使用 resultMap 或 resultType,但不能同时使用。
flushCache 将其设置为 true 后,只要语句被调用,都会导致本地缓存和二级缓存被清空,默认值:false。
useCache 将其设置为 true 后,将会导致本条语句的结果被二级缓存缓存起来,默认值:对 select 元素为 true。
timeout 这个设置是在抛出异常之前,驱动程序等待数据库返回请求结果的秒数。默认值为未设置(unset)(依赖驱动)。
fetchSize 这是一个给驱动的提示,尝试让驱动程序每次批量返回的结果行数和这个设置值相等。 默认值为未设置(unset)(依赖驱动)。
statementType STATEMENT,PREPARED 或 CALLABLE 中的一个。这会让 MyBatis 分别使用 Statement,PreparedStatement 或 CallableStatement,默认值:PREPARED。
resultSetType FORWARD_ONLY,SCROLL_SENSITIVE, SCROLL_INSENSITIVE 或 DEFAULT(等价于 unset) 中的一个,默认值为 unset (依赖驱动)。
databaseId 如果配置了数据库厂商标识(databaseIdProvider),MyBatis 会加载所有的不带 databaseId 或匹配当前 databaseId 的语句;如果带或者不带的语句都有,则不带的会被忽略。
resultOrdered 这个设置仅针对嵌套结果 select 语句适用:如果为 true,就是假设包含了嵌套结果集或是分组,这样的话当返回一个主结果行的时候,就不会发生有对前面结果集的引用的情况。 这就使得在获取嵌套的结果集的时候不至于导致内存不够用。默认值:false。
resultSets 这个设置仅对多结果集的情况适用。它将列出语句执行后返回的结果集并给每个结果集一个名称,名称是逗号分隔的。
2、
2.返回顶部
 
3.返回顶部
 
4.返回顶部
 
5.返回顶部
1、
http://www.mybatis.org/mybatis-3/zh/sqlmap-xml.html#select
2、
 
6.返回顶部
 
warn 作者:ylbtech
出处:http://ylbtech.cnblogs.com/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

Java-MyBatis-MyBatis3-XML映射文件:XML映射文件

Java-MyBatis-MyBatis3-XML映射文件:XML映射文件

ylbtech-Java-MyBatis-MyBatis3-XML映射文件:XML映射文件

1、

XML 映射文件

MyBatis 的真正强大在于它的映射语句,这是它的魔力所在。由于它的异常强大,映射器的 XML 文件就显得相对简单。如果拿它跟具有相同功能的 JDBC 代码进行对比,你会立即发现省掉了将近 95% 的代码。MyBatis 为聚焦于 SQL 而构建,以尽可能地为你减少麻烦。

SQL 映射文件只有很少的几个顶级元素(按照应被定义的顺序列出):

  • cache – 对给定命名空间的缓存配置。
  • cache-ref – 对其他命名空间缓存配置的引用。
  • resultMap – 是最复杂也是最强大的元素,用来描述如何从数据库结果集中来加载对象。
  • parameterMap – 已被废弃!老式风格的参数映射。更好的办法是使用内联参数,此元素可能在将来被移除。文档中不会介绍此元素。
  • sql – 可被其他语句引用的可重用语句块。
  • insert – 映射插入语句
  • update – 映射更新语句
  • delete – 映射删除语句
  • select – 映射查询语句

下一部分将从语句本身开始来描述每个元素的细节。

2、

1.返回顶部
 
2.返回顶部
 
3.返回顶部
 
4.返回顶部
 
5.返回顶部
1、
http://www.mybatis.org/mybatis-3/zh/sqlmap-xml.htm
2、
 
6.返回顶部
 
warn 作者:ylbtech
出处:http://ylbtech.cnblogs.com/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

我们今天的关于mybatis映射文件深入mybatis 映射文件的分享就到这里,谢谢您的阅读,如果想了解更多关于eclipse中mybatis generator插件生成mybatis映射文件、ibatis映射文件、Java-MyBatis-MyBatis3-XML映射文件:select、Java-MyBatis-MyBatis3-XML映射文件:XML映射文件的相关信息,可以在本站进行搜索。

本文标签: