多个xml文件若是有相同的id(通常是针对不一样的实体类会有不一样的xml),会用命名空间namespace进行区分。若是是Mapper动态代理开发,则为mapper接口的全路径(com.xxx.mapper.UserMapper)java
<mapper namespace="test"> <!-- 经过id查询一个用户 --> <select id="findUserById" parameterType="Integer" resultType="com.xxx.User"> select * from user where id = #{v} </select> </mapper>
查询代码以下:程序员
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); }
若是是插入更新和删除须要提交事务,加上以下代码:sql
sqlSession.commit();
<insert id="insertUser" parameterType="com.xxx.User"> <selectKey keyProperty="id" resultType="Integer" order="AFTER"> select LAST_INSERT_ID() </selectKey> insert into user (username, birthday, address, sex) values (#{username}, #{birthday}, #{address}, #{sex}) </insert>
若是id类型是varchar或者uuid,则order应为before,由于数据库是先生成id再插入数据。数据库
别名是扫描包及其子包下全部的类,按照以下配法,mapper.xml中别名的使用是该类的类名,头字母大小写均可以识别。mybatis
<typeAliases> <package name="com.xxx.pojo"/> </typeAliases>
当进行多表查询的一对一映射时,属性名和列名彻底相同也须要写出,不然没法映射。oracle
<resultMap type="Orders" id="orders"> <result column="user_id" property="userId"/> </resultMap> <select id="selectOrdersList" resultMap="orders"> SELECT id, user_id, number, createtime, note FROM orders </select>
单表查询可省略属性名和列明彻底相同的,resultMap中只须要配一个不一样的属性。app
<resultMap type="Orders" id="order"> <result column="id" property="id"/> <result column="user_id" property="userId"/> <result column="number" property="number"/> <!-- 一对一 --> <association property="user" javaType="User"> <id column="user_id" property="id"/> <result column="username" property="username"/> </association> </resultMap> <select id="selectOrders" resultMap="order"> SELECT o.id, o.user_id, o.number, o.createtime, u.username FROM orders o left join user u on o.user_id = u.id </select>
多表一对一映射resultMap不能省略列明和属性名相同的。框架
建立表的语句没有相关约束,只要声明主键不为空便可,重点在于插入语句性能
<!-- 插入表数据 --> <insert id="insertData" parameterType="java.util.Map" databaseId="oracle"> <selectKey keyProperty="id" resultType="int" order="BEFORE"> select nvl(max(id),0)+1 from bank_table_info </selectKey> insert into ${dataMap.table_name} (id, <foreach collection="dataMap.keys" separator="," item="key" close=")"> ${key} </foreach> values (#{id}, <foreach collection="dataMap.keys" item="key" separator="," close=")"> #{dataMap[${key}]} </foreach> </insert>