MyBatis01_查询

119 阅读1分钟

SSM: Spring、Spring、MyBatis MyBatis是属于持久层(DAO层)的框架,封装了JDBC的很多操作细节,简化DAO层的代码

准备工作 - 依赖

在pom.xml 中添加依赖

<dependency>
    <groupId>org.mybatis</groupId>
    <artifactId>mybatis</artifactId>
    <version>3.5.5</version>
</dependency>
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>5.1.49</version>
</dependency>

准备工作 - 核心配置

在resource下面创建文件 mybatis-config.xml 如果出现报错 点击fetch 修复一波 “URI is not registered(Settings | Languages&Frameworks | Schemas and DTDS)”

<?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">

环境配置 事务配置 数据库配置

<?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>
    <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://localhost:3306/xr"/>
                <property name="username" value="root"/>
                <property name="password" value="root"/>
            </dataSource>
        </environment>
    </environments>

    <mappers>
        <mapper resource="mappers/skill.xml" />
    </mappers>


</configuration>

transactionManager的type为JDBC,使用JDBC来管理事务 dataSource的type为POOLED 才用连接池的方式管理数据库连接

查询 - 实体映射

新建实体映射配置文件(可以放到mappers 文件夹下,比如 mappers/skill.xml) Bean的路径一定不要错了 com.mj.bean.Skill

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="skill">
    <select id="list" resultType="com.mj.bean.Skill">
        select *from skill
    </select>
</mapper>

创建Session

try (Reader reader = Resources.getResourceAsReader("mybatis-config.xml")) {
    SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
    SqlSessionFactory factory = builder.build(reader);
    try (SqlSession session = factory.openSession()){
        List<Skill> skills = session.selectList("skill.list");
        for (Skill skill : skills) {
            System.out.println(skill);
        }
    }
}

配置 mapUnderscoreToCamelCase

在mybatis-config.xml中配置驼峰命名自动映射,比如从数据列名my_age映射到Java属性名myAge

<settings>
    <!-- 数据库:my_first_name -> Java:myFirstName -->
    <setting name="mapUnderscoreToCamelCase" value="true"/>
    <!-- 打印日志信息 -->
    <!--        <setting name="logImpl" value="STDOUT_LOGGING" />-->
</settings>

resultMap 每个字段分别对应

<!--    方式2 -->
    <resultMap id="rmSkill" type="com.mj.bean.Skill">
<!--        id 、name 、levle 可以省略-->
        <result property="id" column="id"/>
        <result property="createdTime" column="created_time"/>
        <result property="name" column="name"/>
        <result property="level" column="level"/>
    </resultMap>
    <select id="list" resultMap="rmSkill">
        select *from skill
    </select>

多表关联

手动改company映射

用的是xr 的company表 和 exprience表 (可以手动加几条数据)

SELECT
	experience.*,company.*
	FROM 
	experience  JOIN company ON experience.company_id = company.id; 
SELECT
	experience.*,
	company.id companyId,
	company.name companyName
	FROM 
	experience  JOIN company ON experience.company_id = company.id; 

优化表名

	SELECT
	t1.*,
	t2.id t2_id,
	t2.name t2_name
	FROM
	experience t1
	JOIN company t2 ON t1.company_id = t2.id;

image.png

image.png

image.png

优化一波

image.png