天天看点

Mybatis 结果集映射 配置文件获取查询结果

获取查询结果

mybatis概念

  • 持久化 就是数据在瞬时和持久两个状态之间的转换
  • ORM(Object Relational Mapping) 对象-关系映射

    从数据库读取数据存到pojo的类中

    或者把类中的属性值映射到数据库的表字段

mybatis-config.xml系统核心配置文件

configuration 配置
    properties   可以配置在Java属性配置文件中
    settings    修改 MyBatis 在运行时的行为方式
    typeAliases   为 Java 类型命名一个别名(简称)
    typeHandlers   类型处理器
    objectFactory   对象工厂
    plugins   插件
    environments   环境
    	environment   环境变量
    		transactionManager  事务管理器
    		dataSource   数据源
    mappers    映射器

           

MyBatis的核心对象

  1. SqlSessionFactoryBuilder 使用build()方法创建sqlSessionFoctory工厂对象
  2. SqlSessionFactory 创建sqlSession对象的工厂
  3. SqlSession 用于执行sql语句
  4. Resources 读取配置文件

mybatis-config.xml配置文件

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">

<configuration>
	<!-- 导入外部properties配置文件 -->
	<properties resource="database.properties">
		<property name="driver" value="com.mysql.jdbc.Driver" />
		<property name="url"
			value="jdbc:mysql://127.0.0.1:3306/smbms?useUnicode=true&amp;characterEncoding=utf-8" />
		<property name="username" value="root" />
		<property name="password" value="ok" />
	</properties>

	<!-- 工具设置 -->
	<settings>
				<!-- log4j日志配置 -->
		<setting name="logImpl" value="LOG4J" />
		
				<!-- 类属性自动映射  FULL为完全自动映射  PARTIAL为只映射没有定义的  NONE为取消映射  -->
		<setting name="autoMappingBehavior" value="FULL" />

				<!-- 缓存配置 -->
		<setting name="cacheEnabled" value="true" />
	</settings>

	<!-- pojo类别名配置 -->
	<typeAliases>
		<!-- 单独设置一个类的别名 -->
		<typeAlias type="pojo.User" alias="user" />
		<!-- 设置这个包下的所有类自动识别别名 给个最顶头的父包就行 如:pojo.User 自动识别为:user -->
		<package name="pojo" />
	</typeAliases>

	<!-- 运行环境配置 -->
	<environments default="dev">
		<environment id="dev">
			<!-- 事务处理类型 -->
			<transactionManager type="JDBC"></transactionManager>
			<!-- 配置数据源 type:数据源类型 -->
			<dataSource type="POOLED">
				<!-- 设置驱动 -->
				<property name="driver" value="${driver}" />
				<!-- 设置连接字符串 -->
				<property name="url" value="${url}" />
				<!-- 用户名 -->
				<property name="username" value="${username}" />
				<!-- 密码 -->
				<property name="password" value="${password}" />
			</dataSource>
		</environment>
	</environments>

	<!-- 映射文件注册 -->
	<mappers>
		<mapper resource="dao/user/UserMapper.xml" />
	</mappers>
</configuration>
           

UserMapper.xml配置文件

<!-- 实体类里含有其他实体类对象属性 -->
<mapper namespace="dao.user.UserMapper">
	<!-- 相同的SQL语句提取 -->
	<sql id="selectuser">
		SELECT * FROM smbms_user
	</sql>
	<!-- 在其他地方用include引入 -->
	<select id="getUserListById" resultType="user">
		<include refid="selectuser"/> WHERE id = #{id}
	</select>
	
	<!--  缓存:全局配置 eviction是缓存类型 flushInterval是刷新时间 size是大小(kb) readOnly是只读模式 -->
	<cache eviction="FIFO" flushInterval="60000" size="512" readOnly="true" />

	<select id="getUserList2" resultMap="getUserList2Map">
		SQL语句
	</select>
	<!-- 单个对象 -->
	<!-- type是返回数据映射的实体类类型   id对应上面的resultMap -->
	<resultMap type="User" id="getUserList2Map">
		<!-- column对应SQL语句的字段    property对应映射实体类的属性 -->
		<result column="userCode" property="userCode" />
		<result column="userName" property="userName" />
		<!-- property是对象属性的名称 javaType为对象属性的类型 -->
		<association property="role" javaType="pojo.Role">
			<result column="roleName" property="roleName" />
		</association>
	</resultMap>

	<!-- 实体类类里面含有其他实体类类型的集合属性 -->
	<resultMap type="User" id="getUserById2Map">
		<result column="userCode" property="userCode" />
		<result column="userName" property="userName" />
		<!-- property是集合属性的名称 ofType是此集合括号里的类型名称 -->
		<collection property="addressList" ofType="pojo.Address">
			<result column="contact" property="contact" />
			<result column="addressDesc" property="addressDesc" />
			<result column="tel" property="tel" />
		</collection>
	</resultMap>
</mapper>
           

单个对象结构结果集映射

<!-- type是返回数据映射的实体类类型   id对应上面的resultMap -->
<resultMap type="User" id="getUserList2Map">
	<!-- column对应SQL语句的字段    property对应映射实体类的属性 -->
	<result column="userCode" property="userCode" />
	<result column="userName" property="userName" />
	<!-- property是对象属性的名称 javaType为对象属性的类型 -->
	<association property="role" javaType="pojo.Role">
		<result column="roleName" property="roleName" />
	</association>
</resultMap>
           

集合结果集映射

<!-- 实体类类里面含有其他实体类类型的集合属性 -->
<resultMap type="User" id="getUserById2Map">
	<result column="userCode" property="userCode" />
	<result column="userName" property="userName" />
	<!-- property是集合属性的名称 ofType是此集合括号里的类型名称 -->
	<collection property="addressList" ofType="pojo.Address">
		<result column="contact" property="contact" />
		<result column="addressDesc" property="addressDesc" />
		<result column="tel" property="tel" />
	</collection>
</resultMap>
           

SQL语句提取

<!-- 相同的SQL语句提取 -->
<sql id="selectuser">
	SELECT * FROM smbms_user
</sql>
<!-- 在其他地方用 include 引入 -->
<select id="getUserListById" resultType="user">
	<include refid="selectuser"/> WHERE id = #{id}
</select>
           

pojo 类的作用

  1. 用于把数据库的数据读取出来用java对象来保存
  2. 把存在的java对象持久化保存到数据库中

配置文件里的SQL语句

  1. 模糊查询:LIKE CONCAT(’%’,#{值},’%’)
  2. 分页查询:LIMIT #{页码},#{每页显示数} 在调用方法传参时用 ( (页码-1)*每页显示数 , 每页显示数 ) 一一对应