多个xml文件如果有相同的id(一般是针对不同的实体类会有不同的xml),会用命名空间namespace进行区分。如果是Mapper动态代理开发,则为mapper接口的全路径(com.xxx.mapper.UserMapper)
查询代码如下:
public void testFindUserById() throws Exception{
//加载核心配置文件
String resource = "sqlMapConfig.xml";
InputStream in = Resources.getResourceAsStream(resource);
//创建SqlSessionFactory
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder.build(in);
//创建SqlSession
SqlSession sqlSession = sqlSessionFactory.openSession();
//执行Sql语句
User user = sqlSession.selectOne("test.findUserById", 1);
System.out.println(user);
}
如果是插入更新和删除需要提交事务,加上如下代码:
sqlSession.commit();
select LAST_INSERT_ID()
insert into user (username, birthday, address, sex)
values
(#{username}, #{birthday}, #{address}, #{sex})
如果id类型是varchar或者uuid,则order应为before,因为数据库是先生成id再插入数据。
别名是扫描包及其子包下所有的类,按照如下配法,mapper.xml中别名的使用是该类的类名,头字母大小写都可以识别。
当进行多表查询的一对一映射时,属性名和列名完全相同也需要写出,否则无法映射。
单表查询可省略属性名和列明完全相同的,resultMap中只需要配一个不同的属性。
多表一对一映射resultMap不能省略列明和属性名相同的。
创建表的语句没有相关约束,只要声明主键不为空即可,重点在于插入语句
select nvl(max(id),0)+1 from bank_table_info
insert into ${dataMap.table_name} (id,
${key}
values (#{id},
#{dataMap[${key}]}