MyBatis XML 基本用法

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MyBatis XML 基本用法相关的知识,希望对你有一定的参考价值。

参考技术A 微信扫码关注java架构,获取Java面试题和架构师相关题目和视频。

Mybatis基本用法

搭建mybatis环境

1, 导入需要的jar包
  mybatis-*.*.*.jar
  ojdbc6.jar

2, 配置mybatis的总配置文件: mybatis-config.xml
  配置根标签

<!-- 根标签 -->
		<configuration>
			<!-- 
				引入属性文件
				属性文件通常写数据库连接的信息
					username(注意一个问题, 属性文件中不要单独写一个username)
					password
					url
					driverClass
			-->
			<property resource="属性文件所在src下的位置" />

			<!-- 或者直接定义属性值 -->
			<properties>
				<property name="jdbc.username" value="test" />
				<property name="jdbc.password" value="test" />
				<property name="jdbc.driverClassName" value="oracle.jdbc.OracleDriver" />
				<property name="jdbc.url" value="jdbc:oracle:thin:@localhost:1521:orcl" />
			</properties>

			<!-- 为实体类定义一个别名, 如果不定义别名, 在映射文件中就要写这个实体类的全路径名 -->
			<typeAliases>
				<!-- 这个写法取的别名是随意的, 可以自己任意定义 -->
				<!-- <typeAlias type="类名的全路径名" alias="别名"></typeAlias> -->
				<!-- 如果使用下面这个写法, 就是按照mybatis自己定义的规则, 这个包下的所有类的类名就是别名 -->
				<package name="com.model"/>
				<!-- 使用package标签实际是默认扫描model包下的所有的类, 如果在实体类的定义了注解@Alias(value = "..."), 则优先使用注解 -->
			</typeAliases>

			<!-- 配置mybatis的运行环境们 -->
			<environments default="所使用的环境的标签id">
				<environment id="default">
					<!-- 
						配置事务管理器的类型
							JDBC
							MANAGED--(托管, 商业服务器上才有的功能, Tomcat没有)
					-->
					<transactionManager type="JDBC" />
					<!-- 
						POOLED(基于连接池的数据源)
						UNPOOLED(使用普通的数据库连接)
						JNDI(使用应用服务器上的JNDI连接配置数据源, 很少使用)
					-->
					<dataSource type="POOLED">
						<property name="username" value="${属性文件中配置的信息}"></property>
						<property name="password" value="${属性文件中配置的信息}"></property>
						<property name="url" value="${属性文件中配置的信息}"></property>
						<property name="driver" value="${属性文件中配置的信息}"></property>
					</dataSource>
				</envirment>
			</environments>
			<mappers>
				<!-- 挨个写明每个映射文件所在的位置 -->
				<mapper resource="src下mapper映射文件的全路径名">
				<!-- 写明每个映射文件所对应的接口的限定名, package引入的文件一定是接口, 
				所以如果使用这种方式, 必须是使用接口对应映射文件的方式 -->
				<package name="接口所在的包" />
			</mappers>
		</configuration>

3, 新建每个实体类的映射文件...Mapper.xml

<!-- 定义每个实体类的映射文件 -->
  <mapper namespace="唯一的id / 接口的全路径名">
    <select id="被调用的id(唯一) / 需要执行的方法名"></select>
  <insert></insert>
  <update></update>
  <delete></delete>
  </mapper>

  resultType: 类的全路径名 / 定义好的别名
  resultMap: 指定返回结果的集合
  parameterType: 指的是, 进行查询的时候所需要的参数类型

4, 写测试类运行mybatis

MybatisUtil
			两步:
				1, 构建SqlSessionFactory
					InputStream in = Resources.getResourceAsStream("总配置文件所在的src下的路径");
					SqlSessionFactory ssf = new SqlSessionFactoryBuilder().build(in);
				2, 构建SqlSession(注意SqlSession不能以一个class成员变量的身份被返回)
					SqlSession ss = ssf.openSession();
				3, 直接运行
					a: 直接运行映射文件中的sql语句
						ss.select...
						ss.insert...
						ss.update...
						ss.delete...
					b: 使用接口映射配置文件
						ss.getMapper(接口类名.class);
						调用接口的方法

一对一, 一对多查询
1, 一对一
		映射文件中写明resultMap, 这时sql语句一定用关联查询多个表的内容
			<resultMap type="类名" id="...">
				<id property="实体类中成员变量的名字" column="查询结果中的列名" />
				<result property="成员变量的名字" column="查询结果中的列名" />
				...
				<!-- 对象级联 -->
				<result property="major.majorid" column="查询结果中的列名" />
				<result property="major.mname" column="查询结果中的列名" />
			</resultMap>
			<resultMap type="类名" id="...">
				<id property="实体类中成员变量的名字" column="查询结果中的列名" />
				<result property="成员变量的名字" column="查询结果中的列名" />
				...
				<!-- 对象级联 -->
				<association property="major" resultMap="定义好的另一个resultMap" />
			</resultMap>
			<resultMap type="类名" id="...">
				<association property="属性名" select="其他映射文件中的查询语句" />
			</resultMap>
	2, 一对多
			<resultMap type="类名" id="...">
				<collection property="students" select="其他映射文件中的查询语句" />
			</resultMap>

动态sql语句

1, <if>条件
		<if test="key!=null">
			拼接sql语句
		</if>
	2, <choose><when><otherwise>
		<choose>
			<when test="key==‘value‘">
				拼接sql语句
			</when>
			<when test="key==‘value‘">
				拼接sql语句
			</when>
			<otherwise>
				拼接sql语句
			</otherwise>
		</choose>
	3, <where>
		自动添加where关键字
		如果where子句第一句中有 or 或者 and 则删除第一个
	4, <trim>
		功能与<where>类似, 并且提供了前缀, 后缀的添加, 更加灵活
	5, <foreach>
		用来遍历传入的集合参数
			item(定义集合中每个对象的名字), 
			collection(集合的对象的名字), 
			open(定义开始的字符), 
			close(定义结束的字符), 
			separator(定义分割的字符)
	6, <set>
		主要用于update
		自动加上set关键字
		自动剔除最后一个 ","
	7, <sql>
		经常用于一些常用或者固定的语句, 在外面定义一个语句, 在各种标签中引入
		使用include, 相当于直接写在上面
	8, <selectKey>
		用于不支持自增长主键的数据库, 尽量避免写这个东西


	<	<	小于号                                           
	>	>	大于号
	&	&	和
	‘	’	单引号
	"	"	双引号

	<![CDATA[]]>

  

 

 












以上是关于MyBatis XML 基本用法的主要内容,如果未能解决你的问题,请参考以下文章

Mybatis基本用法

MyBatis XML方式的基本用法之多表查询

02—mybatis的基本用法01

MyBatis注解方式基本用法

2.1MyBatis的XML基本配置

mybatis 基本用法