核心配置文件详解

properties-引入驱动信息

在resources文件夹下创建jdbc.properties文件

  1. jdbc.driver=com.mysql.jdbc.Driver
  2. jdbc.url=jdbc:mysql://localhost:3306/mybatis
  3. jdbc.username=root
  4. jdbc.password=123456

在mybatis-config.xml核心配置文件中

  1. <!--引入properties文件,此时就可以${属性名}的方式访问属性值-->
  2. <properties resource="jdbc.properties"></properties>
  3. <dataSource type="POOLED">
  4. <!--设置驱动类的全类名-->
  5. <property name="driver" value="${jdbc.driver}"/>
  6. <!--设置连接数据库的连接地址-->
  7. <property name="url" value="${jdbc.url}"/>
  8. <!--设置连接数据库的用户名-->
  9. <property name="username" value="${jdbc.username}"/>
  10. <!--设置连接数据库的密码-->
  11. <property name="password" value="${jdbc.password}"/> </dataSource>

typeAliases-简化全限定名

1、将实体类一个一个进行注册

  1. <typeAliases>
  2. <!--typeAlias:设置某个具体的类型的别名
  3. type:需要设置别名的类型的全类名
  4. alias:设置此类型的别名,若不设置此属性,该类型拥有默认的别名,即类名且不区分大小写
  5. 若设置此属性,此时该类型的别名只能使用alias所设置的值 -->
  6. <typeAlias type="com.guang.mybatis.entity.User"></typeAlias>#默认别名为User
  7. <typeAlias type="com.guang.mybatis.entity.User" alias="abc"></typeAlias> #别名为abc
  8. </typeAliases>

2、将整个包下的实体类全部设置别名为默认

  1. <typeAliases>
  2. <!--以包为单位,设置改包下所有的类型都拥有默认的别名,即类名且不区分大小写-->
  3. <package name="com.guang.mybatis.entity"/> </typeAliases>
  4. <typeAliases>

此时的xml文件中全限定名即可省略

  1. <insert id="insertUser" parameterType="User"></insert>

mapper-将配置文件注册

注意:此时xml文件与dao接口所在的包名必须一致
例如:com,guang.mybatis.UserDao与com/guang/mybatis/UserMapper.xml

  1. <mappers>
  2. <mapper resource="UserMapper.xml"/>
  3. <!--以包为单位,将包下所有的映射文件引入核心配置文件
  4. 注意:此方式必须保证mapper接口和mapper映射文件必须在相同的包下 -->
  5. <package name="com.guang.mybatis.mapper"/> </mappers>

动态SQL

动态SQL-if

注意:当name==null或者name==’’时,sql语句会报错,所以得加上1=1的恒成立条件

  1. <!--List<Emp> getEmpListByMoreTJ(Emp emp);-->
  2. <select id="getEmpListByConditional" resultType="Emp">
  3. select * from t_emp where 1=1
  4. <if test="name != '' and name != null">
  5. and name = #{name}
  6. </if>
  7. <if test="age != '' and age != null">
  8. and age = #{age}
  9. </if>
  10. <if test="sex != '' and sex != null">
  11. and sex = #{sex}
  12. </if>
  13. <if test="eamil != '' and eamil != null">
  14. and eamil = #{eamil}
  15. </if>
  16. </select>

动态SQL-where

在where标签中,当条件不满足时,前面的的and或者or会被自动去掉,满足条件时,若条件前没有添加and,会自动加上and,所有条件都不满足时,where标签也会被自动去掉。
当and或者or在后面时,sql语句会报错。例如:age = #{age} and

  1. <!--List<Emp> getEmpListByMoreTJ(Emp emp);-->
  2. <select id="getEmpListByConditional" resultType="Emp">
  3. select * from t_emp
  4. <where>
  5. <if test="name != '' and name != null">
  6. name = #{name}
  7. </if>
  8. <if test="age != '' and age != null">
  9. and age = #{age}
  10. </if>
  11. <if test="sex != '' and sex != null">
  12. and sex = #{sex}
  13. </if>
  14. <if test="eamil != '' and eamil != null">
  15. and eamil = #{eamil}
  16. </if>
  17. </where>
  18. </select>

动态SQL-trim

疑问:添加上where关键字还是where标签?where标签

prefix、suffix ====》在前面或者后面添加。。。
prefixOverrides、suffixOverrides ====》在前面或者后面去掉。。。
例子:

在满足条件的if语句前加上where,去掉后面的and或者or

  1. <!--List<Emp> getEmpListByMoreTJ(Emp emp);-->
  2. <select id="getEmpListByConditional" resultType="Emp">
  3. select * from t_emp
  4. <trim prefix="where" suffixOverrides="and|or">
  5. <if test="name != '' and name != null">
  6. name = #{name}
  7. </if>
  8. <if test="age != '' and age != null">
  9. age = #{age} and
  10. </if>
  11. <if test="sex != '' and sex != null">
  12. sex = #{sex} and
  13. </if>
  14. <if test="eamil != '' and eamil != null">
  15. eamil = #{eamil} and
  16. </if>
  17. </trim>
  18. </select>

动态SQL-choose、when、otherwise

choose、when、otherwise 对应java中的 if….else if…..else
when至少要有一个,otherwise最多只能有一个