XML配置Mybatis
1. 配置mybatis
MyBatis的配置文件的顶层结构如下:
- properties(属性)
- settings(设置)
- typeAliases(类型别名)
- typeHandlers(类型处理器)
- objectFactory(对象工厂)
- plugins(插件)
- environments(环境配置)
- environment(环境变量)
- transactionManager(事务管理器)
- dataSource(数据源)
- databaseIdProvider(数据库厂商标识)
- mappers(映射器)
创建mybatis-config.xml文件,内容如下:
xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"https://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<settings>
<setting name="mapUnderscoreToCamelCase" value="true"/>
</settings>
<typeAliases>
<typeAlias alias="User" type="com.rocket.demo.entity.User"/>
</typeAliases>
<environments default="dev">
<environment id="dev">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="com.mysql.cj.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://192.168.101.102:3306/sql_exercise"/>
<property name="username" value="root"/>
<property name="password" value="123456"/>
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="dbMapper/UserMapper.xml"/>
</mappers>
</configuration>
mapUnderscoreToCamelCase
配置的是是否开启驼峰命名自动映射,即从经典数据库列名A_COLUMN映射到经典Java属性名aColumn, 默认是false。typeAlias
: 给全限定类名取一个简短的名字。它仅用于XML配置。environments
: MyBatis可以配置成适应多种环境,比如开发、测试和生产环境需要有不同的配置。transactionManager
: 在MyBatis中有两种类型的事务管理器: JDBC(事务基于JDBC实现), MANAGED(通过整合Spring,交由Spring管理)。dataSource
: 数据源类型有三种:UNPOOLED(每次请求时打开和关闭连接)|POOLED(使用数据连接池)|JNDI(常见于应用服务器这类容器中使用)。mappers
: 定义SQL映射语句位置,它支持4种方式:
xml
<mappers>
<!-- 使用相对于类路径的资源引用 -->
<mapper resource="org/mybatis/builder/AuthorMapper.xml"/>
<!-- 使用完全限定资源定位符(URL) -->
<mapper url="file:///var/mappers/AuthorMapper.xml"/>
<!-- 使用映射器接口实现类的完全限定类名, SQL写在接口类上面 -->
<mapper class="org.mybatis.builder.AuthorMapper"/>
<!-- 将包内的映射器接口全部注册为映射器, SQL写在接口类上面 -->
<package name="org.mybatis.builder"/>
</mappers>
2. 创建Maven工程
添加pom依赖:
xml
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.19</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.33</version>
</dependency>
3. 创建Mapper和实体类
java
package com.rocket.demo.dao;
import com.rocket.demo.entity.User;
import java.util.List;
public interface UserMapper {
List<User> selectUser();
}
java
package com.rocket.demo.entity;
import java.util.Date;
public class User {
private int id;
private String userName;
private int age;
private int sex;
private Date createTime;
......get/set/toString方法
}
4. 创建Mapper映射文件
MyBatis的强大之处在于它的语句映射,和传统JDBC相比,让用户能更专注于SQL代码,SQL映射文件结构如下:
- cache:该命名空间的缓存配置。
- cache-ref:引用其它命名空间的缓存配置。
- resultMap:描述如何从数据库结果集中加载对象,是最复杂也是最强大的元素。
- sql:可被其它语句引用的可重用语句块。
- insert:映射插入语句。
- update:映射更新语句。
- delete:映射删除语句。
- select:映射查询语句。
创建UserMapper.xml文件如下:
xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"https://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.rocket.demo.dao.UserMapper">
<select id="selectUser" resultType="User">
select * from t_user
</select>
</mapper>
select
: 用于配置查询语句,id表示UserMapper接口的方法名,resultType表示返回结果类型,如需参数使用#{参数名}
表示。
5. 构建SqlSessionFactory
SqlSessionFactoryBuilder从XML配置文件构建SqlSessionFactory实例。SqlSessionFactory
java
public static void main(String[] args) throws IOException {
String resource = "mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
try (SqlSession session = sqlSessionFactory.openSession()) {
UserMapper mapper = session.getMapper(UserMapper.class);
List<User> users = mapper.selectUser();
System.out.println(users);
}
}
运行结果: