Mybatis 基本原理
应用程序找 Mybatis 要数据
mybatis 从数据库中找来数据
2.1 通过 mybatis-config.xml 定位哪个数据库
2.2 通过 Category.xml 执行对应的 select 语句
2.3 基于 Category.xml 把返回的数据库记录封装在 Category 对象中
2.4 把多个 Category 对象装在一个 Category 集合中
返回一个 Category 集合
mybatis-config.xml,mybatis 配置文件
<?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>
- <typeAliases>
- <package name="com.how2java.pojo"/>
- </typeAliases>
- <environments default="development">
- <environment id="development">
- <transactionManager type="JDBC"/>
- <dataSource type="POOLED">
- <property name="driver" value="com.mysql.jdbc.Driver"/>
- <property name="url" value="jdbc:mysql://xxxx?characterEncoding=UTF-8"/>
- <property name="username" value="root"/>
- <property name="password" value="admin"/>
- </dataSource>
- </environment>
- </environments>
- <mappers>
- <mapper resource="com/how2java/pojo/Category.xml"/>
- </mappers>
- </configuration>
- <typeAliases>
- <package name="com.how2java.pojo"/>
- </typeAliases>
自动扫描 com.how2java.pojo 下的类型, 使得在后续配置文件 Category.xml 中使用 resultType 的时候, 可以直接使用 Category, 而不必写全 com.how2java.pojo.Category
- <mappers>
- <mapper resource="com/how2java/pojo/Category.xml"/>
- </mappers>
映射 Category.xml
- <mapper namespace="com.how2java.pojo">
- <select id="listCategory" resultType="Category">
- select * from category_
- </select>
- </mapper>
id= "listCategory" 进行标示以供后续代码调用
resultType="Category" 表示返回的数据和 Category 关联起来, 这里本应该使用的是 com.how2java.pojo.Category, 但是因为上一步配置了别名, 所以直接使用 Category 就行了
- <select id="getCategory" parameterType="_int" resultType="Category">
- select * from category_ where id= #{id}
- </select>
parameterType: 参数类型, 可为简单类型或对象类型
resultType: 返回类型
调用测试
- package com.how2java;
- import java.io.IOException;
- import java.io.InputStream;
- import java.util.List;
- import org.apache.ibatis.io.Resources;
- import org.apache.ibatis.session.SqlSession;
- import org.apache.ibatis.session.SqlSessionFactory;
- import org.apache.ibatis.session.SqlSessionFactoryBuilder;
- import com.how2java.pojo.Category;
- public class TestMybatis {
- public static void main(String[] args) throws IOException {
- String resource = "mybatis-config.xml";
- InputStream inputStream = Resources.getResourceAsStream(resource);
- SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
- SqlSession session=sqlSessionFactory.openSession();
- List<Category> cs=session.selectList("listCategory");
- for (Category c : cs) {
- System.out.println(c.getName());
- }
- }
- }
根据配置文件 mybatis-config.xml 得到 sqlSessionFactory
- String resource = "mybatis-config.xml";
- InputStream inputStream = Resources.getResourceAsStream(resource);
- SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
然后再根据 sqlSessionFactory 得到 session
SqlSession session=sqlSessionFactory.openSession();
最后通过 session 的 selectList 方法, 调用 sql 语句 listCategory.listCategory 这个就是在配置文件 Category.xml 中那条 sql 语句设置的 id.
执行完毕之后, 得到一个 Category 集合, 遍历即可看到数据.
- List<Category> cs = session.selectList("listCategory");
- for (Category c : cs) {
- System.out.println(c.getName());
- }
resultMap 包含的元素:
- <!--column 不做限制, 可以为任意表的字段, 而 property 须为 type 定义的 pojo 属性 -->
- <resultMap id="唯一的标识" type="映射的 pojo 对象">
- <id column="表的主键字段, 或者可以为查询语句中的别名字段" jdbcType="字段类型" property="映射 pojo 对象的主键属性" />
- <result column="表的一个字段 (可以为任意表的一个字段)" jdbcType="字段类型" property="映射到 pojo 对象的一个属性 (须为 type 定义的 pojo 对象中的一个属性)"/>
- <association property="pojo 的一个对象属性" javaType="pojo 关联的 pojo 对象">
- <id column="关联 pojo 对象对应表的主键字段" jdbcType="字段类型" property="关联 pojo 对象的主席属性"/>
- <result column="任意表的字段" jdbcType="字段类型" property="关联 pojo 对象的属性"/>
- </association>
- <!-- 集合中的 property 须为 oftype 定义的 pojo 对象的属性 -->
- <collection property="pojo 的集合属性" ofType="集合中的 pojo 对象">
- <id column="集合中 pojo 对象对应的表的主键字段" jdbcType="字段类型" property="集合中 pojo 对象的主键属性" />
- <result column="可以为任意表的字段" jdbcType="字段类型" property="集合中的 pojo 对象的属性" />
- </collection>
- </resultMap>
来源: http://www.bubuko.com/infodetail-3283143.html