引言
Mybatis的真正强大,在于她对SQL的映射,这也是她吸引人的地方。实现相同的功能,她要比直接使用JDBC省去95%的代码量。而且将SQL语句独立在Java代码之外,为程序的修改和纠错提供了更大的灵活性,可以直接修改SQL语句,而无需重新编译Java程序。
SQL映射文件也是XML格式,其顶级元素有以下几个:
- select – 映射sql查询语句
- insert - 映射sql插入语句
- update - 映射sql更新语句
- delete - 映射sql删除语句
- sql - 就像程序中可以复用的函数一样,这个元素下放置可以被其他语句重复引用的sql语句
- resultMap - 用来描述如何从数据库查询结果集中来加载对象
- cache - 给定命名空间的缓存配置
- cache-ref - 其他命名空间缓存配置引用
1.mapper配置xml文件和接口关联。
1 <!--namespace务必和接口的全类名一致 --> 2 <mapper namespace="cn.bdqn.li.UserMapper">
2.resultMap映射。存在条件:当数据库字段名和实体类中的属性名不同的情况下。
1 <!--字段名和属性名不同时,使用resultMap映射--> 2 <resultMap id="userMap" type="User"> 3 <id property="id" column="xsdm"/> 4 <result property="name" column="xsmc"/> 5 </resultMap>
3.insert into 添加语句(带主键回写)
<!--id务必和接口中的方法名称对应 如果参数类型是一个对象,那么sql语句中#{对象的属性名} KeyProperty属性表示: 数据表主键对应的实体对象属性名称 parameterType:要执行的dao中的方法的参数,如果是类的话,必须使用全路径类 (全路径名可以使用在mybatis.xml文件中配置的别名代替) --> <!--新增用户的同时 拿到数据库中的id 01.完成新增操作之后并没有把连接还给连接池 02.而是接着使用连接去查询id SELECT @@IDENTITY SELECT LAST_INSERT_ID() 都可以获取刚刚插入数据的主键 mysql中使用 order="AFTER", 主键自增,必须是插入数据成功之后才能获取id oracle中使用 order="BEFORE" ,必须先从序列中获取id,才能新增! useGeneratedKeys: mybatis会根据数据库的不同获取主键===》 主键回填 --> <insert id="addUser" parameterType="User" keyProperty="id" useGeneratedKeys="true"> insert into xs(xsmc) values(#{name}) <!-- 回显,添加数据后,返回对象的id值 --> <selectKey resultType="int" keyProperty="id" order="AFTER"> select @@IDENTITY </selectKey> </insert>
4.查询语句
1 <!--查询指定的user对象 2 当数据库中的字段和实体类中的属性名相同时,使用resultType=“实体类名”。 3 --> 4 <select id="selectUserById" parameterType="int" resultType="User"> 5 SELECT xsmc from xs where xsdm=#{id} 6