获取查询结果
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的核心对象
- SqlSessionFactoryBuilder 使用build()方法创建sqlSessionFoctory工厂对象
- SqlSessionFactory 创建sqlSession对象的工厂
- SqlSession 用于执行sql语句
- 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&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 类的作用
- 用于把数据库的数据读取出来用java对象来保存
- 把存在的java对象持久化保存到数据库中
配置文件里的SQL语句
- 模糊查询:LIKE CONCAT(’%’,#{值},’%’)
- 分页查询:LIMIT #{页码},#{每页显示数} 在调用方法传参时用 ( (页码-1)*每页显示数 , 每页显示数 ) 一一对应