Mybatis学习(2)
Mybatis Mapper代理开发
1.定义SQL映射文件同名的mapper接口,并且mapper接口和sql映射文件放在同一目录下
因为编译过后的配置文件都在classes中,所以只需要把resouce的目录结构弄成和它的目录结构相同即可在同一目录下。
2. 设置SQL映射文件和namespace属性为Mapper接口全限定名
<mapper namespace="com.itheima.mapper.UserMapper">
<select id="selectAll" resultType="com.itheima.pojo.User">
select * from tb_user;
</select>
</mapper>
3.在Mapper接口中定义方法,方法名就是sql映射文件sql语句的id,并保持参数类型和返回值类型一致
public interface UserMapper {
List<User> selectAll();
}
这里返回值是个List其实是根据Mapper的语义来的,因为查询的是所有的user,所以返回值是个list
<mapper namespace="com.itheima.mapper.UserMapper">
<select id="selectAll" resultType="com.itheima.pojo.User">
select * from tb_user;
</select>
</mapper>
4.编码
- 通过SqlSession的getMapper方法获取Mapper接口的代理对象
- 调用对应方法完成sql的执行
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
List<User> users = mapper.selectAll();
如果Mapper接口名和SQL映射文件名相同,并在同一目录下,则可以通过包扫描方式简化sql映射文件的加载。
<mappers>
<package name="com.itheima.mapper"/>
</mappers>
下面看一下mybatis核心配置文件的属性
先看一下environments配置
<environments default="test">
<environment id="development">
<transactionManager type="JDBC"/>
<!-- 数据连接信息-->
<dataSource type="POOLED">
<property name="driver" value="com.mysql.cj.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost/mybatis?useSSL=false"/>
<property name="username" value="root"/>
<property name="password" value=""/>
</dataSource>
</environment>
<environment id="test">
<transactionManager type="JDBC"/>
<!-- 数据连接信息-->
<dataSource type="POOLED">
<property name="driver" value="com.mysql.cj.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost/mybatis?useSSL=false"/>
<property name="username" value="root"/>
<property name="password" value=""/>
</dataSource>
</environment>
</environments>
假如有多个数据源配置,我们可以更改environments的default来指定数据源。
environments:配置数据库连接环境信息。可以配置多个environment,通过default属性切换不同的environment。
下面看一下类型别名的方式,什么意思呢?
就是我们在写mapper映射文件时,resultType需要一个全类名,我们可以给它起个别名。
<mapper namespace="com.itheima.mapper.UserMapper">
<select id="selectAll" resultType="com.itheima.pojo.User">
select * from tb_user;
</select>
<typeAliases>
<package name="com.itheima.pojo"/>
</typeAliases>
这个配置是什么意思呢?就是把com.itheima.pojo这个包下面的所有实体类,都起一个别名,名字就是类名,不区分大小写。