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;