MyBatis配置文件
MyBatis主配置文件, 只有一份, 名字任意, 一般为mybatis-config.xml
MyBatis映射文件, 有多份, 名字一般为XxxMapper.xml
, Xxx表示模型对象
主配置文件
包括 连接池, 事务等 和 全局的配置如关联映射日志, 插件等
<?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>
<!-- 1. 配置数据库环境 -->
<environments default="dev">
<!-- 以后事务管理器和连接池都是交给Spring框架来管理 -->
<environment id="dev">
<!-- ① 事务管理器 -->
<transactionManager type="JDBC" />
<!-- ② 连接池-->
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/mybatis-demo" />
<property name="username" value="root"/>
<property name="password" value="1092568516"/>
</dataSource>
</environment>
</environments>
<!-- 2. 关联映射文件 -->
<mappers>
<mapper resource="com/gx/mybatis/hello/UserMapper.xml" />
</mappers>
</configuration>
约束文件
MyBatis主配置文件的约束文件(mybatis-3.x.x.jar中):org\apache\ibatis\builder\xml\mybatis-3-config.dtd
MyBatis映射文件的约束文件(mybatis-3.x.x.jar中):org\apache\ibatis\builder\xml\mybatis-3-mapper.dtd
xml需要dtd约束, 约束指向网络路径:
- 联网后, 自动缓存路径文件到本地
- 无法联网, 需要配置dtd文件位置
映射文件
映射文件主要包含 该对象的CRUD操作的配置 和 SQL
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!-- 不同的mapper文件, namespace不一样 -->
<mapper namespace="com.gx.mybatis.hello.UserMapper">
<!--
SELECT元素: 用于写查询SQL:
-id属性: 唯一标识, 用于表示某一条SQL语句
id属性和mapper的namespace唯一表示了应用中某一条SQL语句
-parameterType属性: 表示执行SQL需要的参数类型(可以省略)
-resultType: 结果集中的每一条语句封装成什么对象
-->
<select id="get" parameterType="java.lang.Long" resultType="com.gx.mybatis.hello.User">
SELECT * FROM t_user WHERE id = #{id}
</select>
</mapper>
测试代码
public class App {
//get one
@Test
public void testGet() throws Exception{
//1. 从classpath路径去加载全局配置文件: mybatis-config.xml
InputStream in = Resources.getResourceAsStream("mybatis-config.xml");
//2. 创建SqlSessionFactory, 类似DataSource
SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(in);
//3. 创建SqlSession, 类似Connectionx`
SqlSession session = factory.openSession();
//4. 具体操作
User user = session.selectOne("com.gx.mybatis.hello.UserMapper.get", 1l);
System.out.println(user);
//5. 关闭SqlSession
session.close();
}
}
查询全部
测试代码:
//Get all
@Test
public void testGetAll() throws Exception{
//1. 从classpath路径去加载全局配置文件: mybatis-config.xml
InputStream in = Resources.getResourceAsStream("mybatis-config.xml");
//2. 创建SqlSessionFactory, 类似DataSource
SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(in);
//3. 创建SqlSession, 类似Connection
SqlSession session = factory.openSession();
//4. 具体操作
List<User> users = session.selectList("com.gx.mybatis.hello.UserMapper.getAll");
for (User u : users) {
System.out.println(u);
}
//5. 关闭SqlSession
session.close();
}
只有第4步不同
映射文件代码:
<select id="getAll" resultType="com.gx.mybatis.hello.User">
SELECT * FROM t_user
</select>
resultType
属性中的值不用修改, 因为resultType表示的是把结果集每一行封装为什么对象