在使用 MyBatis 时,最长打交道的就是 XML映射文件
,
使用 MyBatis 的 select、insert、update、delete 实现数据库的增删改查。 html
可是用的时间多了,发现相同的查询,却又不少中使用方法,属性的配置也是有多种方式,每次都会去抉择该使用哪种比较好?无奈耽误了开发时间。 java
这里主要总结的就是一套最经常使用,也是本人觉的最合理的MyBatis用法,记住这里的,就能够应付平常所需了,今后告别选择恐惧症。sql
记住其中的常见属性就能够,例如,select 元素有不少属性:数据库
<select id="selectUser" //与 UserMapper.java 接口对应的方法 parameterType="int" //传入的参数格式 resultType="hashmap" //返回的数据类型,当返回多个参数的时候,建议使用 resultMap resultMap="userResultMap" //返回的数据类型,至关于对 resultType="hashmap" 的封装。resultType、resultMap二者只能存在一个 parameterMap="deprecated" //已经废弃,如今使用 resultType 和 resultType flushCache="false" //是否清空缓存,默认为false useCache="true" //是否二级缓存,默认值:对 select 元素为 true。 timeout="10000" //等待数据库返回请求结果的秒数 fetchSize="256" statementType="PREPARED" // STATEMENT,PREPARED 或 CALLABLE 的一个。这会让 MyBatis 分别使用 Statement,PreparedStatement 或 CallableStatement,默认值:PREPARED。 ...>
可是咱们通常只须要配置其中几个就能够了,其它的不多使用:缓存
<select id="selectUser" resultType="hashmap" //返回的数据类型,当返回多个参数的时候,建议使用 resultMap resultMap="userResultMap" //返回的数据类型,至关于对 resultType="hashmap" 的封装。resultType、resultMap二者只能存在一个 >
是否是清爽多了。mybatis
<typeAlias type="com.test.model.User" alias="User"/> //类型别名,以后就不用写包名了 // resultMap 能够封装不少个属性,在返回数据多的状况下,能够避免使用 resultType="hashmap" 返回不易识别的Map对象,而能够直接返回封装的对象,如 User <resultMap id="userResultMap" type="User"> <id property="id" column="user_id" /> <result property="username" column="user_name"/> <result property="password" column="hashed_password"/> </resultMap> //sql语句的封装,以后可使用 <include refid="Base_Column_List" /> 来插入相关 sql 语句 <sql id="Base_Column_List" > id, phone, email, nickname, password, avatar, create_time, last_login_time, status </sql> <select id="selectUser" resultType="hashmap" //返回的数据类型。当返回多个参数的时候,建议使用 resultMap resultMap="userResultMap" //返回的数据类型。至关于对 resultType="hashmap" 的封装。resultType、resultMap二者只能存在一个 > <insert id="insertUser" parameterType="com.test.model.User" useGeneratedKeys="true" //(仅对 insert 和 update 有用)这会令 MyBatis 使用 JDBC 的 getGeneratedKeys 方法来取出由数据库内部生成的主键(好比:像 MySQL 和 SQL Server 这样的关系数据库管理系统的自动递增字段),默认值:false。 keyProperty="id" //(仅对 insert 和 update 有用)惟一标记一个属性,MyBatis 会经过 getGeneratedKeys 的返回值或者经过 insert 语句的 selectKey 子元素设置它的键值,默认:unset。若是但愿获得多个生成的列,也能够是逗号分隔的属性名称列表。 > <update id="updateUser"> <delete id="deleteUser">
MyBatis 中 useGeneratedKeys 和 keyProperty 含义:app
// 若是没有useGeneratedKeys="true"和keyProperty="id",下面 insert 以后的 user.getId() 是没法获取 id 值的 public void insert(User user) { int count = userMapper.insert(user); System.out.println("共插入" + count + "条记录!" + "\n刚刚插入记录的主键自增加值为:" + user.getId()); }
<select id="selectUser" //与 PersonMapper.java 接口对应的方法 parameterType="int" //传入的参数格式 resultType="hashmap" //返回的数据类型,当返回多个参数的时候,建议使用 resultMap resultMap="userResultMap" //返回的数据类型,至关于对 resultType="hashmap" 的封装。resultType、resultMap二者只能存在一个 parameterMap="deprecated" //已经废弃,如今使用 resultType 和 resultType flushCache="false" //是否清空缓存,默认为false useCache="true" //是否二级缓存,默认值:对 select 元素为 true。 timeout="10000" //等待数据库返回请求结果的秒数 fetchSize="256" statementType="PREPARED" // STATEMENT,PREPARED 或 CALLABLE 的一个。这会让 MyBatis 分别使用 Statement,PreparedStatement 或 CallableStatement,默认值:PREPARED。 ...> <insert id="insertUser" parameterType="com.test.model.User" flushCache="true" statementType="PREPARED" timeout="20" keyProperty="" //(仅对 insert 和 update 有用)惟一标记一个属性,MyBatis 会经过 getGeneratedKeys 的返回值或者经过 insert 语句的 selectKey 子元素设置它的键值,默认:unset。若是但愿获得多个生成的列,也能够是逗号分隔的属性名称列表。 useGeneratedKeys="" //(仅对 insert 和 update 有用)这会令 MyBatis 使用 JDBC 的 getGeneratedKeys 方法来取出由数据库内部生成的主键(好比:像 MySQL 和 SQL Server 这样的关系数据库管理系统的自动递增字段),默认值:false。 keyColumn="" //(仅对 insert 和 update 有用)经过生成的键值设置表中的列名,这个设置仅在某些数据库(像 PostgreSQL)是必须的,当主键列不是表中的第一列的时候须要设置。若是但愿获得多个生成的列,也能够是逗号分隔的属性名称列表。 > <update id="updateUser" parameterType="com.test.model.User" flushCache="true" statementType="PREPARED" timeout="20"> <delete id="deleteUser" parameterType="com.test.model.User" flushCache="true" statementType="PREPARED" timeout="20">
想详细的学习MyBatis,推荐你们看这个教程:http://www.mybatis.org/mybati...学习