Mybatis的映射、核心配置
手动实现Dao的方式(了解)
代理Dao的方式:
只需要写Dao层的接口即可 不需要写实现类 让mybatis去动态生成接口的实现类
Mapper接口开发需要遵循以下规范:
1、Mapper.xml文件中的namespace与mapper接口的全限定名相同
2、Mapper接口方法名和Mapper.xml中定义的每个statement的id相同
3、Mapper接口方法的输入参数类型和mapper.xml中定义的每个sql的parameterType的类型相同
4、Mapper接口方法的输出参数类型和mapper.xml中定义的每个sql的resultType的类型相同
@test
public void test1() throws IOException{
InputStream inputStream = Resources.getResourceAsStream("sqlMapConfig.xml");
SqlSessionFactory sessionFactory=new SqlSessionFactoryBuilder().build(inputStream);
sqlSession = sessionFactory.openSession();
userMapper = sqlSession.getMapper(UserMapper.class);//获取接口的代理对象
//使用代理Dao的方式查询所有
List<User> all=userMapper.findAll();
for(User user:all){
System.out.println(user);
}
}
映射配置文件中的namespace为什么必须要和接口的全限定类名一样?
首先我们在加载核心配置文件时 可以获取映射配置文件
Mybatis就会去加载映射配置文件 解析里面的namespace和每个Statememt
将解析的结果保持到Map中 Map的key是namespace+id Map的Value是Mapper对象(SQL,结果集)
当我们在使用代理对象去调用接口中的方法时
Mybatis可以使用发射去拿到该调用方法的名称和当前类的全限定类名
然后将全限定类名+方法名称 组成一个key 再然后去Map中查找对应的key
如果有就可以找到对应的Value 而Value中就有要执行的SQL和封装的结果集
所以你的namespace必须和接口的全限定类名一致 你的id必须和接口中的方法名称一致
<insert id="saveUser" parameterTpye="user">
<selectKey keyProperty="id" keyComlumn="id" resultType="int" order="AFTER">
select last_insert_ID()
</selectKey>
insert into mybatis values (#{id},#{username},#{password})
</insert>
-、selectKey标签可以用来获取新插入数据的主键
-、keyProperty属性是指实体类中主键的属性名称
-、KeyColumn属性是指表中主键的字段名称
-、resultType属性是指主键的数据类型
-、order是决定获取主键的函数是在插入语句之前执行还是之后执行
<resultMap id="xxoo" type="user1">
<id property="uid" column="id"/>
<result property="uname" column="username"/>
<result property="password" column="password"/>
</resultMap>
resultMap标签是用来描述实体类中的属性和表中字段的对应关系的
id是这个resultMap的标志 要求在同一个映射文件中要唯一
type属性是用来指定这个resultMap要描述的实体对象是谁
<id>标签是用来描述非主键的对应关系
<result>标签是用来描述非主键的对应关系
property属性是用来指定实体中的属性名称
column属性是用来指定表中的字段名称