MyBatis
MyBatis配置解析
三、配置解析
3.1 核心配置文件
- mybatis-config.xml 系统核心配置文件
- MyBatis 的配置文件包含了会深深影响 MyBatis 行为的设置和属性信息。
能配置的内容如下:
3.2、environments元素
- 配置MyBatis的多套运行环境,将SQL映射到多个不同的数据库上,必须指定其中一个为默认运行环境(通过default指定)
- 事务管理器的配置:transactionManager
- 数据源的配置:dataSource
3.3、mappers元素
定义的SQL映射语句,告诉mybatis去哪查找SQL的语句,主要提供三种方式加载映射文件
<!-- 使用相对于类路径的资源引用 -->
<mappers>
<mapper resource="org/mybatis/builder/PostMapper.xml"/>
</mappers>
<!-- 使用完全限定资源定位符(URL) -->
<mappers>
<mapper url="file:///var/mappers/AuthorMapper.xml"/>
</mappers>
<!-- 使用映射器接口实现类的完全限定类名 需要配置文件名称和接口名称一致,并且位于同一目录下 -->
<mappers>
<mapper class="org.mybatis.builder.AuthorMapper"/>
</mappers>
<!-- 将包内的映射器接口实现全部注册为映射器 但是需要配置文件名称和接口名称一致,并且位于同一目录下 -->
<mappers>
<package name="org.mybatis.builder"/>
</mappers>
3.3.2、Mapper文件
<?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="com.kuang.mapper.UserMapper">
</mapper>
- namespace和子元素的id联合保证唯一 , 区别不同的mapper
- 绑定DAO接口
namespace的命名必须跟某个接口同名
接口中的方法与映射文件中sql语句id应该一一对应 - namespace命名规则 : 包名+类名
3.4、Properties优化
数据库这些属性都是可外部配置且可动态替换的,既可以在典型的 Java 属性文件中配置,亦可通过properties 元素的子元素来传递
第一步 ; 在资源目录下新建一个db.properties
driver=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/mybatis?useSSL=true&useUnicode=true&characterEncoding=utf8
username=root
password=123456
第二步 : 将文件导入properties 配置文件
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="${driver}"/>
<property name="url" value="${url}"/>
<property name="username" value="${username}"/>
<property name="password" value="${password}"/>
</dataSource>
</environment>
</environments>
3.5、typeAliases优化
类型别名是为 Java 类型设置一个短的名字。它只和 XML 配置有关,存在的意义仅在于用来减少类完全限定名的冗余。
<typeAliases>
<typeAlias type="com.czx.pojo.User" alias="User"/>
</typeAliases>
3.6、setting:全局的参数配置
四、使用注解开发
- @select操作
@Select("select * from user")
List<User> getUsers();
- @Insert操作
@Insert("insert into user values(#{id},#{name},#{pwd})")
int addUser(User user);
@update操作
@Update("update user set name=#{name},pwd=#{pwd} where id = #{id}")
int updateUser(User user);
@Delete操作
@Delete("delete from user where id = #{id}")
int deleteUser(@Param("id")int id);
测试
import com.czx.dao.UserMapper;
import com.czx.pojo.User;
import com.czx.utils.MybatisUtils;
import org.apache.ibatis.session.SqlSession;
import org.junit.Test;
import java.util.List;
public class UserMapperTest {
@Test
public void test0(){
SqlSession sqlSessionFactory = MybatisUtils.getSqlSessionFactory();
UserMapper mapper = sqlSessionFactory.getMapper(UserMapper.class);
List<User> userList = mapper.getUsers();
for (User user:userList) {
System.out.println(user);
}
sqlSessionFactory.close();
}
@Test
public void test2(){
SqlSession sqlSessionFactory = MybatisUtils.getSqlSessionFactory();
UserMapper mapper = sqlSessionFactory.getMapper(UserMapper.class);
int i = mapper.addUser(new User(6,"hello","123"));
System.out.println(i);
sqlSessionFactory.close();
}
}